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