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写的图片蜘蛛人代码
Aug 27 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
在Python中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
Python中为什么要用self探讨
Apr 14 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
python 文件查找及内容匹配方法
Oct 25 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
基于python连接oracle导并出数据文件
Apr 28 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
[转帖]PHP世纪万年历
2006/12/06 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
用JavaScript调用WebService的示例
2008/04/07 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python 的AES加密与解密实现
2019/07/09 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
运动会开幕式主持词
2014/03/28 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
详解Python中__new__方法的作用
2022/03/31 Python