用Python实现贪吃蛇小游戏

915 阅读3分钟

贪吃蛇效果

f5hb7-57ks2.gif

安装Python

    官网下载并安装Python,配置环境变量。

image.png     因为在Linux,Unix,Mac系统上自带Python环境,只需要在Windows系统上需要安装一下,小编这里用的是win11系统,安装成功后在开始菜单栏下可以看见。

image.png

编辑器选择

    编辑器的选择,初学者可以用IDLE硬刚,成熟的人会选用PyCharm,不过小编这次用的是Vs-Code,在扩展里面下载Python。

image.png

代码实现

①  海龟绘图

image.png

    如图所示,贪吃蛇的红色食物可以是一个红色正方形,蛇身是一个黑色长方形,那么这些都可以使用海龟绘图。可以写一个公共的函数用来绘制正方形,蛇身由若干个正方形组成。

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

②  贪吃蛇运动

    蛇的运动的核心思想就是一个列表,蛇头就是列表的最后一个元素。例如一个列表:

    [[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]

上述列表即代表一个长度为6的贪吃蛇,蛇身都调用上面square函数去绘制,蛇头的坐标就是[50,0]。贪吃蛇所吃的食物也是用square函数去绘制,只不过食物的x,y坐标是随机整数。当贪吃蛇遇到食物的时候,蛇身会增加,即列表的第一个元素不需要去pop,大体思路就是这样。

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

# 定义变量
snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]]
apple_x = randrange(-20, 18)*10
apple_y = randrange(-19, 19)*10
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 inside_snake():
    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.append([snake[-1][0]+aim_x, snake[-1][1]+aim_y])
    if (not inside()) or inside_snake():
        square(snake[-1][0], snake[-1][1], 10, "red")
        update()
        return
    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
    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)
    update()

# 蛇的方向改变
def change(x, y):
    global aim_x, aim_y
    aim_x = x
    aim_y = y

# 主体函数
setup(420, 420, 0, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: change(0, 10), "Up")
onkey(lambda: change(0, -10), "Down")
onkey(lambda: change(-10, 0), "Left")
onkey(lambda: change(10, 0), "Right")
gameLoop()
done()

③  生成exe游戏文件

    代码写完了,那怎么才能运行游戏呢?

  • 可以ctrl+f5,直接运行代码

image.png

  • 终端里面敲命令:pyinstaller+文件名 -F (打包成一个exe文件)

image.png

总结

    此游戏留了一个bug,就是在向右移动的时候,再向左移动,直接就会gg,相信聪明的你一定会有解决方案的。