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脚本内运行linux命令的方法
Jul 02 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
python绘图模块matplotlib示例详解
Jul 26 Python
python实现XML解析的方法解析
Nov 16 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
Django封装交互接口代码
Jul 12 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
JS原型对象通俗"唱法"
2012/12/27 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
PHP实现发送和接收JSON请求
2018/06/07 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
使用Python实现牛顿法求极值
2020/02/10 Python
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
C面试题
2015/10/08 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
家电业务员岗位职责
2014/03/10 职场文书
舞蹈专业求职信
2014/06/13 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android