On Apr 27, 2005, at 01:36, D. Hartley wrote:
I haven't programmed in C (python is my first language!), but I *have* done something like this before, only with the print command:
def displaybalance(): for score, name in mylist: slip = 30 - len(name) slip_amt = slip*" " print "%s%s%s" % (name,slip_amt,score)
(I did this with the print command to make sure it would produce what I wanted, three strings for the three sample scores I put in this dummy list).
Yup, you did that. And actually, what happened was that string formatting was first used to create a string, and then this string was sent to the print command, which displayed it. Your last line is equivalent to:
foo = "%s%s%s" % (name,slip_amt,score) print foo
The only "magic" thing you can only do with print is the "print a, b, c" syntax.
So I went and found some sample code to just create a graphics window I could try out my new stuff in, and I inserted it as follows. The only problem is, it's printing all three lines right on top of each other! The newline command wont work (i'm not printing), and I tried to do something like text.pos = text.pos + 20 for the y, but no matter where I put it in the loop, it was in the wrong place (cant reference it before I create "text", can't make a function out of the whole text part outside of the main loop....etc).
I know at this point it's just an indentation problem/where-it-goes-in-the-loop problem. But I've tried and retried it a hundred times and I cant seem to get it to work. But if I can make it work on this sample, maybe I can insert it into my program. (Then the only thing I'll have to do is get user input for the new name, which I'll worry about second, if I can get this first part to work).
I know it's a lot to ask, but can you find the error here, how to make these lines print one under the other and not on top of each other?
Ideally I want it to print several lines:
(1) High Scores (2) Denise 23 (etc., one for each %s item)
Here's the sample render-font-onto-pygame-window code:
[SNIP some code]
# Display some text
for score, name in mylist:
slip = 30 - len(name)
slip_amt = slip*" "
font = pygame.font.Font(None, 25)
text = font.render("%s%s%s" % (name,slip_amt,score), 1,
(10, 10, 10))
textpos = text.get_rect()
textpos.centerx = background.get_rect().centerx
textpos.centery = 270
^^^^^^^^^^^^^^^^^^^^^
This, I believe, is the line you have to modify. All your text goes to the same place because you affect it the same position. (text.centery, text.centerx) is where the "text" object is rendered on the screen. The renderer doesn't know (nor should even care) about the text you may have rendered earlier.
Therefore, you need to render each line of text at a unique position. Ideally, the second line should be below the first, etc.
So that means textpos.centery must be slightly different for each line of text you create. Let's say, 270 for the first one, 300 for the second one, etc.
You could start by modifying your for loop so that it reads like this:
for score, name, posY in mylist, range(270, 540, 30):
The rest shouldn't be hard to figure out. ;)
-- Max
maxnoel_fr at yahoo dot fr -- ICQ #85274019
"Look at you hacker... A pathetic creature of meat and bone, panting and sweating as you run through my corridors... How can you challenge a perfect, immortal machine?"
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
