Python使用海龟绘图实现贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
在实现贪吃蛇游戏时,首先需要使用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"])
参数说明如下:
创建游戏窗体的关键代码如下:
import turtle # 导入绘图海龟模块 turtle.setup(420, 420) # 创建窗体大小 turtle.done() # 停止画笔绘制,但绘图窗体不关闭
(2)通过turtle模块中的onkey()方法可以实现对应键盘中按键的监听工作。语法格式如下:
turtle.onkey(fun,key)
参数说明如下:
注意:在使用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)
参数说明如下:
实现定义游戏中的食物位置、蛇位置以及蛇移动的位置与距离。关键代码如下:
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)
参数说明如下:
实现绘制游戏中食物、蛇。关键代码如下:
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经典小游戏汇总
python微信跳一跳游戏集合
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持趣讯吧。
推荐阅读
-
Python多线程抓取代理服务器
Python作为一门功能强大的脚本语言来说,经常被用来写爬虫程序,下面是Python爬虫多线程抓取代理服务器。年前是用//lin...
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
本篇文章给大家分享的是有关python中变量的存储原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有...
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
这篇文章主要介绍“python怎么实现批量文件加密功能”,在日常操作中,相信很多人在python怎么实现批量文件加密功能问题上存在...
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...