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中input和raw_input的一点区别
Oct 21 Python
浅谈Python程序与C++程序的联合使用
Apr 07 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
Django开发的简易留言板案例详解
Dec 04 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
python 多线程共享全局变量的优劣
Sep 24 Python
Python提取PDF指定内容并生成新文件
Jun 09 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
Js sort排序使用方法
2011/10/17 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
基于python 取余问题(%)详解
2020/06/03 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
应聘教师自荐信
2013/10/12 职场文书
大型晚会策划方案
2014/02/06 职场文书
幼儿园小班评语
2014/04/18 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
班级团队活动方案
2014/08/14 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript