Python 蟒蛇自食
我最近开始使用pygame,我正在关注Newboston的youtube教程。以下是我的主要游戏循环:Python 蟒蛇自食,python,python-3.x,pygame,Python,Python 3.x,Pygame,我最近开始使用pygame,我正在关注Newboston的youtube教程。以下是我的主要游戏循环: def game_loop(): global direction global tdirection lead_x=display_width/2 lead_y=display_height/2 block_size=10 change_x=10 change_y=0 game_exit=False GameOve
def game_loop():
global direction
global tdirection
lead_x=display_width/2
lead_y=display_height/2
block_size=10
change_x=10
change_y=0
game_exit=False
GameOver=False
main_menu=False
snakelist=[]
snakelength=1
applethickness=20
RandAppleX=round(random.randrange(0, display_width-applethickness )/10.0)*10.0
RandAppleY=round(random.randrange(0, display_height-applethickness )/10.0)*10.0
while not game_exit:
while GameOver==True:
game_display.fill(white)
message_screen('You lost, Press Q to quit or C to retry.', red)
pygame.display.update()
for event in pygame.event.get():
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_q:
loss.play()
game_exit=True
GameOver= False
elif event.key==pygame.K_c:
direction='right'
game_loop()
if event.type==pygame.QUIT:
game_exit=True
GameOver= False
for event in pygame.event.get():
if event.type==pygame.QUIT:
game_exit=True
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_a:
change_x=-block_size
direction='left'
change_x=-block_size
change_y=0
elif event.key==pygame.K_d:
direction='right'
change_x=block_size
change_y=0
elif event.key==pygame.K_w:
direction='up'
change_y=-block_size
change_x=0
elif event.key==pygame.K_s:
direction='down'
change_y=block_size
change_x=0
elif event.key==pygame.K_ESCAPE:
pause()
if lead_x>=display_width or lead_x<0 or lead_y>=display_height or lead_y<0:
loss.play()
GameOver=True
lead_x+=change_x
lead_y+=change_y
clock.tick(FPS)
snakehead=[]
snakehead.append(lead_x)
snakehead.append(lead_y)
snakelist.append(snakehead)
if len(snakelist)>snakelength:
del snakelist[0]
for segment in snakelist[:-1]:
if segment==snakehead:
loss.play()
GameOver=True
game_display.fill(white)
game_display.blit(aimg, (RandAppleX, RandAppleY))
snake(snakelist, block_size)
score(snakelength-1)
if lead_x>= RandAppleX and lead_x<= RandAppleX+applethickness and lead_y<= RandAppleY+applethickness and lead_y>= RandAppleY:
RandAppleX=round(random.randrange(0, display_width-applethickness )/10.0)*10.0
RandAppleY=round(random.randrange(0, display_height-applethickness )/10.0)*10.0
snakelength+=1
effect.play()
pygame.display.update()
pygame.quit()
quit()
def game_loop():
全球方向
全局定向
引线x=显示宽度/2
引线y=显示高度/2
块大小=10
改变x=10
改变y=0
游戏退出=错误
GameOver=False
主菜单=错误
蛇学家=[]
蛇形长度=1
苹果厚度=20
RandAppleX=圆形(随机.randrange(0,显示宽度\U-applethickness)/10.0)*10.0
RandAppleY=round(random.randrange(0,显示高度-applethickness)/10.0)*10.0
不退出游戏时:
当GameOver==True时:
游戏显示填充(白色)
消息屏幕('您丢失,按Q退出或按C重试',红色)
pygame.display.update()
对于pygame.event.get()中的事件:
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_q:
输球
游戏退出=真
GameOver=False
elif event.key==pygame.K_c:
方向‘‘右’
博弈(循环)
如果event.type==pygame.QUIT:
游戏退出=真
GameOver=False
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
游戏退出=真
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_a:
更改\u x=-块大小
方向左
更改\u x=-块大小
改变y=0
elif event.key==pygame.K\u d:
方向‘‘右’
更改\u x=块大小
改变y=0
elif event.key==pygame.K_w:
向上
更改\u y=-块大小
改变x=0
elif event.key==pygame.K_:
方向“向下”
更改y=块大小
改变x=0
elif event.key==pygame.K_ESCAPE:
暂停()
如果导线x>=显示宽度或导线x=显示高度或导线Y长度:
德尔斯内克利斯特[0]
对于蛇形列表中的段[:-1]:
如果段==蛇头:
输球
GameOver=True
游戏显示填充(白色)
游戏显示。blit(aimg,(RandAppleX,RandAppleY))
蛇(蛇学家,块大小)
分数(蛇形长度-1)
如果改变方向时lead_x>=RandAppleX和lead_x,则只需检查方向是否与当前方向相反,如果是这种情况,则不设置新方向。这就解决了问题。一个简单的解决方案是,通过检查蛇移动的方向是否与请求的方向相反,防止蛇自行后退。这将涉及一些额外的检查。大概是这样的:
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_a and direction != 'right':
change_x=-block_size
direction='left'
change_x=-block_size
change_y=0
elif event.key==pygame.K_d and direction != 'left':
direction='right'
change_x=block_size
change_y=0
elif event.key==pygame.K_w and direction != 'down':
direction='up'
change_y=-block_size
change_x=0
elif event.key==pygame.K_s and direction != 'right':
direction='down'
change_y=block_size
change_x=0
你试过跟踪方向,并根据方向禁用某些输入吗?哇!真不敢相信我错过了这么简单的一件事!非常感谢@没问题!这件事一直发生在我身上,但这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@Galsilberman为什么不提供答案呢?它是关于如何解决这个问题的指令。@ MeGAMAN是一个有效的答案,尽管有些人可能认为答案应该更详细和具体。您得到的评论是从审阅队列自动生成的,标记时可能会出错。