Python 蛇和苹果不对齐

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模块在Python 3.6中的使用,在我获取知识的过程中,我决定创建一个Snake游戏。我的游戏代码如下所示,除了蛇和苹果不对齐外,其他一切似乎都很正常,如果它们不对齐,吃苹果是非常困难的。(如果有帮助的话,它们只差几个像素)

#导入
导入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()