使用pygame开发的游戏发布+小总结

吕旷
• 阅读 19255

概述

大约两年前接触了python,然后就爱上了这个语言。
然后就想用它写游戏,很快就找到了pygame这个库,但是pygame貌似十分冷门,网上教程也比较少,好在还有个文档来参考。
于是胡乱搞了很久,前后搞了弹幕射击类(模拟东方project系列)、ARPG和这次的AVG(文字冒险)。这次的文字冒险游戏由于有前几次的经验积累,耗时5天成功开发了出来。于是准备在这里总结下用pygame开发游戏的经验,大致讲一下这个游戏是怎么开发出来的,代码比较长就不贴在这里了。但是会附上作品和源码,以供有兴趣的同学参考学习和玩耍。
这里主要是讲思想。

游戏制作

环境

python2.7+制作游戏需要安装的pygame
操作系统是在windows下,而且由于是py2exe发布的,所以只能在windows下运行
(但是源码也许能在其他OS上跑,好像没有依赖windows的库)

游戏资源

游戏资源就是游戏要使用的音乐、图片、文字等,本游戏使用一下几类:

  • pics/ 图片信息

  • diags/ 游戏中的对话

  • fonts/ 字体

  • item/ 游戏中的道具信息

  • music/ 音乐信息

  • sound/ 音效

类的设计

类的设计大部分依赖于游戏的资源,主要有这些类:

  • Music

  • Sound

  • Txt

  • Button

  • Lh

  • Moji

  • Item

  • Rule

  • Sysb

  • Story

其中Music,Sound,Lh,Moji,Item分别是读取文件中的音乐、音效、立绘图片、对话内容和道具的信息并组织管理起来。其中Moji类还要管理游戏中的对话部分,显示哪一条语句、画哪些立绘等。

Txt是游戏中需要在哪些位置显示一些文字时需要,例如左上角显示位置,按钮上的提示信息等。

Button是一个矩形按钮,可以为其配置位置、大小、图片、快捷键、功能等。在很多时候,我们都需要一个按钮。

Sysb为本游戏的证物系统,管理证物的显示,指证等。

Rule为游戏规则,每个游戏都有它的规则,小到先画背景,再画人物,再画对话框;具体到比如弹幕射击类的自机是否与地方弹幕碰撞?是则发生miss等。

Stroy为游戏剧本,由一个关键变量event值控制故事走向,也包括flag的控制功能。本来我是将剧本都写入这个类里面,但是这样若故事长的话会导致代码长度剧增,而且也不美观。所以就把它改成了个解释器,用来读外部一个文件内的“指令”,并解释执行从而控制游戏走向。这样的话,剧本就可以写在外部文件,而且主程序导出exe后,不会编程的人也可以尝试利用这些指令写出新的故事让游戏程序去运行。关于这个游戏的解释指令问题,有兴趣的可以去下载游戏,里面有文档说明。(可能算是个超劣质版的橙光?)

主程序

有了这些大类,已经可以想出游戏的框架了,看看主程序的循环就知道了:

while True:
    keyp=pygame.key.get_pressed()
    moup=pygame.mouse.get_pressed()
    mou_pos=pygame.mouse.get_pos()
    timep = clock.tick(60)
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    rule.run()
    story.run()

首先获取键盘的按键状态、鼠标的按键状态和鼠标位置,用来进行交互;
然后控制一下帧率,帧率在实时类游戏中很重要,用来掌控时间,在本游戏中用处很小。设置好关闭;
最后让规则和故事“run”就可以了。

几乎所有的类都有个“run”方法,只要它存在在游戏中,它每帧都会run一次,实现它该有的作用。例如Button类每次run都会检测鼠标是不是在自己的范围内,是的话绘制第二个图像,再进一步判断鼠标是否点击,是的话运行自己的“功能”。

游戏

这里介绍一下这次开发的游戏,类型是文字冒险游戏:
是类似逆转裁判的游戏方式,在自由行动时,q为调查,w为移动,e为交谈;
r为看已获取的证物,按方向键或a、d切换,并可以在对话中按z指证;

运行时是这个样子的:
使用pygame开发的游戏发布+小总结

游戏有两个结局。

游戏、代码地址(顺便附带了第一次制作的半成品弹幕射击游戏):
网盘

游戏素材来源于逆转裁判、仙剑和网上。

其他

做游戏真是比较开心,但是这大概是第一次算是完整的做出了个游戏吗?(还是因为暑假没回家才有的干活动力)

这大概是最后一次使用pygame去开发游戏?pygame毕竟是比较老了,很久没更新了,感觉很多功能不是特别爽。下面可能会去研究研究pyglet。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
H5游戏开发:游戏引擎入门推荐
!(https://oscimg.oschina.net/oscnet/02667b3fe24ee147d8174d906f9a340f203.jpg)前言很多刚刚接触到游戏开发,准备大展拳脚的小鲜肉们,往往在技术选型这第一关就栽了跟头。毕竟网络上的游戏引擎良莠不齐,官网上相关资料也比较少,而选择一个适合的游戏引擎是一个项目最基础,也
Stella981 Stella981
3年前
LayaAir 1.7.20大幅度优化了微信小游戏发布体验!增加ETH,NEO区块链项目支持,可创建区块链项目!
LayaAir引擎与IDE的版本更新很少会在公众号中提及,这次为什么要讲一下呢?因为此次IDE的LayaAir1.7.20版本有两个重要功能的更新。游戏发布体验第一个是发布的体验。这个体验虽然是针对所有版本的发布的,但是小编认为对于微信小游戏开发者的体验更赞。下面针对这块的优化点进行简单介绍一下。我们先看一下项目发布
Stella981 Stella981
3年前
Cocos Creator基础教程(10)—预览调试
游戏预览是开发中的一个重要环节,CocosCreator游戏引擎基于JavaScript语言有着丰富强大的预览调试能力,这次我们介绍预览调试相关的技术,了解一下这方面的知识相信对你也非常有帮助。1\.游戏预览CocosCreator是跨平台的游戏开发引擎,从类别上主要分为Nativet和H5两大平台,游戏预览也分为这两大模式:
Wesley13 Wesley13
3年前
Unity2D游戏开发基础教程1.2项目、资源和场景
Unity2D游戏开发基础教程1.2项目、资源和场景如果使用Unity制作游戏,就一定会接触到项目(Project、资源(Asset)和场景(Scene)。本节将依次介绍它们。1.2.1项目Unity是一个基于项目的应用。这就意味着每开发一个新游戏,都要创建一个新项目。一个项目就代表
Stella981 Stella981
3年前
Python——Pygame实现生命游戏(game of life)
模块:pygameimportpygame,sys,time,randomfrompygame.localsimport"""Color"""WHITE(255,255,255)RED(255,0,0)GREEN(0,255,0)
Stella981 Stella981
3年前
Pygame游戏开发——《蛋糕消消乐》小游戏
开发工具:Pycharm游戏介绍:玩家通过交换蛋糕的位置消除蛋糕,如果有三个或以上同样的蛋糕处于一个直线或T字形的位置,将会发生消除,并加载新的蛋糕。在规定时间内消除越多的蛋糕则分数越高。游戏运行截图:!(https://oscimg.oschina.net/oscnet/up2e8ed29a6cc5f78404
Stella981 Stella981
3年前
Python游戏开发常用库
PyWeek(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Flink.zhihu.com%2F%3Ftarget%3Dhttp%253A%2F%2Fwww.pyweek.org%2F):编程挑战,主要是Python游戏开发方面的PyGame(https://www
Wesley13 Wesley13
3年前
Unity2D游戏开发基础教程1.2 项目、资源和场景
Unity2D游戏开发基础教程1.2项目、资源和场景如果使用Unity制作游戏,就一定会接触到项目(Project、资源(Asset)和场景(Scene)。本节将依次介绍它们。1.2.1项目Unity是一个基于项目的应用。这就意味着每开发一个新游戏,都要创建一个新项目。一个项目就
Stella981 Stella981
3年前
Python实现坦克大战
Python实现坦克大战一、前言前段时间,也就是国庆节。在寝室闲来无事,用pygame写了一个小游戏,就是标题写的《坦克大战》。这个游戏写了两个版本,第一个版本是按照书上的思想来写的,发现写到后面的时候代码太乱了。于是我又从头开始,用比较合理的面向对象思想重新写了一个版本。说比较合理也只是符合我自己的思想,所以难免
Stella981 Stella981
3年前
Python飞机大战实例有感——pygame如何实现“切歌”以及多曲重奏?
\TOC\pygame如何实现“切歌”以及多曲重奏?昨天晚上研究了好久pygame的音乐混合器mixer,出了很多问题后最终成功,不过学习本来也不可能一帆风顺的吗,下面我就来讲一讲我遇到的问题。一、pygame实现切歌初始化路径导库,需安装importpygame把路径赋值分别给三个
Wesley13 Wesley13
3年前
Unity 图文重现官方教程视频 2droguelike 第一集
初衷:本人初学Unity,四处收集了一些视频和教材,学习和摸索了一段时间,我发现官网教程简单易上手,只不过他是英文讲解不方便,我就想把他翻译翻译吧,然后我又发现看视频学习要暂停回放好多遍,麻烦,我就想把他转成图片和文字吧,再然后我就想,要么干脆我尽量做到读者不用看视频,就能完成教程,于是就有了这个系列请多多支持注:灰色字体为视频原文