Python实战之大鱼吃小鱼游戏的实现


Posted in Python onApril 01, 2022

一.游戏画面

Python实战之大鱼吃小鱼游戏的实现

二.游戏素材

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

Python实战之大鱼吃小鱼游戏的实现

三.程序介绍

大鱼吃小鱼.py

注意程序的mouth对象,它并不是"隐藏"的,虽然它看不见。

小鱼碰到mouth会被“吃掉”。如果把mouth用hide命令设为隐藏,那么是无法获取到mouth的绑定盒,从而碰撞检测失效。

四.游戏代码

1.精灵对象。这个函数计算矩形下右角的一个坐标并返回它

from sprites import *

def calculate_pos(obj):
    """obj:精灵对象。这个函数计算矩形下右角的一个坐标并返回它。

    """    
    x,y = obj.position()              # 角色的坐标
    mx,my = mouse_position()          # 鼠标指针的坐标
    k = 1 if mx > x else -1           # 在右则为1,否则为-1
    left,top,right,bottom = obj.bbox()# 获取绑定盒
    w = right-left                    # 大鱼的宽度
    h = top - bottom                  # 大鱼的高度
    x0 = x + k * w//2.5               # 嘴巴大概的x坐标
    y0 = y - h//12                    # 嘴巴大概的y坐标
    return x0,y0

2.设置游戏属性

width,height = 480,360                
screen = Screen()                     # 新建宽高
screen.setup(width,height)            # 设置宽高 
screen.bgpic('res/underwater.png')    # 设背景图
screen.title("图灵大海之大鱼吃小鱼")

3.游戏对象

fish_group = Group(tag='fish')        # 新建组,标签为fish
fishes = ['res/fish1.png','res/fish2.png','res/fish3.png','res/crab-b.png']
# 由于下面的鱼的标签都是fish,所以会自动加入到fish_group中
for x in range(10):
     x = random.randint(-200,200)
     y = random.randint(-140,140)
     f = Sprite(shape=random.choice(fishes),tag='fish',pos=(x,y))
     f.scale(0.5)
[fish.setheading(random.randint(1,360)) for fish in fish_group]
 
m1 = Mouse(1)                        # 鼠标左键
fish = Sprite('res/fish1-a.png')     # 实例化大鱼
fish.rotatemode(1)                   # 左右翻转 
fishscale= 0.6
fish.scale(fishscale)
mouth = Sprite(shape='circle')       # 实例化嘴巴,用于碰撞检测
mouthscale = 0.4
mouth.scale(mouthscale)              # 缩放嘴巴大小
mouth.setalpha(0)                    # 把它设为透明,改为非0它会显示出来
clock = Clock()                      # 新建时钟对象

4.游戏动态效果

while True:
    for f in fish_group:
        if f.isvisible():f.fd(1)     # 在可见的情况下才移动
        # 小鱼碰到嘴巴及单击鼠标则被吃掉,大鱼长大
        if f.collide(mouth,0.5) and m1.down() :
            fishscale += 0.01
            fish.scale(fishscale)     # 大鱼长大
            mouthscale += 0.01
            mouth.scale(mouthscale)   # 嘴巴跟着加大
            x = random.randint(-200,200)
            y = random.randint(-140,140)
            # 注意这里调用了reborn后,鱼会立即隐藏,3后后出现
            # 在3秒内碰撞检测无效,所以鱼不能动
            f.reborn(x,y,delay=3)
            f.shape(random.choice(fishes))            
        f.bounce_on_edge()
        
    fish.heading(mouse_pos())        # 大鱼跟随鼠标指针
    x0,y0 = calculate_pos(fish)      # 计算嘴巴的大概坐标
    mouth.goto(x0,y0)                # 嘴巴大这个坐标 
    md =  fish.distance(mouse_pos()) # 计算鱼到鼠标指针距离
    if md > 50:fish.fd(min(md,4))    # 如果距离大于50则游

    # 张嘴与合嘴
    if m1.down():
        fish.shape('res/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)
  fish.shape('res/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)

以上就是Python实战之大鱼吃小鱼游戏的实现的详细内容,更多关于Python大鱼吃小鱼的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
python中global与nonlocal比较
Nov 21 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
如何使用Python标准库进行性能测试
Jun 25 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
pandas 对group进行聚合的例子
Dec 27 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
Laravel创建数据库表结构的例子
2019/10/09 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
Python检测生僻字的实现方法
2016/10/23 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
教师应聘个人求职信
2013/12/10 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
导游词怎么写
2015/02/04 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
安全守法证明
2015/06/23 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
JS数组方法some、every和find的使用详情
2021/10/05 Javascript