>백엔드 개발 >파이썬 튜토리얼 >Python으로 스네이크 게임을 작성하는 방법은 무엇입니까?

Python으로 스네이크 게임을 작성하는 방법은 무엇입니까?

王林
王林앞으로
2023-05-09 20:55:063386검색

Snake Python 게임(소스 코드 + 주석 + 붙여넣기 및 사용) 이 Snake 게임은 매우 간단하며 로드하기 어려운 pygame을 사용하지 않습니다. 다음은 실행 다이어그램입니다.

Python으로 스네이크 게임을 작성하는 방법은 무엇입니까?

Python으로 스네이크 게임을 작성하는 방법은 무엇입니까?

게임 코드 구현

1 . 이미지 그리기

게임 이미지를 그릴 때는 pygame보다 가벼운 Turtle Graphics를 데이터베이스에 사용합니다

데이터베이스 구축(gamebase.py)
from turtle import * # "*"是引用所有函数

def square(x, y, size, color_name):
    up()
    goto(x, y)
    down()
    color(color_name)
    begin_fill()

    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)

    end_fill()

위는 거북이를 통해 그리는 것입니다. 거리를 둔 후 회전합니다. 90도 회전한 다음 작은 정사각형이 그려질 때까지 다시 90도 회전

사과 그리기(snake.py)

방금 그린 데이터베이스를 참조하세요

from turtle import *
from gamebase import square
from random import randrange

그런 다음 캔버스 크기를 정의합니다

setup(420,420,0,0)
//隐藏乌龟头 emoj.emoj.
hideturtle
//隐藏轨迹
tracer(False)

//绘制
done()
게임 프로그램 정의 loop(Java의 루프 스레드와 동일)
def gameLoop():
	//随机生成苹果
	apple_x = randrange(-200, 200)
	apple_y = randrange(-200, 200)
	//绘制苹果
	square(apple_x, apple_y, 10, "red")
	//刷新画布
	update()
Snake 그리기(snake.py)

Snake를 대기열로 생각할 수 있으며 이 대기열의 각 요소에는 두 개의 변수(수평 및 수직 좌표)가 포함되어 있습니다. 요소)

def gameLoop():
	//随机生成苹果
	apple_x = randrange(-200, 200)
	apple_y = randrange(-200, 200)
	//绘制蛇
	for n in range(len(sanke)):
		square(snake[n][0],snake[n][1[],10,"black)
	//绘制苹果
	square(apple_x, apple_y, 10, "red")
	//刷新画布
	update()
탐욕스러운 뱀의 움직임을 그려보세요

뱀 움직임의 원리: 뱀의 움직임을 원활하게 하기 위해서는 뱀이 움직일 때 대기열에 있는 첫 번째 요소를 던져야 합니다. 스네이크 큐(pop()), 스네이크 끝에 요소 추가(append())

global apple_x, apple_y, snake, aim_x, aim_y #全局变量申请snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ])snake.pop(0)global apple_x, apple_y, snake, aim_x, aim_y 
#全局变量申请
snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ])
snake.pop(0)

그런 다음 실행 시간을 새로 고치는 루프를 추가해야 합니다.

ontimer(gameLoop, 100)
 # 每100毫秒运行一下gameLoop函数
탐욕스러운 스네이크 작업 만들기 response

Python에서는 매우 간단한 키보드 모니터링 설정이 필요합니다

listen() #监听
onkey(lambda: change(0, 10), "w")
onkey(lambda: change(0, -10), "s")
onkey(lambda: change(-10, 0), "a")
onkey(lambda: change(10, 0), "d")
gameLoop()
뱀이 사과를 먹었는지 확인

이것도 매우 쉽습니다. 뱀의 가로 및 세로 좌표만 비교하면 됩니다. 머리는 사과의 가로, 세로 좌표와 같습니다 (뱀 머리가 사과와 일치)

 if snake[-1][0] != apple_x or snake[-1][1] != apple_y:
        snake.pop(0)
    else:
        apple_x = randrange(-20, 18) * 10
        apple_y = randrange(-19, 19) * 10
뱀이 당신을 물지 여부를 판단합니다

이 원리는 위의 뱀이 사과를 먹는지 여부의 원리와 유사합니다

def bite():
    for n in range(len(snake)-1):
        if snake[-1][0] == snake[n][0] and snake[-1][1] == snake[n][1]:
            return True
    return False
결정 뱀이 경계 안에 있는지
def inside():
    if -200 <= snake[-1][0] <= 180 and -190 <= snake[-1][1]<=190:
        return True
    else :
        return False

게임 소스 코드

gamebase.py
from turtle import * # "*"是引用所有函数

def square(x, y, size, color_name):
   up()
   goto(x, y)
   down()
   color(color_name)
   begin_fill()

   forward(size)
   left(90)
   forward(size)
   left(90)
   forward(size)
   left(90)
   forward(size)
   left(90)

   end_fill()
snake.py
from  time import sleep

apple_x = randrange(-20, 18) * 10
apple_y = randrange(-19, 19) * 10
snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]]
aim_x = 10
aim_y = 0


def inside():
    if -200 <= snake[-1][0] <= 180 and -190 <= snake[-1][1]<=190:
        return True
    else :
        return False


def change(x, y):
    global aim_x, aim_y
    aim_x = x
    aim_y = y


def bite():
    for n in range(len(snake)-1):
        if snake[-1][0] == snake[n][0] and snake[-1][1] == snake[n][1]:
            return True
    return False


def gameLoop():
    global apple_x, apple_y, snake, aim_x, aim_y #全局变量申请
    snake.append([ snake[-1][0] + aim_x, snake[-1][1] + aim_y ])
    if snake[-1][0] != apple_x or snake[-1][1] != apple_y:
        snake.pop(0)
    else:
        apple_x = randrange(-20, 18) * 10
        apple_y = randrange(-19, 19) * 10

    if(not inside()) or bite():
        square(snake[-1][0], snake[-1][1], 10,"hotpink")
        update()
        sleep(2)# 暂停2秒
        apple_x = randrange(-20, 18) * 10
        apple_y = randrange(-19, 19) * 10
        snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]]
        aim_x = 10
        aim_y = 0
    n = 0
    clear()
    square(-210,-200,410,"black")
    square(-200,-190,390,"white")
    square(apple_x, apple_y, 10, "red")
    for n in range(len(snake)):
        square(snake[n][0], snake[n][1], 10, 'black')
    ontimer(gameLoop, 100)  # 每300毫秒运行一下gameLoop函数
    update()
#注意:代码的前后顺序会给游戏带来不同的体感

setup(420, 420, 0, 0)
hideturtle()
tracer(False)
listen() #监听
onkey(lambda: change(0, 10), "w")
onkey(lambda: change(0, -10), "s")
onkey(lambda: change(-10, 0), "a")
onkey(lambda: change(10, 0), "d")
gameLoop()
done()
.

위 내용은 Python으로 스네이크 게임을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제