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调用windows api锁定计算机示例
Apr 17 Python
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
python妙用之编码的转换详解
Apr 21 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python实现计算对象的内存大小示例
Jul 10 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
python语言的优势是什么
Jun 17 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
Aug 22 Python
如何使用flask将模型部署为服务
May 13 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
php调用mysql存储过程
2007/02/14 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
应聘护士自荐信
2013/10/21 职场文书
安全生产演讲稿
2014/05/09 职场文书
大学计划书范文800字
2014/08/14 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
检讨书怎么写
2015/05/07 职场文书
博士论文答辩开场白
2015/06/01 职场文书