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