Python으로 뱀 게임을 만드는 방법

뱀 게임을 즐기는 사람이라면 이 기사가 흥미로울 것이라고 확신합니다.

이 기사에서는 Python 초보자도 쉽게 개발할 수 있는 간단한 뱀 게임을 만드는 방법을 알려 드리겠습니다.

이 게임을 만드는 방법에는 여러 가지가 있으며 그 중 하나는 게임을 만드는 데 사용하는 Python 라이브러리인 Python의 PyGame 라이브러리를 사용하는 것입니다.

다른 방법은 거북이 라이브러리를 사용하는 것입니다. 이 모듈은 Python과 함께 사전 설치되어 제공되며 사용자가 모양과 그림을 만들 수 있는 가상 캔버스를 제공합니다.

따라서 이 기사에서는 특히 초보 Python 개발자에게 초보자 친화적인 간단한 뱀 게임을 구현하기 위해 거북이 라이브러리를 사용할 것입니다.

이 모듈 외에도 두 개의 다른 모듈도 사용할 것입니다.

  • 시간 모듈 – 이 방법을 사용하면 이전 시간 이후 경과된 시간(초)을 추적할 수 있습니다.
  • Random 모듈 – Python에서 무작위로 숫자를 생성합니다.

사용하는 데 필요한 기타 기본 도구에는 선택한 텍스트 편집기가 포함됩니다. 이 기사에서는 VSCode를 사용할 것입니다. 물론 아직 Python 3이 없는 경우 컴퓨터에 Python 3을 설치해야 합니다. koreantech.org 컴파일러를 사용할 수도 있습니다.

이것은 재미있어야 합니다!

뱀 게임의 작동 원리

이 게임의 궁극적인 목표는 플레이어가 화면에 표시되는 음식을 수집하기 위해 뱀을 제어하여 최고 점수를 달성하는 것입니다.

플레이어는 뱀이 움직이는 방향과 관련된 4개의 방향 키를 사용하여 뱀을 제어합니다. 뱀이 블록이나 자신을 때리면 플레이어는 게임에서 집니다.

이 게임을 구현하기 위해 다음 단계를 따릅니다.

  • 사전 설치된 모듈(거북이, 시간 및 임의)을 프로그램으로 가져옵니다.
  • 거북이 모듈을 사용하여 게임의 화면 표시 만들기.
  • 화면에서 뱀의 이동 방향에 대한 키를 설정합니다.
  • 게임 플레이 구현.

구현 코드를 추가할 snakegame.py 파일을 만듭니다.

  당혹스러운 페이스북 게시물을 되돌릴 수 있는 5초의 시간 확보

모듈 가져오기

이 코드 비트는 기본적으로 Python에 사전 설치된 거북이, 시간 및 임의 모듈을 가져옵니다. 또한 플레이어의 초기 점수, 플레이어가 얻을 수 있는 최고 점수, 모든 이동에서 플레이어가 지연 시간에 대한 기본값을 설정합니다. 여기서 time 모듈은 지연 시간을 계산하는 데 사용됩니다.

다음 코드 비트를 snakegame.py 파일에 추가하십시오.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

게임의 화면 표시 만들기

여기서 가져온 거북이 모듈을 사용하면 게임의 창 화면이 될 가상 캔버스를 만들 수 있습니다. 여기에서 뱀의 몸과 뱀이 수집할 음식을 만들 수 있습니다. 우리 화면에는 플레이어의 추적된 점수도 표시됩니다.

이 코드를 Python 파일에 추가합니다.

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice('triangle','circle')
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

위의 코드 스니펫은 거북이 화면을 초기화하는 것으로 시작하여 제목과 배경색을 화면에 전달합니다. 화면의 창 크기를 정의한 후 가상 캔버스에 뱀의 모양을 그립니다.

penup() 메서드는 거북이가 움직일 때 선이 그려지지 않도록 단순히 거북이의 펜을 집어듭니다. goto(x,y) 메서드에는 거북이를 절대 위치로 이동시키는 좌표 위치가 포함되어 있습니다.

그런 다음 뱀이 수집하는 음식을 만듭니다. 뱀이 음식을 수집할 때마다 플레이어의 점수와 게임 중에 플레이어가 도달하는 최고 점수를 표시하려고 합니다. 따라서 우리는 이것을 구현하기 위해 pen.write() 메소드를 사용합니다. hideturtle()은 이 텍스트가 작성된 헤더 섹션의 화면에서 거북이 아이콘을 숨깁니다.

코드 끝에 turtle.mainloop()를 추가하는 것이 중요합니다. 그러면 사용자가 화면에서 무언가를 할 수 있도록 화면이 더 오래 표시됩니다.

파일을 실행하면 다음과 같은 출력이 나타납니다.

뱀의 방향키 설정

여기에서는 화면에서 뱀이 움직이는 방향을 안내하는 특정 키를 설정합니다. 왼쪽은 ‘L’, 오른쪽은 ‘R’, 위쪽은 ‘U’, 아래쪽은 ‘D’를 사용합니다. 우리는 뱀을 호출할 거북이의 방향 기능을 사용하여 이러한 방향을 구현할 것입니다.

  메타버스에서 땅을 사는 방법 [2022] + 7 구매 플랫폼

다음 코드 스니펫을 코드에 추가합니다.

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

위의 move() 함수는 정확한 좌표 값 내에서 정의된 위치에서 뱀의 움직임을 설정합니다.

listen() 함수는 플레이어가 키를 눌렀을 때 뱀을 특정 방향으로 이동시키는 메서드를 호출하는 이벤트 리스너입니다.

뱀 게임 게임 플레이 구현

뱀 게임의 기본 전망을 정한 후에는 게임을 실시간으로 만들어야 합니다.

여기에는 다음이 포함됩니다.

  • 먹이를 모을 때마다 뱀의 길이를 늘리고 다른 색을 사용하는 것이 좋습니다.
  • 뱀이 음식을 수집할 때마다 플레이어의 점수를 높이고 가장 높은 점수를 추적합니다.
  • 플레이어는 뱀이 벽이나 자신의 몸과 충돌하는 것을 제어할 수 있습니다.
  • 뱀이 충돌하면 게임이 다시 시작됩니다.
  • 게임이 다시 시작되면 플레이어의 점수는 0으로 재설정되고 화면은 플레이어의 최고 점수를 유지합니다.

이 코드의 나머지 부분을 파이썬 파일에 추가하십시오.

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            # Adding segment
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

위의 코드 스니펫에서 화면 내에서 뱀의 먹이에 대한 임의의 위치를 ​​설정했습니다. 뱀이 이 음식을 수집할 때마다 몸 부분이 다른 색으로 증가합니다. 이 경우 흰색으로 성장을 구별합니다.

  봇넷이란 무엇이며 봇넷으로부터 안전하게 유지하는 방법

뱀이 충돌하지 않고 먹이를 수집한 후, 먹이는 화면 크기의 270 좌표 범위 내에서 임의의 위치에 설정됩니다. 뱀이 음식을 모을 때마다 플레이어의 점수는 5씩 증가합니다. 뱀이 충돌하면 플레이어의 점수는 0으로 설정되고 화면은 최고 점수를 유지합니다.

이제 Python 파일을 반환하면 거북이 화면이 다음과 같이 표시되어야 합니다.

결론 🐍

거북이 라이브러리를 사용하는 것은 이 기사에서 본 것처럼 뱀 게임을 만드는 재미있고 쉬운 방법 중 하나입니다. 또는 PyGame 라이브러리를 사용하여 동일한 것을 구현할 수 있습니다. 확인하실 수 있습니다 여기에서 파이 게임 튜토리얼 게임을 다르게 구현할 수 있는 방법을 확인하세요.

Python에서 숫자 추측 게임을 시도하거나 Python에서 JSON 데이터를 얻는 방법을 시도해 볼 수도 있습니다.
코딩을 즐기세요!