pygame中的鸡蛋和篮子;挣扎于鸡蛋和篮子之间的碰撞检测

时间:2017-03-24 01:44:56

标签: python pygame

我不知道我在这里做错了什么。这是少数情况之一,代码只是没有响应,并没有给回溯,继续进行,就像它的“正常”。我的目标是创造一个让玩家来回移动篮子的简单游戏。我以一种特别奇怪的方式编写它,但我觉得即使方法很脏,它也可以完成工作。我想它会回来困扰我。 我咨询了我的老师,IRC和朋友。他们都没有给我一个直接的答案或只是承认不知道问题到底是什么,或者给我一个看文档的通用答案。

#The egg and basket game

import pygame
from pygame.locals import *
import time
import random
x=260
y=541
score = 0
lives = 3

#Screen initialize
pygame.init()
pygame.font.init()
screen=pygame.display.set_mode((600,600))
pygame.display.set_caption("egg")
clock = pygame.time.Clock()

#Basket
basket=pygame.image.load("art/basket.png")
basket_rect = basket.get_rect()

#egg
egg=pygame.image.load("art/egg.png")
egg_rect = egg.get_rect()

def eggy(xegg, yegg):
    screen.blit(egg,(xegg, yegg))

def basketey(x, y):
    screen.blit(basket,(x, y))

#Movement of basket
ychange=0
xchange=0
exiting=False


xegg = random.randrange(50,550)
yegg = 20
while not exiting:
    if yegg<550:
        yegg += 2
        eggy(xegg, yegg)

    elif egg_rect.colliderect(basket_rect):
        yegg=20
        xegg = random.randrange(50,550)
        yegg=yegg+ychange

        score += 1

        eggy(xegg, yegg)

    else:
        yegg=20
        xegg = random.randrange(50,550)
        yegg=yegg+ychange

        lives -= 1

        eggy(xegg, yegg)

    clock.tick(60)
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exiting=True
            pygame.quit()
            quit()
        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_LEFT:
                xchange=-5
            if event.key==pygame.K_RIGHT:
                xchange=5
        if event.type==pygame.KEYUP:
            if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
                xchange=0

    x=x+xchange

    screen.fill((255, 255, 255))
    basketey(x, y)
    eggy(xegg, yegg)

    if x > 600 - 78 or x < 0:
        xchange = 0

    if lives == 0:
        print("Game Over, Your score was: %s" % score)
        exiting = True

    pygame.display.update()

ychange=0

1 个答案:

答案 0 :(得分:0)

所以主要的问题是你在呼唤:

egg_rect.colliderect(basket_rect)

这是正确的,但你永远不会更新矩形。每个矩形都有x,y,width和height属性。所有你更新的是变量yegg。如果用egg_rect.y替换yegg的所有实例,那么你现在正在更新蛋的矩形,这样碰撞就可以了。

篮子也一样。确保更新矩形的x,y坐标,因为这是碰撞所需的。

例如:

if egg_rect.y < 550:
    egg_rect.y += 2
else:
    egg_rect.y = 20
    egg_rect.x = random.randrange(50, 550)
    lives -= 1

if egg_rect.colliderect(basket_rect):
    egg_rect.y=20
    egg_rect.x = random.randrange(50,550)
    score += 1

我会把剩下的留给你。