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"])
参数说明如下:
- 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”。
实现键盘中上、下、左、右按键监听工作的关键代码如下:
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) # 移动位置,一步的距离为10def change(x, y):# 改变蛇的移动方向position.x = xposition.y = ydef is_inside(head):# 判断蛇头是否在窗体内return -200 < head.x < 190 and -200 < head.y < 190def 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()# 更新returnsnake.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经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- iOS中的Block