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 相关文章推荐
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
python异常和文件处理机制详解
Jul 19 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python 获取字符串MD5值方法
May 29 Python
python3.6实现学生信息管理系统
Feb 21 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
记录模型训练时loss值的变化情况
Jun 16 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
UCenter 批量添加用户的php代码
2012/07/17 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
jQuery操作事件完整实例分析
2020/01/10 jQuery
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
在python中用url_for构造URL的方法
2019/07/25 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
音乐教育感言
2014/03/05 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
质量月口号
2014/06/20 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
二手车转让协议书
2015/01/29 职场文书
2016年元旦致辞
2015/08/01 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
新手入门Mysql--概念
2021/06/18 MySQL