蛇和苹果不对齐

问题描述:

我正在学习使用Python 3.6的PyGame模块,并且在获取知识的旅程中,我决定创建一个Snake游戏。我的游戏代码在下面,除了蛇和苹果不对齐,并且如果它们不对齐,吃苹果是非常困难的,一切似乎都很好。 (他们关闭的只是几个像素是否有帮助)蛇和苹果不对齐

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

你的错误是在apple = [[random.randrange(0, dis_width - 200 - size), random.randrange(0, dis_height - size), size]]。苹果的位置可以是(0,800)以内的任何东西。所以它可以是12 835 125,你的蛇在(400,300)这是(dis_width/2-200,dis_height)。而你的指定x_step +/- 25,大小这是蛇的运动。
所以你的蛇的位置以25的递减或递增移动。0,25,50,.....,375,400,425,.....,750,775。如果你的苹果位置是125或275 [125%25 = 0],那就没有问题了。
但是,如果你的苹果位置是122兴旺... if apple[0][0] == snake[0][0]:你的蛇可以从来没有吃他最喜欢的水果。 解决方法是在你的randrange函数中添加一步apple = [[random.randrange(0, dis_width - 200 - size,size), random.randrange(0, dis_height - size,size), size]]这将会在 0,25,50,.....,725,750,775内生成随机数(如果它生成解决方案,我不知道它也会生成800)。

还有其他的小错误if apple[0][0] == snake[0][0]:你必须匹配x和y的位置编辑也是if apple[0][0] == snake[0][0] and apple[0][1] == snake[0][1]: