Packman colission检测

时间:2018-05-21 18:11:59

标签: python pygame pacman

在下面的代码中,我想简单地在碰撞发生后从显示屏上删除食物。我的第一个想法是简单地将食物的坐标改变到屏幕外的位置。但这并没有解决我的问题。 x和y坐标是相同的并存储在两个列表中(只是为了简单。一个列表可以帮我做得很好)我使用pygame.draw来绘制食物和Packman(暂时是Packman函数)将简单的点Packman替换为其图片)

关于我的问题的任何想法?

import pygame

white=(255,255,255)
black=(0,0,0)
foodcolor=(120,100,130)
PackmanColor=(255,215,0)

PageHeight = 500
PageWidth = 500

FPS=20

x_packman= 150
y_packman= 200
x_food = 20

pygame.init()
surface = pygame.display.set_mode((PageHeight,PageWidth))
pygame.display.set_caption("AI Game")
clock = pygame.time.Clock()

PackmanPicture = pygame.image.load('packman.png').convert()
RedGhost = pygame.image.load('redghost.png').convert()
YellowGhost = pygame.image.load('yellowghost.png').convert()


face="right"

def packmann(x , y):
    pygame.draw.rect(surface, PackmanColor, [x, y, 10, 10])

def Packman(x , y, image):

    if(face =="right"):
        temp_face = pygame.transform.rotate(image,0)
    if(face == "left"):
        temp_face = pygame.transform.rotate(image,180)
    if (face == "up"):
        temp_face = pygame.transform.rotate(image, 90)
    if (face == "down"):
        temp_face = pygame.transform.rotate(image, 270)

    surface.blit(temp_face ,(x,y))

def ghost(x,y,image):
    surface.blit(image,(x,y))



#y_food = 10

red_ghost_x = 400
red_ghost_y = 400

yellow_ghost_x = 400
yellow_ghost_y = 50

xfood = []

for i in range(50):
    x_food +=23
    xfood.append(x_food)
#print(xfood)
yfood = xfood

y_move = 0
x_move = 0


Game_Over=False

def GameOver():
    pygame.quit()
    quit()


while not Game_Over:

    global face
    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            Game_Over=True
        if (event.type == pygame.KEYDOWN):
            if (event.key == pygame.K_UP):
                y_move = -3
                x_move = 0
                face="up"


        if (event.type == pygame.KEYDOWN):
            if (event.key == pygame.K_DOWN):
                y_move = 3
                x_move = 0
                face = "down"

        if(event.type == pygame.KEYDOWN):
            if(event.key == pygame.K_RIGHT):
                x_move = 3
                y_move = 0
                face = "right"

        if(event.type == pygame.KEYDOWN):
            if(event.key == pygame.K_LEFT):
                x_move = -3
                y_move = 0
                face = "left"

    y_packman+=y_move
    x_packman+=x_move


    surface.fill(black)

    #packman(x_packman,y_packman,PackmanPicture)
    packmann(x_packman,y_packman)
    ghost(red_ghost_x,red_ghost_y,RedGhost)
    ghost(yellow_ghost_x,yellow_ghost_y,YellowGhost)

    if (y_packman>PageHeight-10 or y_packman<5 or x_packman>PageWidth-10 or x_packman<5):
        GameOver()

    for i in range(len(xfood)-31):
        for j in range(len(xfood)-31):
            pygame.draw.rect(surface,foodcolor,[xfood[i],yfood[j],4,4])

    pygame.display.update()

    for i in range(len(xfood)-31):
        for j in range(len(xfood)-31):
             if (x_packman == xfood[i] and y_packman == yfood[j]):
                    xfood[i]=999
                    yfood[j]=999
    clock.tick(FPS)


pygame.quit()
quit() 

0 个答案:

没有答案