2017-10-09 1 views
1

나는 Python 3.6 용 PyGame 모듈을 사용하는 것에 대해 배우고 지식을 얻는 여정에서 뱀 게임을 만들기로 결정했다. 게임 코드가 아래에 있으며, 뱀과 사과가 정렬되지 않는다면 모든 것이 잘 작동하는 것처럼 보입니다. 정렬하지 않으면 사과를 먹는 것이 매우 어렵습니다.뱀과 애플이 맞지 않음

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

답변

1

귀하의 오류가 apple = [[random.randrange(0, dis_width - 200 - size), random.randrange(0, dis_height - size), size]]에서 (즉 도움이된다면 그들은 단지 몇 픽셀 길 이죠). 사과 위치는 (0,800) 이내 일 수 있습니다. 따라서 12 835 125 일 수 있으며 뱀은 (dis_width/2 -200, dis_height) 인 (400,300) 에 있습니다. 그리고 +/- 25, 크기과 함께 x_step을 할당하면 뱀이 움직입니다.
그래서 뱀의 위치는 25 씩 감소 또는 증가합니다. 0,25,50,.....,375,400,425,.....,750,775. 사과 위치가 125 또는 275 [125 % 25 = 0]이면 문제가 없습니다.
사과 위치가 122 붐인 경우 ... if apple[0][0] == snake[0][0]: 뱀 수 그의 가장 좋아하는 과일을 먹습니다. 해결 방법이 랜덤 범위 함수 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]:.