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
猜你喜欢
- 1、mysql的limit关键字 (DAO)select * from tablename limit startPoint, number
- 前言本文实现一个 Python 脚本,用来批量卸载模拟器或者实体机上面的 App 以及清除 LogCat 缓存。开发 Android 的朋友
- 99bill: 1.md5.asp 代码如下:<% '''''''&
- 众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定。目前比较主流的Pytho
- FTP即文件传输协议;它基于客户机-服务器模型体系结构,应用广泛。它有两个通道:一个命令通道和一个数据通道。命令通道用于控制通信,数据通道用
- 下一代的 web 已经开始上路了,就在这个星期,MySpace 集成了 Google Gears,雅虎发布了新的 BrowserPlus,G
- dim dr dr="2123123" dr1=Cint(dr) dr2=Clng(dr) 可参考如下函数说明: CIn
- 光学元件类平面反射镜是一种极为简单的模型,因为我们只需要考虑一个平面即可。但是除此之外的其他光学元件,可能会变得有些复杂:我们必须考虑光在入
- 画之前肯定要知道规格图,我找了一个大致的图。参考图片:绘制大星的方法很简单,五角星的补角是144度。绘制小五角星有点麻烦,因为我国国旗上的小
- 前言很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 django-f
- PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于
- 事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章。什么?你还不知
- 引言:本文是学习Turtle库时,发现两种方法都能改变画笔的方向,但二者又不是完全相同,故对其加以辨析总结到此,在本文你将收获:1.两种改变
- Array(数组)内部机制在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可
- 如下:import pandas as pddf = pd.DataFrame({'Country':['China
- whoosh的官方介绍:http://whoosh.readthedocs.io/en/latest/quickstart.html因为做的
- 游标的使用提到游标这个词,人们想到的是在屏幕上一个闪动的方框,用以指示用户将要输入字符的位置。而在关系型数据库的SQL语言中,游标却有另外的
- 一般而言下面的就可以完成需求了。def convertToDic(data): jsonDic=json.loads(data) retur
- 前言django,web开发中,用django-debug-toolbar来调试请求的接口,无疑是完美至极。 可能本人,见识博浅,才说完美至
- Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便。自带的包管理器conda也很强大。首先是下载安装。Anaconda