我不知道我在这里做错了什么。这是少数情况之一,代码只是没有响应,并没有给回溯,继续进行,就像它的“正常”。我的目标是创造一个让玩家来回移动篮子的简单游戏。我以一种特别奇怪的方式编写它,但我觉得即使方法很脏,它也可以完成工作。我想它会回来困扰我。 我咨询了我的老师,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
答案 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
我会把剩下的留给你。