Python 蛇和苹果不对齐
我正在学习PyGame模块在Python 3.6中的使用,在我获取知识的过程中,我决定创建一个Snake游戏。我的游戏代码如下所示,除了蛇和苹果不对齐外,其他一切似乎都很正常,如果它们不对齐,吃苹果是非常困难的。(如果有帮助的话,它们只差几个像素)Python 蛇和苹果不对齐,python,python-3.x,pygame,Python,Python 3.x,Pygame,我正在学习PyGame模块在Python 3.6中的使用,在我获取知识的过程中,我决定创建一个Snake游戏。我的游戏代码如下所示,除了蛇和苹果不对齐外,其他一切似乎都很正常,如果它们不对齐,吃苹果是非常困难的。(如果有帮助的话,它们只差几个像素) #导入 导入pygame 随机输入 #颜色 白色=(255,255,255) 黑色=(0,0,0) 红色=(255,0,0) 绿色=(0,255,0) #设置 pygame_init=pygame.init() dis_宽度=1000 离地高度=60
#导入
导入pygame
随机输入
#颜色
白色=(255,255,255)
黑色=(0,0,0)
红色=(255,0,0)
绿色=(0,255,0)
#设置
pygame_init=pygame.init()
dis_宽度=1000
离地高度=600
window=pygame.display.set_模式((dis_宽度,dis_高度))
pygame.display.set_标题(“滑动”)
窗口填充(白色)
fps=10
clock=pygame.time.clock()
尺寸=25
苹果=[[0,0]]
snake=[[0,0]]
x_步,y_步=0,0
苹果=0
#游戏循环
主菜单=真
玩游戏=False
死亡屏幕=错误
尽管如此:
#主菜单
而主菜单:
#设置
snake=[(dis_-width-200)/2,dis_-height/2,size]]
apple=[[random.randrange(0,dis_width-200-size),random.randrange(0,dis_height-size),size]]
#信息
x_步,y_步=0,0
填充(黑色,矩形=[0,0,显示宽度,显示高度])
font=pygame.font.SysFont(无,50)
blit(font.render(“按空格”继续),True,绿色),[100200])
pygame.display.update()
#事件处理程序
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
主菜单=错误
玩游戏=True
#播放菜单
玩游戏时:
#事件处理程序
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_UP:
y_步长=-大小
x_阶跃=0
elif event.key==pygame.K_向下:
y_步长=大小
x_阶跃=0
elif event.key==pygame.K_左:
x_步长=-大小
y_阶跃=0
elif event.key==pygame.K_RIGHT:
x_步长=大小
y_阶跃=0
#边界
如果snake[0][0]+x_步数<0或snake[0][0]+x_步数>dis_宽度-大小-200:
玩游戏=False
死亡屏幕=真
elif snake[0][1]+y_步长<0或snake[0][1]+y_步长>dis_高度-大小:
玩游戏=False
死亡屏幕=真
其他:
snake[0][0]+=x_步
snake[0][1]+=y_步
#苹果试验
如果apple[0][0]==snake[0][0]:
apple=[[random.randrange(0,dis_width-200-size),
random.randrange(0,dis_高度-大小),大小]]
吃的苹果数+=1
#吸引
填充(白色,矩形=[dis_width-200,0,200,dis_height])
填充(黑色,矩形=[0,0,显示宽度-200,显示高度])
font=pygame.font.SysFont(无,50)
blit(font.render(“SCORE:,True,black),[dis_width-200,0])
blit(font.render(str(apples_-ate),真,黑),[dis_-width-200,50])
pygame.draw.rect(窗口,红色,[apple[0][0],apple[0][1],大小,大小])
pygame.draw.rect(窗口,绿色,[snake[0][0],snake[0][1],大小,大小])
pygame.display.update()
时钟滴答声(fps)
#死亡屏幕
在死亡屏幕上:
#信息
填充(黑色,矩形=[0,0,显示宽度-200,显示高度])
font=pygame.font.SysFont(无,50)
blit(font.render(“你死了”)、True、red、[100100])
blit(font.render(“按“A”再次播放)”,True,红色),[100200])
blit(font.render(“按'Q'退出”,True,红色),[100300])
pygame.display.update()
#事件处理程序
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_a:
主菜单=真
死亡屏幕=错误
elif event.key==pygame.K_q:
pygame.quit()
退出
您的错误在apple=[[random.randrange(0,dis\u width-200-size),random.randrange(0,dis\u height-size),size]]
。苹果位置可以是(0800)范围内的任何内容。所以它可以是12835125
,而你的蛇是(400300),也就是(dis_-width/2-200,dis_-height)。然后你用+/-25指定x_步
,大小,这就是蛇的运动。所以你的蛇的位置以25的减量或增量移动<代码>0,25,50,…,375400425,…,750775。如果您的苹果位置是125或275[125%25=0],则不会有问题。
但如果你知道苹果的位置是122繁荣
如果苹果[0][0]==蛇[0][0]:
你的蛇可以永远吃不下他最喜欢的水果。
解决方案是在randrange函数中添加步骤apple=[[random.randrange(0,dis_width-200-大小,大小),random.randrange(0,dis_height-大小,大小)]]
这将在
0,25,50,…,725750775
(如果是generate solve,我不知道它也是generate 800)
如果苹果[0][0]==snake[0][0],还有一个小错误:如果苹果[0][0]==snake[0][0]和苹果[0][1]==snake[0][1],你必须匹配snake位置的x和y,编辑该位置
# Imports
import pygame
import random
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# Setup
pygame_init = pygame.init()
dis_width = 1000
dis_height = 600
window = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption("Slither")
window.fill(white)
fps = 10
clock = pygame.time.Clock()
size = 25
apple = [[0, 0]]
snake = [[0, 0]]
x_step, y_step = 0, 0
apples_ate = 0
# Game Loop
main_menu = True
play_game = False
death_screen = False
while True:
# Main Menu
while main_menu:
# Setup
snake = [[(dis_width - 200) / 2, dis_height / 2, size]]
apple = [[random.randrange(0, dis_width - 200 - size), random.randrange(0, dis_height - size), size]]
# Message
x_step, y_step = 0, 0
window.fill(black, rect=[0, 0, dis_width, dis_height])
font = pygame.font.SysFont(None, 50)
window.blit(font.render("Press 'Space' To Continue", True, green), [100, 200])
pygame.display.update()
# Event Handler
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
main_menu = False
play_game = True
# Play Menu
while play_game:
# Event Handler
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
y_step = -size
x_step = 0
elif event.key == pygame.K_DOWN:
y_step = size
x_step = 0
elif event.key == pygame.K_LEFT:
x_step = -size
y_step = 0
elif event.key == pygame.K_RIGHT:
x_step = size
y_step = 0
# Boundries
if snake[0][0] + x_step < 0 or snake[0][0] + x_step > dis_width - size - 200:
play_game = False
death_screen = True
elif snake[0][1] + y_step < 0 or snake[0][1] + y_step > dis_height - size:
play_game = False
death_screen = True
else:
snake[0][0] += x_step
snake[0][1] += y_step
# Apple Test
if apple[0][0] == snake[0][0]:
apple = [[random.randrange(0, dis_width - 200 - size),
random.randrange(0, dis_height - size), size]]
apples_ate += 1
# Draws
window.fill(white, rect=[dis_width - 200, 0, 200, dis_height])
window.fill(black, rect=[0, 0, dis_width - 200, dis_height])
font = pygame.font.SysFont(None, 50)
window.blit(font.render("SCORE:", True, black), [dis_width - 200, 0])
window.blit(font.render(str(apples_ate), True, black), [dis_width - 200, 50])
pygame.draw.rect(window, red, [apple[0][0], apple[0][1], size, size])
pygame.draw.rect(window, green, [snake[0][0], snake[0][1], size, size])
pygame.display.update()
clock.tick(fps)
# Death Screen
while death_screen:
# Message
window.fill(black, rect=[0, 0, dis_width - 200, dis_height])
font = pygame.font.SysFont(None, 50)
window.blit(font.render("You died.", True, red), [100, 100])
window.blit(font.render("Press 'A' To Play Again.", True, red), [100, 200])
window.blit(font.render("Press 'Q' To Quit", True, red), [100, 300])
pygame.display.update()
# Event Handler
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
main_menu = True
death_screen = False
elif event.key == pygame.K_q:
pygame.quit()
quit()