V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
CicadaMan
V2EX  ›  Python

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

  •  
  •   CicadaMan · 2017-09-15 19:58:06 +08:00 · 4914 次点击
    这是一个创建于 2386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    加群:526929231 获取素材和源代码

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

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

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

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

    	pip3 install cocos2d
    

    初始化导演类:

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

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

    创建游戏场景和层:

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

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

    添加背景图片:

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

    添加炮筒:

    炮筒需要通过精灵来实现,这里我就直接写了个子类,继承自sprite.Sprite,然后创建了一个炮筒类,代码如下: 加群:526929231 获取素材和源代码

    接收用户点击事件:

    要想接收用户点击事件,要做两件事情。第一,设置游戏层的类属性is_event_handler=True,第二,要实现on_mouse_press来接收用户点击事件,代码如下: 加群:526929231 获取素材和源代码

    旋转炮筒:

    用户点击屏幕后要旋转炮筒,并且撒网,这里先来旋转炮筒。因为我们只知道屏幕的xy坐标,不知道角度,因此这里要用到三角函数来进行一个转换,代码如下: 加群:526929231 获取素材和源代码

    撒网:

    在旋转炮筒后,要把网撒出去,撒到鼠标点击的地方,并且网在撒出去的时候要从小变大(网图片素材搜裙:526929231 ),代码如下: 加群:526929231 获取素材和源代码

    添加鱼:

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

    鱼和网的碰撞检测:

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

    网: 加群:526929231 获取素材和源代码

    检测是否发生碰撞: 加群:526929231 获取素材和源代码

    写在最后:

    以上给大家提供了一个思路,如果没有cocos2d开发经验的同学,可能不是很好理解。因此我专门建了一个裙( 526929231 )给大家做答疑,如果大家想要游戏素材和源代码,以及完整教学视频的,可以加下。最后附一张实现后的效果,祝大家学习愉快: 加群:526929231 获取素材和源代码

    11 条回复    2017-09-16 18:51:58 +08:00
    ballshapesdsd
        1
    ballshapesdsd  
       2017-09-15 20:01:49 +08:00
    python 也能开发游戏吗。。
    fy
        2
    fy  
       2017-09-15 20:04:17 +08:00
    原版 cocos 还在更新?不太靠谱吧。。

    我怎么记得 cocos 原版是 python 版本,后来移植了 objc 版本呢。。
    suantong
        3
    suantong  
       2017-09-15 20:36:11 +08:00 via Android
    cocos 最开始就是 python 版, 后来有了 iPhone 版, 之后才是 x
    xiaoke0718
        4
    xiaoke0718  
       2017-09-15 20:37:20 +08:00
    厉害
    a87150
        5
    a87150  
       2017-09-15 20:47:55 +08:00   ❤️ 2
    教别人用py开发游戏算不算害人?
    LMkillme
        6
    LMkillme  
       2017-09-15 21:04:30 +08:00
    貌似这种捕鱼游戏变种成了赌博游戏
    justtery
        7
    justtery  
       2017-09-15 21:36:18 +08:00 via Android
    pygame 1 楼可以了解一下
    Tunar
        8
    Tunar  
       2017-09-15 22:12:22 +08:00 via Android
    @ballshapesdsd 可以啊,阴阳师不就主要是 Python 写的么
    chen2016
        9
    chen2016  
       2017-09-16 00:38:14 +08:00
    要放代码请放出全部
    taochunfan
        10
    taochunfan  
       2017-09-16 09:01:29 +08:00
    这不是让我们这些菜鸡加群咩
    PythonAnswer
        11
    PythonAnswer  
       2017-09-16 18:51:58 +08:00 via Android
    cocos2d 原版就是 python 的。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5309 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:08 · PVG 17:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.