蛇游戏是一个非常流行和有趣的游戏。蛇每吃一次水果,它的长度就会变长,这让游戏变得更加困难
关于贪吃蛇游戏 Python 项目
这个python项目的目标是构建一个蛇游戏项目。在这个 python 项目中,玩家必须移动一条蛇才能接触到水果。如果蛇碰到自己或游戏的边界,那么游戏就会结束。
项目先决条件
为了构建蛇游戏项目,我们使用了海龟模块、随机模块、时间模块和 Python 的概念。
Turtle模块为我们提供了在绘图板上绘图的功能
Random模块将用于生成随机数
时间模块是python中的一个内置模块。它提供了时间的功能。
要安装 python 模块,我们在命令行中使用 pip install 命令:
pip install turtles
pip install random
下载贪吃蛇游戏 Python 项目
蛇游戏python项目源码请下载:Python贪吃蛇游戏程序
项目文件结构
在python中构建贪吃蛇游戏项目的步骤:
- 导入库
- 创建游戏画面
- 创造蛇和食物
- 键盘绑定
- 游戏主循环
1、导入需要的模块
import turtle
import random
import time
我们需要导入turtle、random和time模块
2. 制作游戏画面
screen = turtle.Screen()
screen.title('DATAFLAIR SNAKE GAME')
screen.setup(width = 700, height = 700)
screen.tracer(0)
turtle.bgcolor('turquoise')
turtle.speed(5)
turtle.pensize(4)
turtle.penup()
turtle.goto(-310,250)
turtle.pendown()
turtle.color('black')
turtle.forward(600)
turtle.right(90)
turtle.forward(500)
turtle.right(90)
turtle.forward(600)
turtle.right(90)
turtle.forward(500)
turtle.penup()
解释
- title()将设置所需的屏幕标题
- setup()用于设置屏幕的高度和宽度
- tracer(0)将关闭屏幕更新
- bgcolor()将设置背景颜色
- forward()将用于将海龟向前移动指定的量
- right()用于顺时针转动海龟,left()用于逆时针转动海龟
- penup()在移动时不会绘制
3、创造蛇和食物
snake = turtle.Turtle()
snake.speed(0)
snake.shape('square')
snake.color("black")
snake.penup()
snake.goto(0,0)
snake.direction = 'stop'
fruit = turtle.Turtle()
fruit.speed(0)
fruit.shape('circle')
fruit.color('red')
fruit.penup()
fruit.goto(30,30)
old_fruit=[]
scoring = turtle.Turtle()
scoring.speed(0)
scoring.color("black")
scoring.penup()
scoring.hideturtle()
scoring.goto(0,300)
scoring.write("Score :",align="center",font=("Courier",24,"bold"))
解释
- Turtle()将用于创建一个新的海龟对象
- hideturtle()将用于隐藏海龟
- goto()用于在 x 和 y 坐标处移动海龟
4、 键盘绑定
def snake_go_up():
if snake.direction != "down":
snake.direction = "up"
def snake_go_down():
if snake.direction != "up":
snake.direction = "down"
def snake_go_left():
if snake.direction != "right":
snake.direction = "left"
def snake_go_right():
if snake.direction != "left":
snake.direction = "right"
def snake_move():
if snake.direction == "up":
y = snake.ycor()
snake.sety(y + 20)
if snake.direction == "down":
y = snake.ycor()
snake.sety(y - 20)
if snake.direction == "left":
x = snake.xcor()
snake.setx(x - 20)
if snake.direction == "right":
x = snake.xcor()
snake.setx(x + 20)
screen.listen()
screen.onkeypress(snake_go_up, "Up")
screen.onkeypress(snake_go_down, "Down")
screen.onkeypress(snake_go_left, "Left")
screen.onkeypress(snake_go_right, "Right")
解释
screen.listen() 函数在按键按下时监听。
如果按下向上键,那么蛇将向上移动。
如果按下向下键,那么蛇将向下移动。
如果按下左键,那么蛇将向左移动。
如果按右键,那么蛇将向正确的方向移动
5. 蛇果碰撞
if snake.distance(fruit)< 20:
x = random.randint(-290,270)
y = random.randint(-240,240)
fruit.goto(x,y)
scoring.clear()
score+=1
scoring.write("Score:{}".format(score),align="center",font=("Courier",24,"bold"))
delay-=0.001
new_fruit = turtle.Turtle()
new_fruit .speed(0)
new_fruit .shape('square')
new_fruit .color('red')
new_fruit .penup()
old_fruit.append(new_fruit )
for index in range(len(old_fruit)-1,0,-1):
a = old_fruit[index-1].xcor()
b = old_fruit[index-1].ycor()
old_fruit[index].goto(a,b)
if len(old_fruit)>0:
a= snake.xcor()
b = snake.ycor()
old_fruit[0].goto(a,b)
snake_move()
解释
如果蛇碰到水果,那么水果会随机移动,分数会增加,蛇的大小也会增加
6.蛇与边界碰撞
if snake.xcor()>280 or snake.xcor()< -300 or snake.ycor()>240 or snake.ycor()<-240:
time.sleep(1)
screen.clear()
screen.bgcolor('turquoise')
scoring.goto(0,0)
scoring.write(" GAME OVER \n Your Score is {}".format(score),align="center",font=("Courier",30,"bold"))
解释
如果蛇碰到游戏的边界,那么游戏就会结束。
screen.clear() 将删除海龟在屏幕上的所有绘图
7.当蛇碰到自己时
for food in old_fruit:
if food.distance(snake) < 20:
time.sleep(1)
screen.clear()
screen.bgcolor('turquoise')
scoring.goto(0,0)
scoring.write(" GAME OVER \n Your Score is {}".format(score),align="center",font=("Courier",30,"bold"))
贪吃蛇游戏程序输出