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 自动提交和抓取网页
Jul 13 Python
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
python各种语言间时间的转化实现代码
Mar 23 Python
python实现杨辉三角思路
Jul 14 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python占位符输入方式实例
May 27 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
再谈python_tkinter弹出对话框创建
Mar 20 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
简单实现jQuery手风琴效果
2017/08/18 jQuery
VUE重点问题总结
2018/03/19 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
快速了解Python中的装饰器
2018/01/11 Python
python模拟实现分发扑克牌
2020/04/22 Python
python实现网页录音效果
2020/10/26 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
软件测试企业面试试卷
2016/07/13 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
学校安全管理责任书
2014/07/23 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js
PO模式在selenium自动化测试框架的优势
2022/03/20 Python