[Forwarding to the list. Please use "Reply to all", not "Reply", if you want your reply to a message to go to the list]

Begin forwarded message:

From: "D. Hartley" <[EMAIL PROTECTED]>
Date: April 27, 2005 01:36:26 BST
To: Max Noel <[EMAIL PROTECTED]>
Subject: Re: [Tutor] font/text in pygame
Reply-To: "D. Hartley" <[EMAIL PROTECTED]>

Max,

Thank you for your helpful answer. I am particularly interested in this part:

string formatting. You ever programmed in C? It's basically >the same
thing as printf, only better. Example:
"Hi, my name is %s. I am %s years old. I come from %s." >% ("Max", 21,
"France")
returns "Hi, my name is Max. I am 21 years old. I come >from France."

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).

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:

import pygame
from pygame.locals import *

def main():
        # Initialise screen
        pygame.init()
        screen = pygame.display.set_mode((640, 480))
        pygame.display.set_caption('Basic Pygame program')

        # Fill background
        background = pygame.Surface(screen.get_size())
        background = background.convert()
        background.fill((250, 250, 250))

        # 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
            background.blit(text, textpos)

        
        # Blit everything to the screen
        screen.blit(background, (0, 0))
        pygame.display.flip()

        # Event loop
        while 1:
                for event in pygame.event.get():
                        if event.type == QUIT:
                                return

                screen.blit(background, (0, 0))
                pygame.display.flip()
                

if __name__ == '__main__': main()

Thanks, Max!!

~Denise

On 4/26/05, Max Noel <[EMAIL PROTECTED]> wrote:

On Apr 26, 2005, at 23:57, D. Hartley wrote:

But in any case, font/text will only take strings - i cant pass in a
list, or an index to an item in a list (which is, in this case, a
tuple), and since the items in the list will be changed and updated
obviously i cant just type in the items as strings myself.

any ideas? does this question even make sense the way it's worded?
It's a last-ditch effort to get my high score list onto the graphics
window before i have to abandon it :)

The idea, of course, is to convert the things you want to display to
strings. You may be interested in the following things:


- the str() function -- converts anything it's passed into a string.
str(1) returns "1". str((2, 3, 4)) returns "(2, 3, 4)".
- Basic string concatenation -- use the + operator. Example: "a" + "b"
returns "ab".
- the string.join method -- joins a list or tuple of strings. Example:
'xx'.join(["foo", "bar", "baz"]) returns "fooxxbarxxbaz".
- string formatting. You ever programmed in C? It's basically the same
thing as printf, only better. Example:
"Hi, my name is %s. I am %s years old. I come from %s." % ("Max", 21,
"France")
returns "Hi, my name is Max. I am 21 years old. I come from France."

By using some of these (string formatting and str() come to mind), you
should be able to do what you want.


Hope that helps,
-- 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?"





--
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  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to