用Python3开发爆款游戏——捕鱼达人

news/2025/2/15 20:37:58/

在这里插入图片描述
Python3在Python2的基础之上做了非常多的改进,比如字符串编码,在Python3中默认字符使用的是unicode编码,可以涵盖这个地球上所有的字符,当然了,优势不仅仅只有这一点。再加上Python这门语言本身开发效率特别高,因此今天我们教大家用Python3来开发爆款游戏——捕鱼达人!

首先对捕鱼达人这款游戏做个简单了解。捕鱼达人是前几年特别火的一款游戏,他是一款以深海狩猎为题材的休闲竞技游戏。2009年《捕鱼达人》上线,最初以简单轻松的捕鱼玩法获得了玩家的喜爱。随后几年,获得了游戏工委颁发的“游戏十强”2015年度十大最受欢迎移动网络游戏奖等多项奖项。郑重宣布捕鱼达人的地位。

Python3中有一个游戏开发引擎叫做cocos2d。这款游戏引擎最初是Objective-C版本,只能在iOS系统上使用,后来国内大牛王哲把他给翻译成了一个C++的版本,C++具有可移植性,因此迅速火爆起来。今天我们要用到的这个cocos2d,是Python版本的,python版本的cocos2d相对于C++的版本来讲,开发效率更高,没有那么多野指针和内存泄漏的问题,并且同样也支持跨平台,开发出来的游戏不需要更改一行代码就可以在Windows和Mac以及Linux上运行。

如果你还没有安装这个游戏引擎,那么可以通过以下命令进行安装:

pip3 install cocos2d

初始化导演类:

cocos2d中,导演类是用来安排整个游戏的进程的。并且在游戏过程中是一个单例对象。使用cocos2d做的第一件事就是初始化director:

from cocos.director import director# 设置窗口的宽度是800像素,高度是400像素director.init(width=800,height=480)

创建游戏场景和层:

场景是游戏开发中的一个组成部分,一个场景游戏界面可以是一个场景。场景一般不会直接放游戏元素,比如鱼和炮筒。一般我们会把游戏元素放在层中,然后再把这个层放到场景中,层也可以用来接收用户的事件,比如点击事件。因此我们来初始化第一个场景和层:

from cocos import layerfrom cocos import scene
game_layer = layer.Layer()
game_scene = scene.Scene()

添加背景图片:

游戏都是在海底中玩的,因此要使用一张图片来作为游戏的背景,不然游戏就索然无味了。在cocos2d中,如果想要加载一张图片,则必须使用到精灵(Sprite),以后我们游戏中将会使用的鱼、炮筒、网,都是通过精灵来实现的。并且精灵要放在层中,这里我继承了layer.Layer,重写了一个子类,代码如下:
在这里插入图片描述
添加炮筒:

炮筒需要通过精灵来实现,这里我就直接写了个子类,继承自sprite.Sprite,然后创建了一个炮筒类,代码如下:
在这里插入图片描述
接收用户点击事件:

要想接收用户点击事件,要做两件事情。第一,设置游戏层的类属性is_event_handler=True,第二,要实现on_mouse_press来接收用户点击事件,代码如下:
在这里插入图片描述
旋转炮筒:

用户点击屏幕后要旋转炮筒,并且撒网,这里先来旋转炮筒。因为我们只知道屏幕的x和y坐标,不知道角度,因此这里要用到三角函数来进行一个转换,代码如下:
在这里插入图片描述
撒网:

在旋转炮筒后,要把网撒出去,撒到鼠标点击的地方,并且网在撒出去的时候要从小变大,代码如下:
在这里插入图片描述
添加鱼:

到目前位置,我们的游戏场景中还没有一条鱼,因此我们这里添加鱼的类,并且让他继承自sprite.Sprite,鱼在游动的过程中,会不断的更新自己的动作,因此不能简单的使用一张图片,而要使用到一组图片,我们叫做关键帧动画,如果不懂关键帧动画或者需要鱼的素材。代码如下:
在这里插入图片描述
鱼和网的碰撞检测:

当网撒出去后,应该判断有没有和鱼发生碰撞,如果碰撞到了,就要让这条鱼设置为被捕获的状态。在cocos2d中,已经封装好了碰撞检测的模块,通过cocos.collision_model即可完成。并且如果要给元素添加碰撞检测,必须添加一个cshape属性,这个属性才能发生碰撞。这里代码有点多,我分开来列出来:
在这里插入图片描述
写在最后:

以上给大家提供了一个思路,如果没有cocos2d开发经验的同学,可能不是很好理解。最后附一张实现后的效果,祝大家学习愉快。更多干货内容,欢迎关注公众号:知了python
在这里插入图片描述


http://www.ppmy.cn/news/339371.html

相关文章

乐高大颗粒作品24:金蟾

今天我们用乐高大颗粒搭建一个金蟾,还行,还是有点像的。 好了,今天的分享就到这里吧,赶谢大家的阅读。 每个孩子都是一张纯洁的白纸,就因为对世界一无所知,所以思维发育会更加不受限制,孩子们总…

Java【swing】-捕鱼达人项目(2)

在游戏中完成一条静止不动的鱼 方法一: 画一条静止不动的鱼 --不考虑面向对象 效果图: 方法二: 画一条静止不动的鱼 --考虑面向对象 如何实现一条静止不动的鱼? step1:新建一个类为Fish,表示鱼对象…

黑客全票打飞服务器,《鹅鸭杀》停服三天!更有游戏首发被冲下架

作为时下最炙手可热的派对游戏,由Gaggle Studios开发的《鹅鸭杀》自2022年年末开始,就以超高的热度席卷全球。得益于免费游戏的低门槛,以及优秀社交属性所带来的用户黏性,《鹅鸭杀》的Steam玩家数不断刷新纪录,在上周末…

算法-经典趣题-渔夫捕鱼

本文为joshua317原创文章,转载请注明:转载自joshua317博客 算法-经典趣题-渔夫捕鱼 - joshua317的博客 一、问题 渔夫捕鱼问题是一个典型的递推问题,渔夫捕鱼问题的大意如下: 某天晚上,A、B、C、D、E 5个渔夫合伙捕鱼&#xff…

五个人捕鱼和分鱼的计算

#include <stdio.h> /捕鱼和分鱼&#xff1a;A、B、C、D、E五个人在某夜合伙捕鱼&#xff0c;到第二天凌晨时都疲惫不堪&#xff0c;于是各自找地方睡觉。 日上三杆&#xff0c;A第一个醒来&#xff0c;他将鱼分为5份&#xff0c;把多余的一条鱼扔掉&#xff0c;拿走自己…

捕鱼达人 FishMaster 记录(Done)

【SiKi学院Unity】Unity中级案例 - 捕鱼达人&#xff08;上&#xff09; 记录里面有一些问题是还没弄清楚的 放UGUI和根目录上&#xff0c;坐标、缩放的区别&#xff08;比如缩放的0.01388889&#xff09; 新建UGUI画布的坐标为什么不在原点&#xff0c;跑得那么远 拖数组有的…

捕鱼里金币掉落的效果

最近做了个模仿捕鱼里金币掉落,弹两下旋转然后被炮塔吸过去的效果,这个是生成金币的脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Timer : MonoBehaviour {GameObject canv;//得分public int score;//生成金币数量int c…

【官方教程】《捕鱼达人3》系列2:鱼身上的波光处理

大家好&#xff0c;在上一节的学习中&#xff0c;我们已经掌握了如何使用Cocos2d-x加载鱼的模型和播放鱼的动画&#xff0c;这一节我们来学习一下如何为鱼的模型增加波光处理&#xff0c;以使它看起来像在海水中游动。 在模型的身上加入波光的感觉&#xff0c;是通过纹理动画来…