[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Pac Man



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 <mylesbroomes@xxxxxxxxxxxxx> 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