游戏是为了什么而存在的?Bingo,是为了娱乐~ 在这个最高主题之前,技术啥的什么都无所谓!

前一段时间,有位姓刘的网友用Pygame写了个俄罗斯方块,在用py2exe打包的时候遇到一些问题,和我交流了一下。有兴趣的可以在这里下载,除了代码,打包后的exe文件也一并提供了。

受他启发,这次我们就以俄罗斯方块为主题做一个游戏吧,但是,咱不能走寻常路啊,得把它整的非常有趣才行。记得曾经在网上看到一个搞笑俄罗斯方块,当时看了笑到肚子疼啊,时隔很久现在翻出来,一样笑到脱力:

我们就来做一个这样的俄罗斯方块吧:)做好了以后,给朋友玩玩,好好看看他(她,它?)的囧表情!

构架原理

构架这个词太大了,其实就是草稿了~ 看过这个视频,我们可以看到这个蛋疼的游戏有几种模式,把几个可能用到我们游戏中的模式分别整理一下:

落下立刻消失

一屏幕长的长条

掉各种房间的方块,挂了以后算房钱

长条的宽度稍稍宽于一般尺寸

落下奇怪的东西(豆荚,气泡等)

长条会从底部消失

方块非常非常小

同时快速落下三个方块

落下超级玛丽,碰到蘑菇长大挂掉

当然我们至少得有一个正常的模式

非常的多,不过这个界面还是都一样的,不同的是我们掉下的东西和消除判断。我们先把UI考虑一下,就用普通的俄罗斯方块的界面就可以了,像这样:

虽说相当不酷,不过各个部分一目了然,应该也可以了。分别是游戏显示区,右边则是下一个方块的显示,得分显示区域,和一些功能按钮。

接下来我们考虑这个程序的运行机理,我们先从最基本的情况开始。在经典俄罗斯方块运行的时候,不停的有随机的方块落下,用户控制它们的转向和位置落下,落下以后,如果稳固的方块堆有哪一行是完全填充的,就消除得分。

俄罗斯方块的思想其实非常的简单,人们热衷于它,不得不说简单又有有足够变化的规则是主因,还有就是用户受众很大的关系……

右半部分的都很简单,分别是下一个方块,分数和一些功能按钮,左半部分是和谐,这里得不停的刷新,因为方块不管有没有操作都会缓慢落下直至完全落地。而一旦落地,就需要看是否消除并刷新分数,同时落下接着的方块,并显示下一个方块。

原理的进一步思考

俄罗斯方块诞生于1985年,那时候还没有什么成熟的“面向对象”的编程方法,所以俄罗斯方块从一开始,界面就是以古朴的数组的方式运行的。

如果你有用其他语言编写俄罗斯方块的经验的话,就会知道大多数的实现方法都是维护一个二维数组(长度对应区域中的格子数,比如20×10。当然也可以是一维的,因为知道宽度,所以转换很容易),当数组某一位是1的时候,说明对应的位置有方块,这个数组不停的更新,程序就把这个数组实时的画到屏幕上,如此而已。

我们再考虑的仔细一点,因为是使用pygame编写,有没有什么更好的方法呢?如果我们把每一个方块(这里指四个小方块组成的整体)当做一个Sprite,那么就可以很方便的绘制,但是Sprite总是方形的,做碰撞判断就无效了,所以这样不行。那如果把每一个小方块作为一个Sprie,再把四个小方块组成的放开做一个Group呢?听起来不错,但是再想想也非常麻烦,我们就得判断碰撞的方向,要多做很多事情……考虑良久,感觉还是使用数组最靠谱啊,真可惜!所以我们也还是用数组来做这事情吧。

实现初期的一些优化思考

尽管我们仍然使用数组这种“古老”的方式,我们还是应该要利用一下pygame的绘图优势,否则就太失败了。举个例子,一般的俄罗斯方块,在重绘的时候把数组从头到尾扫描一遍,碰到一个1就画一个方块,俄罗斯方块的刷新率就算很低,一秒钟也要画了好多次吧(否则后期速度快的时候画面就“顿”了)。算它是15次,这样一来,每秒钟要扫描15次,需要画几百甚至上千次方块,调用这么多次绘图函数,还是相当浪费资源的。

我们可以这么考虑,除了数组之外,我们还维护一个已经落下的方块的图形的Surface,这样每次只需要把这个Surface贴到屏幕上就可以了,非常的轻量级。而这个Surface的更新也只需要在新的方块着地以后进行,完全可以在判断消除的代码里一起做,平均几秒钟才会执行一次,大大减少了计算机的工作了。当然,这个简单的程序里,我们这么做也许并不能看到性能的提升,不过一直有这么的思想,当我们把工程越做越大的时候,和别人的差距也许就会体现出来了。

同时,出于人性化的思考,我们是不是可以提供用户点击其他窗口的时候就把游戏暂停了?实现起来并不困难,但是好感度的提升可是相当的大。

实现中的一些细节

按左向左,按右向右,这一点事毫无疑问的,不过当我们按着向左向右不放的时候,就会持续移动,这一点也是要注意的,上面那位朋友实现的俄罗斯方块就没有考虑这一点,当然可能还是中途的版本的关系,我们这里要考虑到。

因为我们要实现几种不同模式的俄罗斯方块,那么比较一般的考虑方法就是先实现一个通用的、标准的而定制能力又很强的游戏类。当我们以后去做其他模式的时候,可以很方便的从这个类扩展出来,所以一开始设计的时候,就要尽可能多的考虑各种变种。

另外,考虑这次就完全使用键盘来控制吧,鼠标就不要了,上面的概念图,旁边几个按钮请无视……

下一次开始,我们就从基本的框架开始,慢慢地搭一个不同寻常的俄罗斯方块出来:用Python和Pygame写游戏-从入门到精通(实战二:搞笑俄罗斯2)。

python游戏开发框架_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)...相关推荐

  1. python cs开发框架_用Python编写一个简单的CS架构后门的方法

    用Python编写一个简单的CS架构后门的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  用Python编写一个简单的CS架构后门的方法.txt ] (友情 ...

  2. python用户界面游戏_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)...

    我们接着来做这个整死人不偿命的俄罗斯方块. 代码组织和名词约定 上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下: 其中,lib为py ...

  3. python教程是用什么博客写的-用Python和Pygame写游戏-从入门到精通(目录)

    目光博客一开始,就有一个将pygame好好介绍一遍的宏伟计划,历时四个月,在各位朋友的关怀鞭策下,如今(2011/8/26)理论学习的部分似乎已经都完成了,在次列一个目录,方便查询.介绍还不是很全,下 ...

  4. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  5. 用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...

  6. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  7. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  8. 《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

    目录 一.Autosar入门篇: 1.1 DBC专题(共9篇) 1.2 ARXML专题(共35篇) 1.2.1 CAN Matrix Arxml(共28篇) 1.2.2 ASWC Arxml(共7篇) ...

  9. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)

    Pygame的介绍 Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能.可以使你在Python语言中轻松的创建全功能的游戏和多媒体程序. Pygame是免费的,在GPL许可下发 ...

最新文章

  1. Nginx(二) 配置与调试
  2. 使用HTML5的自定义数据属性的jQuery选择器
  3. margin 和 padding 的使用区别
  4. springboot项目中pom.xml文件的颜色变成灰色,图标变成蜘蛛图形
  5. .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
  6. Django REST framework 认证、权限和频率组件
  7. Android中的PopUpWindow
  8. iis服务器发布web项目,webservice创建、发布及在IIS上部署
  9. 使用p4c将P4 14代码转换为16代码
  10. xlua的hotfixManager
  11. iOS应用内购基本步骤及问题
  12. 计算机专业毕业设计选题与方向走势
  13. 微软晓晓朗读录音工具windows-文字转语音
  14. 一、PR的初始重要设置
  15. 《迷人的8051单片机》——导读
  16. C++STL容器总结
  17. mysql mmm 测试_mysql-mmm有关mmm_control 参数测试
  18. SCARA工业机器人
  19. ie浏览器设置允许跨域_ieTester允许跨域浏览窗口和框架
  20. GENESIS公链将打破不同区块链孤岛效应

热门文章

  1. 推荐批量优化pdf文件的软件
  2. redis实现高可用
  3. 上位机工业协议-S7COMM
  4. vue项目中,将信息生成二维码图片保存为png格式并下载
  5. 深度学习基础——多层感知机
  6. 通联数据回测平台的测试
  7. Liunx一些简单的小命令2
  8. 基于AM5728 DSP+ARM的智能电力巡检机器人设计
  9. java计算机毕业设计课题申报系统MyBatis+系统+LW文档+源码+调试部署
  10. Lorzen混沌方程求解-ode45