I have some sample code of working with sprites and walls here:
http://programarcadegames.com/index.php?chapter=example_code&lang=en

Paul Vincent Craven



On Sun, Nov 25, 2012 at 7:20 AM, myles broomes
<[email protected]>wrote:

>  I'm coding a pac man clone but I cant place the walls correctly. Heres
> my code:
> #Pac-man
> #A clone of the classic game, Pac-man
>
> import pygame,sys
> from pygame.locals import *
> pygame.init()
> WINWIDTH=640 #width of the window in pixels
> WINHEIGHT=480 #height of the window in pixels
> FPS=30 #frames per second
> #         r   g   b
> YELLOW=(255,255,  0)
> BLACK= (  0,  0,  0)
> WHITE= (255,255,255)
> BLUE=  (  0,  0,255)
> RED=   (255,  0,  0)
> #the layout of walls on the level
> levelLayout="""
>  ________
> |     __     |
> |    |__|    |
> |________|
> """
> def get_text(underline,text,size,pos,color):
>     """Returns a rect object and a surface object to be displayed on the
> screen. """
>     BASICFONT=pygame.font.Font('freesansbold.ttf',size)
>     BASICFONT.set_underline(underline)
>     surfObj=BASICFONT.render(text,True,color)
>     rectObj=surfObj.get_rect()
>     rectObj.center=(pos)
>     return surfObj,rectObj
> def run_game():
>     """Iterates through the game loop until the player is game over. """
>     #default variables for the pac-man object that the player controls
>     pacPosX=int(WINWIDTH/2)
>     pacPosY=int(WINHEIGHT/2)
>     #tracks if the player is game over or not
>     game_over=False
>     #tracks which direction the player wants to move in, stationary by
> default
>     direction=None
>     #tracks which part of the level layout is being iterated over
>     indexX=0
>     indexY=0
>     lineList=[]
>     while not game_over:
>         DISPLAYSURF.fill(BLACK)
>         for wall in levelLayout: #iterates through the level layout and
> places walls accordingly
>             if wall=="|":
>                 lineList.append([(indexX,indexY),(indexX,indexY+21)])
>             elif wall=="_":
>                 lineList.append([(indexX,indexY),(indexX+80,indexY)])
>             indexX+=80
>             if indexX==WINWIDTH:
>                 indexX=0
>                 indexY+=160
>         indexX=0 #reset the X index
>         indexY=0 #reset the Y index
>         print(lineList)
>         for drawWall in range(len(lineList)): #draws the walls onto the
> screen
>
> pygame.draw.line(DISPLAYSURF,BLUE,lineList[drawWall][0],lineList[drawWall][1])
>         #draws pac man
>         pygame.draw.circle(DISPLAYSURF,YELLOW,(pacPosX,pacPosY),10)
>
>         for event in pygame.event.get():
>             if event.type==QUIT:
>                 pygame.quit()
>                 sys.exit()
>             elif event.type==KEYUP: #find out which direction the player
> wants pac man to move in
>                 if event.key==K_LEFT:
>                     direction='left'
>                 elif event.key==K_RIGHT:
>                     direction='right'
>                 elif event.key==K_UP:
>                     direction='up'
>                 elif event.key==K_DOWN:
>                     direction='down'
>         if direction: #if the player wants to move pac man, move him in
> the desired direction
>             if direction=='left':
>                 pacPosX-=6
>             elif direction=='right':
>                 pacPosX+=6
>             elif direction=='up':
>                 pacPosY-=6
>             elif direction=='down':
>                 pacPosY+=6
>         #wrap pac man to the opposite end of the screen if he goes off
>         if pacPosX<0:
>             pacPosX=WINWIDTH
>         elif pacPosX>WINWIDTH:
>             pacPosX=0
>         elif pacPosY<0:
>             pacPosY=WINHEIGHT
>         elif pacPosY>WINHEIGHT:
>             pacPosY=0
>         pygame.display.update()
>         FPSCLOCK.tick(FPS)
> def main():
>     global DISPLAYSURF,FPSCLOCK
>
>     DISPLAYSURF=pygame.display.set_mode((WINWIDTH,WINHEIGHT))
>     pygame.display.set_caption('Pac-Man')
>     FPSCLOCK=pygame.time.Clock()
>     while True:
>         run_game()
> main()
>
> For some reason, the walls end up all over the place and I'm not too sure
> why. Any help is much appreciated.
>
> Myles Broomes
>
>

Reply via email to