贪吃蛇效果
安装Python
官网下载并安装Python,配置环境变量。
因为在Linux,Unix,Mac系统上自带Python环境,只需要在Windows系统上需要安装一下,小编这里用的是win11系统,安装成功后在开始菜单栏下可以看见。
编辑器选择
编辑器的选择,初学者可以用IDLE硬刚,成熟的人会选用PyCharm,不过小编这次用的是Vs-Code,在扩展里面下载Python。
代码实现
① 海龟绘图
如图所示,贪吃蛇的红色食物可以是一个红色正方形,蛇身是一个黑色长方形,那么这些都可以使用海龟绘图。可以写一个公共的函数用来绘制正方形,蛇身由若干个正方形组成。
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,直接运行代码
- 终端里面敲命令:pyinstaller+文件名 -F (打包成一个exe文件)
总结
此游戏留了一个bug,就是在向右移动的时候,再向左移动,直接就会gg,相信聪明的你一定会有解决方案的。