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实现保存网页到本地示例
Mar 16 Python
python绘图库Matplotlib的安装
Jul 03 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
用pickle存储Python的原生对象方法
Apr 28 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Python的多维空数组赋值方法
Apr 13 Python
python模块smtplib学习
May 22 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python异常处理知识点总结
Feb 18 Python
Python双链表原理与实现方法详解
Feb 22 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
关于Js中new操作符的作用详解
2021/02/21 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python简明入门教程
2015/08/04 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
浅谈django orm 优化
2018/08/18 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
Python实现弹球小游戏
2020/08/01 Python
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
数据管理员的自我评价分享
2013/11/15 职场文书
客服主管岗位职责
2013/12/13 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
个人授权委托书
2014/04/03 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
小学教师读书笔记
2015/07/01 职场文书
卫生主题班会
2015/08/14 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
MySQL 计算连续登录天数
2022/05/11 MySQL