首先让我说我不是一个了不起的编码器,所以代码不是最漂亮的。我现在正在制作一个非常基本的蛇版本。目前我对蛇与食物之间的碰撞感到困惑。 (x,y代表蛇和食物x,食物为食物)。碰撞检测现在还不能正常工作,我无法弄清楚它有什么问题。在此先感谢您的帮助。 请保持尽可能简单,不要进入任何课程,因为我不知道如何使用它们。
编辑:对不起,英语不是我的第一语言。代码现在正常运行。与食物碰撞后的碰撞和食物生成无效。
import pygame
import sys
import random
import math
import time
pygame.init()
screen=pygame.display.set_mode((500,500))
red=(255,0,0)
blue=(0,0,255)
green=(0,255,0)
black=(0,0,0)
block1=1
block2=0
count=0
screen.fill(black)
randStart=random.randint(0,25)
x=randStart*20
y=randStart*20
xd=20
yd=0
foodx=random.randint(0,480)
foody=random.randint(0,480)
snakecol=pygame.Rect(x,y,20,20)
foodcol=pygame.Rect(foodx,foody,20,20)
done=False
while not done:
screen.fill(black)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
#controls
if block1==1:
if(pygame.key.get_pressed()[pygame.K_a]):
yd=0
xd=-20
block1=0
block2=1
if block1==1:
if(pygame.key.get_pressed()[pygame.K_d]):
yd=0
xd=20
block1=0
block2=1
if block2==1:
if(pygame.key.get_pressed()[pygame.K_w]):
xd=0
yd=-20
block1=1
block2=0
if block2==1:
if(pygame.key.get_pressed()[pygame.K_s]):
xd=0
yd=20
block1=1
block2=0
#stop moving paddle
if x<-20:
x=500
if x>500:
x=-20
if y<-20:
y=500
if y>500:
y=-20
#food
if snakecol.colliderect(foodcol):
foodx=random.randint(0,480)
foody=random.randint(0,480)
x=x+xd
y=y+yd
pygame.draw.rect(screen,(255,255,255),(foodx,foody,20,20),0)
pygame.draw.rect(screen,(255,255,255),(x,y,20,20),0)
pygame.display.flip()
time.sleep(0.4)
count+=1
pygame.quit()
答案 0 :(得分:1)
将x = x + xd更改为snakecol.x + = xd,y部分也相同。然后在绘图部分使用snakecol作为rect而不是x,y,20,20就像现在一样。问题是你永远不会更新蛇的矩形位置。抱歉格式化,我在工作和平板电脑。