造轮子之DIY贪吃蛇小游戏|项目复盘

247 阅读2分钟

作者:看那个码农

公众号:看那个码农

1.项目简介

贪吃蛇是一款比较经典的游戏,相信很多朋友们在自己手机上都玩过。

贪吃蛇通过“上”,“下”,“左”,“右”四个方向来控制蛇的移动,

贪吃蛇每吃到一个食物,身体长度就会增长一次,当蛇撞到墙壁或者自己身体的时候,游戏就会结束

故此,本文基于Python,进行贪吃蛇游戏demo复盘

1 00_00_00-00_00_30.gif

2.项目配置

  • Python3.x
  • turtle库
  • freegames库
  • random库
  1. turtle库来实现创建游戏窗体与键盘按键的监听工作。

  2. freegames库是进行贪吃蛇的绘制工作。

  3. random库是用来导入随机函数进行随机坐标的生成工作。

3.项目流程

1.项目分析

在该贪吃蛇项目中,我们需要由整体到细节,

  1. 首先定义游戏窗体,

  2. 定义完游戏窗体后需要定义游戏的几个关键元素:蛇,食物,移动距离

  3. 然后定义元素之间的关联关系,

比如:

  • 不断移动的蛇,
  • 随机出现的食物
  • 蛇吃了食物后就会增长
  • 蛇碰到墙或者自己的身体,游戏就会结束

基于以上分析开始建立demo

2.导入游戏需要使用的模块,函数与类。

from random import randrange
from freegames import vector,square
import turtle

3.定义游戏中蛇,食物,以及移动距离等元素的位置坐标。

food=vector(0,0)
snake=[vector(10,0)]
position=vector(0,-10)

4.定义change()函数,用于改变蛇的移动方向。

def change(x,y):
    position.x=x
    position.y=y

5.定义is_inside()函数,判断蛇头是否在窗体内。

def is_inside(head):
    return -200 < head.x <190 and -200 < head.y < 190

6.定义move()函数,用于实现蛇的移动以及判断蛇是否吃到食物

#实现蛇的移动,判断蛇是否吃到食物
def move():
    #确定蛇头的位置
    head = snake[-1].copy()
    
    #移动一步
    head.move(position)
    
    #判断蛇的头部是否在边缘或者蛇的身体中
    if not is_inside(head) or head in snake:
        
        #如果在,判断成立,绘制蛇头颜色,说明游戏结束
        square(head.x,head.y,9,'red')
        turtle.update()
        return
    
    #更新蛇的位置
    snake.append(head)
    
    #如果蛇吃到食物
    if head==food:
        
        #每吃到一次记录下的蛇的长度,同时也相当于游戏的得分
        print('Snake:',len(snake))
        
        #随机生成下一个食物元素x,y的坐标
        food.x == randrange(-15, 15) * 10
        food.y == randrange(-15, 15) * 10

    else:
        #清除蛇走过的坐标
        snake.pop(0)
    
    #清空蛇走过的位置
    turtle.clear()
    
    #循环遍历蛇的坐标
    for body in snake:
        
        #绘制黑色的蛇
        square(body.x,body.y,9,'black')
        
    #绘制绿色食物
    square(food.x,food.y,9,'green')

    turtle.update()
    
    #定时不断执行move函数,直到蛇碰到窗体边缘或者自己身体,函数中断,游戏中断
    turtle.ontimer(move,100)

7.创建程序入口

创建程序入口,如设置程序的窗口大小。

使用move()函数实现蛇的移动效果,用按键监听实现控制蛇的移动方向

if __name__ == '__main__':

    #定义窗体
    turtle.setup(420,420,370,0)
    turtle.title("看那个码农之贪吃蛇")
    turtle.hideturtle()
    turtle.tracer(False)

    #调用定义的函数
    move()

    #事件监听器
    turtle.listen()

    #监听键盘的“上”,“下”,“左”,“右”事件
    turtle.onkey(lambda: change(10,0),'Right')
    turtle.onkey(lambda: change(-10, 0), 'Left')
    turtle.onkey(lambda: change(0, 10), 'Up')
    turtle.onkey(lambda: change(0, -10), 'Down')
    turtle.done()

4.项目演示结果

1 00_00_00-00_00_30.gif

5.项目思考总结

其实从整个demo来看,demo的代码数量不多,但是相比一般的贪吃蛇小游戏demo做了很多画龙点睛之处,

本demo专注于对

  • 贪吃蛇的移动,
  • 贪吃蛇是否吃到食物,
  • 贪吃蛇的绘制

三个方向进行考虑,

合理运用了turtle库进行键盘按键的事件监听以及贪吃蛇游戏的窗口的定于与绘制,

运用freegames库进行贪吃蛇的绘制工作,

运用random库处理demo中的随机事件,如食物的生成。

总的来说,Python代码的强大不止于此,更有很多精彩的库与模块等待者开发者们去发现与使用。

人生苦短,我用Python。

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情