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脚本
Apr 05 Python
Python日期的加减等操作的示例
Aug 15 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
Django 实现购物车功能的示例代码
Oct 08 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Python接口测试结果集实现封装比较
May 01 Python
OpenCV实现常见的四种图像几何变换
关于Python使用turtle库画任意图的问题
Apr 01 #Python
python套接字socket通信
python文件与路径操作神器 pathlib
Python下载商品数据并连接数据库且保存数据
Python turtle编写简单的球类小游戏
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 #Python
You might like
main.php
2006/12/09 PHP
php curl常用的5个经典例子
2017/01/20 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
vue中轮训器的使用
2019/01/27 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python内置数据类型之列表操作
2018/11/12 Python
通过实例了解python property属性
2019/11/01 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python新手学习标准库模块命名
2020/05/29 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
社区学习十八大感想
2014/01/22 职场文书
元宵晚会主持词
2014/03/25 职场文书
学校督导评估方案
2014/06/10 职场文书
经济类毕业生求职信
2014/06/26 职场文书
离职感谢信怎么写
2015/01/22 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
高中政治教师教学反思
2016/02/23 职场文书
MySQL 计算连续登录天数
2022/05/11 MySQL
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers