Python使用海龟绘图实现贪吃蛇游戏

作者:Jiayu920716 时间:2022-01-03 15:21:28 

在实现贪吃蛇游戏时,首先需要使用python内置的turtle模块来实现创建游戏窗体与键盘按键的监听工作,然后使用freegames模块进行贪吃蛇的绘制工作。

1、turtle模块

turtle模块是python的内置模块,所以在使用前需要使用import导入该模块。代码如下:


import turtle

(1) 创建游戏窗体可以使用turtle模块中的setup()方法来实现。语法格式如下:


turtle.setup(width=_CFG["width"],height=_CFG["height"],startx=_CFG["leftright"],starty=_CFG["topbottom"])

参数说明如下:

  • width:表示窗体的宽度,如果是整数,大小以像素为单位,如果是浮动,则为屏幕的一小部分;默认值为屏幕的50%。

  • height:表示窗体的高度,如果是整数,高度以像素为单位,如果是浮动,则为屏幕的一小部分;默认值为屏幕的75%。

  • startx:表示窗体显示在屏幕的横向位置,如果为正,则以像素为单位从屏幕左边缘开始,如果为负,则从右边缘开始,如果没有,则水平居中窗口。

  • starty:表示窗体显示在屏幕的纵向位置,如果为正,则以像素为单位从屏幕上边缘开始,如果为负,则从下边缘开始,如果没有,则垂直居中窗口。

创建游戏窗体的关键代码如下:


import turtle      # 导入绘图海龟模块
turtle.setup(420, 420)      # 创建窗体大小
turtle.done()       # 停止画笔绘制,但绘图窗体不关闭

(2)通过turtle模块中的onkey()方法可以实现对应键盘中按键的监听工作。语法格式如下:


turtle.onkey(fun,key)

参数说明如下:

  • fun:表示需要执行的方法。

  • key:该参数为字符串,表示键盘中对应的按键,例如“a”或“space”。

注意:在使用onkey()方法实现键盘的监听时,还需要调用turtle.listen()方法即可实现键盘按键的监听。

实现键盘中上、下、左、右按键监听工作的关键代码如下:


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')    # 按键盘下键,蛇向下走

2、freegames模块

freegames模块是第三方模块,所以在使用前需要先通过以下命令进行模块的安装:


pip install freegames

模块安装完成以后,首先需要导入freegames模块中的vector与square函数。代码如下:


from freegames import vector,square  # 导入向量类与绘图函数

(1)通过freegames模块中的vector()类可以根据指定的x、y坐标创建一个二维向量对象。vector()类的语法格式如下:


class freegames.vector(x,y)

参数说明如下:

  • x:表示横向坐标。

  • y:表示纵向坐标。

实现定义游戏中的食物位置、蛇位置以及蛇移动的位置与距离。关键代码如下:


food = vector(0,0)        # 食物
snake = [vector(10, 0)]   # 蛇
position = vector(0, -10) # 移动位置,一步的距离为10

(2)通过freegames模块中square函数可以实现在(x,y)处绘制指定边长大小的正方形,并填充指定颜色。square()函数的语法格式如下:


freegames.square(x,y,size,name)

参数说明如下:

  • x:表示横向坐标。

  • y:表示纵向坐标。

  • size:表示绘制正方形的边长。

  • name:表示填充颜色的名称。

实现绘制游戏中食物、蛇。关键代码如下:


square(body.x, body.y, 9, 'black') # 绘制黑色蛇
square(food.x, food.y, 9, 'green')     # 绘制绿色食物

实例


from random import randrange          # 导入随机函数
from freegames import vector,square  # 导入向量函数与绘图函数
import turtle                         # 导入绘图海龟模块

food = vector(0,0)        # 食物
snake = [vector(10, 0)]   # 蛇
position = vector(0, -10) # 移动位置,一步的距离为10

def change(x, y):        # 改变蛇的移动方向
   position.x = x
   position.y = y

def is_inside(head):        # 判断蛇头是否在窗体内
   return -200 < head.x < 190 and -200 < head.y < 190

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))       # 根据蛇的长度进行加分
       food.x = randrange(-15, 15) * 10  # 随机生成食物x坐标
       food.y = randrange(-15, 15) * 10  # 随机生成食物y坐标
   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()
   turtle.ontimer(move, 100)           # 定时执行move函数

if __name__ == '__main__':                  # 程序入口
   turtle.setup(420, 420, 370, 0)          # 创建窗体大小
   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()   # 停止画笔绘制,但绘图窗体不关闭

python俄罗斯方块游戏集合

python经典小游戏汇总

python微信跳一跳游戏集合

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

来源:https://blog.csdn.net/Yuyu920716/article/details/111713668

标签:python,贪吃蛇
0
投稿

猜你喜欢

  • OpenCV图像卷积之cv.filter2D()函数详解

    2021-11-16 07:51:34
  • MySQL8.0服务无法正常启动的解决过程

    2024-01-13 04:33:27
  • CentOS7安装MySQL 8.0.26的过程

    2024-01-20 08:28:01
  • Python PIL图片如何按比例裁剪

    2021-08-13 02:04:55
  • python中遍历文件的3个方法

    2022-10-21 08:41:07
  • TensorFlow tf.nn.max_pool实现池化操作方式

    2021-08-20 20:36:45
  • PHP 中文简繁互转代码 完美支持大陆、香港、台湾及新加坡

    2023-11-15 11:46:16
  • 防止Access 2000密码被破译的方法

    2008-11-20 16:48:00
  • Python使用progressbar模块实现的显示进度条功能

    2023-11-20 05:40:07
  • .NET连接MongoDB数据库实例教程

    2024-01-18 22:02:43
  • MySQL 1130异常,无法远程登录解决方案详解

    2024-01-28 11:51:21
  • python 如何对logging日志封装

    2023-07-06 11:27:36
  • Python实现平行坐标图的两种方法小结

    2023-07-30 20:45:34
  • 在Django中URL正则表达式匹配的方法

    2021-06-09 22:38:57
  • Python subprocess模块功能与常见用法实例详解

    2021-08-30 02:46:43
  • python中if-elif-else语句实例用法讲解

    2023-03-08 21:59:05
  • 原生js编写贪吃蛇小游戏

    2023-07-02 05:19:17
  • pandas将DataFrame的几列数据合并成为一列

    2022-07-27 13:46:23
  • Python之random库的常用函数有哪些

    2022-10-04 03:01:13
  • sqlserver 禁用触发器和启用触发器的语句

    2024-01-19 21:38:17
  • asp之家 网络编程 m.aspxhome.com