惊呆了!90后的童年---Python实现贪吃蛇游戏_python

蛇游戏是一个非常流行和有趣的游戏。蛇每吃一次水果,它的长度就会变长,这让游戏变得更加困难

关于贪吃蛇游戏 Python 项目

这个python项目的目标是构建一个蛇游戏项目。在这个 python 项目中,玩家必须移动一条蛇才能接触到水果。如果蛇碰到自己或游戏的边界,那么游戏就会结束。
惊呆了!90后的童年---Python实现贪吃蛇游戏_编程语言_02

项目先决条件

为了构建蛇游戏项目,我们使用了海龟模块、随机模块、时间模块和 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"))

贪吃蛇游戏程序输出

惊呆了!90后的童年---Python实现贪吃蛇游戏_Python游戏_03