- Python
Freegames游戏制作库----python贪吃游戏
- 2024-6-2 11:41:24 @
在游戏世界中,有一类游戏无论年龄大小,都能带给人们无尽的欢乐,它们就是经典的贪吃蛇、吃豆人和俄罗斯方块等游戏。
在Python编程语言中,Freegames是一个非常受欢迎的库,它为游戏开发提供了丰富的功能和工具。使用Freegames库,开发人员可以更加轻松地创建2D游戏,比如贪吃蛇、弹球和井字棋等。这个库提供了一些基础功能,比如绘图、事件处理和碰撞检测等,这样开发人员就可以专注于游戏的逻辑和玩法。
Freegames库的特点
- 易于使用:该库提供了简单易懂的API和文档,使得开发者可以快速上手。此外,Freegames还提供了许多示例代码和教程,帮助开发者了解如何使用库中的功能。
- 功能丰富:Freegames库包含了游戏开发所需的基本组件,如精灵、声音、输入等。
- 跨平台:Freegames库可以在多种操作系统上运行,包括Windows、Linux和Mac OS等。
代码操作
安装
pip install freegames
命令说明
通过下面的命令来查看命令行帮助
python -m freegames --help
- list: 列出所有可用的游戏。使用"python -m freegames list"命令将列出Freegames库中可供选择的所有游戏。
- play: 运行指定的游戏。使用"python -m freegames play "命令,其中是游戏的名称(比如snake、pacman等),可以通过调用指定的游戏来开始游戏。
- show: 显示指定游戏的源代码。使用"python -m freegames show "命令,其中是游戏的名称,将显示该游戏的源代码。
- copy: 将指定游戏的源代码复制到当前目录下。使用"python -m freegames copy "命令,其中是游戏的名称,将会复制该游戏的源代码到当前目录,以便进行自定义修改。
查看游戏列表
python -m freegames list
运行游戏
python -m freegames play pacman
或者
python -m freegames.pacman
from random import randrange#导入随机函数的randrange工具,使food随机出现
from freegames import vector,square#导入freegames的向量函数与绘图函数,用square正方形表示food、snake,用vector这个二维向量表示snake
import turtle# 导入绘图海龟模块
from time import sleep#导入时间库sleep函数
screen = turtle.Screen()#赋值screen对象
#产生一个输入难度的对话框
difficulty=screen.numinput("难度","请输入游戏的难度(1~3)",minval=1,maxval=3)
food = vector(0,0)# 初始化food变量,用来表示第一个食物在坐标为(0,0)处
snake = [vector(10, 0)]# 初始化snake,而且snake是列表,其元素是向量
position = vector(0, -10*difficulty) # 用来控制贪吃蛇的移动方向和距离
def change(x, y):# 改变贪吃蛇移动方向部分,通过onkey函数和lambda表达式调用change函数,获得下一个移动坐标(x,y)
position.x = x# 将x的值赋给position.x改变贪吃蛇目标的横坐标
position.y = y# 将y的值赋给position.y改变贪吃蛇目标的纵坐标
def is_inside(head):# 判断蛇头是否在窗体内
return -200 < head.x < 190 and -200 < head.y < 190
def move():# 可以让蛇移动的方法
head = snake[-1].copy()# 确定蛇头的位置,表示复制snake列表的最后一个元素,这里用列表的最后一个元素表示蛇头
head.move(position)# 移动一步
if not is_inside(head) or head in snake:# 如果蛇的头部位于边界外或者蛇头在蛇的身体中
square(head.x, head.y, 9, 'red')# 绘制红色蛇头,说明游戏结束
turtle.write("game over",font=("Arial",40,"normal"))#显示失败
turtle.update()# 更新
return# 用来终止程序的运行,其后语句不会再执行
snake.append(head)# 更新蛇的身体
if head == food:# 如果蛇吃到食物
count=len(snake)
count=count+1#计次
print('Snake:', count)# 根据蛇的长度进行加分
if count == 10*difficulty:#到达规定的分数值
turtle.write("victory!",font=("Arial",40,"normal"))#显示失败
turtle.exitonclick()#点击退出
food.x = randrange(-15, 15) * 10 # 随机生成食物x坐标
food.y = randrange(-15, 15) * 10 # 随机生成食物y坐标
sleep(0.01)#推迟0.01秒再执行
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()# 停止画笔绘制,但绘图窗体不关闭
3 条评论
-
mrhowe SU @ 2024-10-12 20:09:11
from random import randrange # 导入随机数生成模块 from turtle import * # 导入turtle模块,用于绘制图形界面 from freegames import square, vector # 导入square和vector函数,用于绘制正方形和处理向量 # 初始化食物和蛇的位置 food = [vector(0, 0)] snake = [vector(10, 0)] while len(food)<5: food_x = randrange(-15, 15) * 10 # 随机生成食物的新位置 food_y = randrange(-15, 15) * 10 food_new = vector(food_x, food_y) if food_new in food or food_new in snake: continue else : food.append(food_new) aim = vector(0, -10) # 设置蛇的初始移动方向 colors = ["pink","purple","blue","orange","blue"] # 改变蛇的方向 def change(x, y): """Change snake direction.""" aim.x = x # 设置蛇的横向移动方向 aim.y = y # 设置蛇的纵向移动方向 # 检查蛇头是否在游戏区域内 def inside(head): """Return True if head inside boundaries.""" return -200 < head.x < 190 and -200 < head.y < 190 # 移动蛇的函数 def move(): """Move snake forward one segment.""" head = snake[-1].copy() # 获取蛇的当前头部位置 head.move(aim) # 根据蛇的移动方向更新头部位置 # 如果蛇头超出边界或撞到自己,则游戏结束 if not inside(head) or head in snake: square(head.x, head.y, 9, 'red') # 绘制红色方块表示蛇撞到自己或边界 update() # 更新屏幕显示 return # 结束函数执行 snake.append(head) # 将新头部添加到蛇的身体列表 # 如果蛇头碰到食物 if head in food: print('Snake:', len(snake)) # 打印蛇的长度 food.pop(food.index(head)) while 1: food_x = randrange(-15, 15) * 10 # 随机生成食物的新位置 food_y = randrange(-15, 15) * 10 food_new = vector(food_x, food_y) if food_new in food or food_new in snake: continue else : food.append(food_new) break else: snake.pop(0) # 如果没有吃到食物,移除蛇尾 clear() # 清除之前的绘制 up() goto(0,180) down() write("得分:"+str(len(snake)), font=("微软雅黑", 14, "normal")) up() # 绘制蛇的身体和食物 for body in snake: square(body.x, body.y, 9, colors[randrange(0, 4)]) # 绘制绿色方块表示食物 for body in food: square(body.x, body.y, 9, 'green') update() # 更新屏幕显示 ontimer(move, 100) # 每100毫秒调用一次move函数,控制蛇的移动速度 # 设置游戏窗口 setup(420, 420, 370, 0) hideturtle() # 隐藏turtle形状 tracer(False) # 关闭自动更新屏幕 # 监听键盘事件 listen() onkey(lambda: change(10, 0), 'Right') # 按下右键,蛇向右移动 onkey(lambda: change(-10, 0), 'Left') # 按下左键,蛇向左移动 onkey(lambda: change(0, 10), 'Up') # 按下上键,蛇向上移动 onkey(lambda: change(0, -10), 'Down') # 按下下键,蛇向下移动 # 开始游戏循环 move() done() # 结束游戏循环
-
2024-10-12 19:41:39@
from random import randrange # 导入随机数生成模块 from turtle import * # 导入turtle模块,用于绘制图形界面 from freegames import square, vector # 导入square和vector函数,用于绘制正方形和处理向量 # 初始化食物和蛇的位置 food = vector(0, 0) snake = [vector(10, 0)] aim = vector(0, -10) # 设置蛇的初始移动方向 # 改变蛇的方向 def change(x, y): """Change snake direction.""" aim.x = x # 设置蛇的横向移动方向 aim.y = y # 设置蛇的纵向移动方向 # 检查蛇头是否在游戏区域内 def inside(head): """Return True if head inside boundaries.""" return -200 < head.x < 190 and -200 < head.y < 190 # 移动蛇的函数 def move(): """Move snake forward one segment.""" head = snake[-1].copy() # 获取蛇的当前头部位置 head.move(aim) # 根据蛇的移动方向更新头部位置 # 如果蛇头超出边界或撞到自己,则游戏结束 if not inside(head) or head in snake: square(head.x, head.y, 9, 'red') # 绘制红色方块表示蛇撞到自己或边界 update() # 更新屏幕显示 return # 结束函数执行 snake.append(head) # 将新头部添加到蛇的身体列表 # 如果蛇头碰到食物 if head == food: print('Snake:', len(snake)) # 打印蛇的长度 food.x = randrange(-15, 15) * 10 # 随机生成食物的新位置 food.y = randrange(-15, 15) * 10 else: snake.pop(0) # 如果没有吃到食物,移除蛇尾 clear() # 清除之前的绘制 # 绘制蛇的身体和食物 for body in snake: square(body.x, body.y, 9, 'black') square(food.x, food.y, 9, 'green') # 绘制绿色方块表示食物 update() # 更新屏幕显示 ontimer(move, 50) # 每100毫秒调用一次move函数,控制蛇的移动速度 # 设置游戏窗口 setup(420, 420, 370, 0) hideturtle() # 隐藏turtle形状 tracer(False) # 关闭自动更新屏幕 # 监听键盘事件 listen() onkey(lambda: change(10, 0), 'Right') # 按下右键,蛇向右移动 onkey(lambda: change(-10, 0), 'Left') # 按下左键,蛇向左移动 onkey(lambda: change(0, 10), 'Up') # 按下上键,蛇向上移动 onkey(lambda: change(0, -10), 'Down') # 按下下键,蛇向下移动 # 开始游戏循环 move() done() # 结束游戏循环
-
2024-6-2 11:54:09@
python -m freegames -h # 打开freegames的帮助文档 python -m freegames list # 打开freegames的内置游戏列表 ant 蚂蚁 bagels 百吉饼 bounce 反弹 cannon 加农大炮 connect 五子棋 crypto 加密 fidget flappy flappy guess 猜一猜 life 生活 maze 迷宫 memory 记忆 minesweeper 扫雷艇 pacman 吃豆人 paint 绘图 pong 乒乓 simonsays 西蒙说 snake 贪吃蛇 tictactoe 井字棋 tiles 华容道 tron 特隆 python -m freegames play snake # 运行太贪吃蛇代码
- 1