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文档生成工具pydoc使用介绍
Jun 02 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
和孩子一起学习python之变量命名规则
May 27 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
python设置表格边框的具体方法
Jul 17 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
php在文件指定行中写入代码的方法
2012/05/23 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
总结一些js自定义的函数
2006/08/05 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
js实现日历与定时器
2017/02/22 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python中 * 的用法详解
2019/07/10 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
python实现简单颜色识别程序
2020/02/19 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python远程linux执行命令实现
2020/11/11 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
超市后勤自我鉴定
2014/01/17 职场文书
语文教学感言
2014/02/06 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
公司股东出资证明书
2014/11/01 职场文书
工作态度怎么写
2015/06/25 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript