千机游戏提供最新游戏下载和手游攻略!

一步一步教你如何开发企业级游戏项目,2048小游戏(附源码+设计手稿)

发布时间:2024-10-15浏览:93

大家好,今天小编来为大家解答一步一步教你如何开发企业级游戏项目,2048小游戏(附源码+设计手稿)这个问题,很多人还不知道,现在让我们一起来看看吧!

相信很多人在学习编程或者工作的时候都不可避免的会去阅读别人的代码。优秀的源码不仅有清晰的代码逻辑,而且还带有相应的注释。

学习阅读源代码是一个优秀程序员的必备技能。当然,阅读和理解源代码是困难的,特别是对于优化后的源代码。为了执行效率,代码肯定会变得更难读。

因此,源码中配有设计文档,以帮助理解源码。至少,在我还是初学者的时候,我特别渴望有这样一份文档。所以,我写了这个文档来时刻提醒自己。

例如:改进棋盘上随机生成2或4的逻辑、部分展示对不同模型(windows、mac)的适配、对一些常见错误信息做出相应的解决方案等。

第2048章简介

这个游戏的玩法非常简单。您可以选择每次向上、向下、向左或向右滑动。每次滑动,所有数字方块都会向滑动方向靠拢。系统还会在空白处随机出现一个数字方块,相同数字的方块会靠得更近。将在它们碰撞时添加。经过不断的叠加,最终拼凑出数字2048,算是成功了。

环境配置

蟒蛇版本:3.6.0

项目所需环境安装包:

curses:命令行界面,回显和隐藏输入字符

itertools: 二维数组迭代工具

random: 生成随机数并从指定列表中随机获取一个元素

运行环境

Windows:命令行运行,python 2048_game.py,(也可以在pycharm的命令行选项卡下运行,文末有介绍);

mac:可以直接在pycharm下运行。

技术难点

1 移动逻辑

用户进行左移操作。首先将矩阵中的所有数字逐行移动到左侧非零位置,然后向左合并,最后逐行移动到左侧非零位置。这三个步骤结合起来为用户提供左移操作。

矩阵数字运动图如上所示,相关代码如下。

与左移操作相对应的是右移操作、上移操作和下移操作。为了简化代码,这里使用矩阵变换操作和左移操作来实现四个方向的操作。

右移运算=矩阵求逆+ 左移运算+ 矩阵求逆上移运算=矩阵转置+ 左移运算+ 矩阵转置下移运算=矩阵转置+ 矩阵求逆+ 左移运算+ 矩阵求逆+ 矩阵转置=矩阵转置+ 右移运算+矩阵转置

那么矩阵的转置和求逆运算有哪些呢?接下来我们将介绍矩阵运算。

2 矩阵运算

如上图所示,首先看红色箭头,表示矩阵转置和矩阵求逆后数字位置的变化。

再看蓝色箭头,对原矩阵进行左移操作相当于对矩阵转置后进行上移操作。类似地,左移操作与矩阵求逆和矩阵求逆+转置相结合,将形成相应的右移操作和下移操作。

矩阵转置运算和求逆运算代码如下图所示。

有了这些操作之后,我们应该如何设计这些操作,才能让代码简洁易懂呢?

这里用到了设计模式中的策略模式。

3 设计模式--策略模式

什么是策略模式?

简单来说就是当存在多个相似算法(四个方向的移动操作)时,使用if.else.带来的复杂度和维护难度。所以在代码运行时使用同一个接口来调用不同的方法或对象。

策略模式的优点: 1、算法可以自由切换; 2、避免使用多重判断条件; 3、扩展性好。

策略模式的缺点: 1、策略方法或者策略类的数量会增加; 2.所有策略类都需要暴露给外界。

使用场景: 1、如果一个系统中有很多类,它们之间的区别只是它们的行为,那么使用策略模式可以动态地让一个对象在众多行为中选择一种行为; 2. 一个系统需要动态地选择几种算法中的一种; 3. 如果一个对象有很多行为,如果没有使用适当的模式,这些行为就必须使用多个条件选择语句来实现。

下面通过四种算术运算来演示策略模式的应用:

4curses模块的使用

curses模块的主要用法,命令行界面,输入字符的回显和隐藏。

这里总结一下使用方法: 1、curses.initsr()启用curses模块; 2. while循环体不断渲染界面; 3. stdscr.clear() 在每次循环之前清屏; 4、清屏后,stdsrc.addstr()设置echo字符串; 5. stdscr.getch() 等待用户输入。这是一个断点。只要用户没有进行任何输入操作,它就会停留在这里。

梳理一下程序框架

程序分为四个模块,配置信息模块、主逻辑模块、判断模块、算法模块。

配置信息模块:棋盘尺寸(4X4)、键盘控制定义(上下左右按键)、胜利条件;

主逻辑模块:初始化、棋盘重置、棋盘位置随机生成数字、绘制棋盘、移动策略界面、获取用户操作、游戏主逻辑;

判断模块:判断是否胜利、是否结束、是否可以移动;

算法模块:四方向运动算法、数字合并算法、矩阵转置、矩阵求逆;

具体细分如下:

框架代码

提前写好代码框架是一个好习惯,这样在开发时更容易控制项目的整体进度。

在开发过程中,如果卡在某个细节上,可以使用#todo标签来标记。我们先写其他简单的模块,等有时间再回来解决这个难点。

摘录一个判断模块代码框架(立方体代表矩阵的浅拷贝):

''' 私有,是否可以向左、向右、向下、向上移动'''def __is_move_left(self,cube): passdef __is_move_right(self,cube): passdef __is_move_down(self,cube): passdef __is_move_up(self,cube) ):通

总体框架如下(与源码分开,单独的代码文件,主要用于查看):

具体代码实现

下面分为四个模块,主要按照难度排序。让我们从简单模块的代码开始。

写在模块中——配置信息

模块编写——判断模块

判断是否获胜以及游戏是否结束:

判断是否可以向左移动

判断是否可以向右、向上、向下移动:使用矩阵运算(转置和求逆)结合左移判断。

判断用户的选择是否可以移动(这里也使用策略模式)

模块编写——算法部分

移动的基本操作(左移)

四个方向的移动:根据上面的矩阵运算图,我们可以知道左移的基本运算,结合矩阵运算,可以推导出其他三个方向的移动运算。

数字合并(左合并)

矩阵转置

矩阵求逆

模块编写——主要逻辑部分

初始化:

主板复位:

在棋盘上随机生成数字:

画一个棋盘:

移动策略:根据用户的选择,程序运行时自动选择相应的移动算法。

获取用户操作:

主要逻辑:

主要功能

出现问题的解决方案

Windows环境下可能出现的问题:

错误ModuleNotFoundError: 没有名为“_curses”的模块

解决方案:

下载一个:curses-2.2.1+utf8-cp36-cp36m-win_amd64.whl文件

使用pip安装:pip installcurses-2.2.1+utf8-cp36-cp36m-win_amd64.whl

(cp36表示对应的python版本为3.6,amd64表示64位系统)

不支持错误重定向。

解决方法:如图

显示内容不正确

解决方案:

进入Terminal控制台,使用命令启动运行代码:python 2048_game.py

4.错误_curses.error: addwstr()返回ERR

解决方案:

只需放大接线盒即可。原因是curses需要合适的界面尺寸来渲染游戏界面。如果界面太小,渲染就会失败。

Mac环境下可能出现的问题:

我在Mac环境下直接运行就可以了,好像没有遇到什么问题。

游戏演示

终于看到运行结果了

结论

至此,2048游戏的设计就完成了。当然,还有很多可以优化的地方,比如排名、文件存储、两人对战、分数计算加入时间因素、H5页面的访问等等。我记得产品经理曾经说过这样的话:首先保证80%的功能可用,然后再考虑优化问题。

网上有很多2048小游戏,但只有你自己写的游戏才是最受欢迎的。

用户评论

娇眉恨

讲真,这个2048真是经典!想了解下enterprise级的游戏开发流程就收藏了,看图和代码都是重点啊!

    有12位网友表示赞同!

|赤;焰﹏゛

这个教程太棒了!对初学者像我来说非常有帮助。尤其喜欢附带的设计文稿,让我明白从概念到实现的整个过程,这下更有目标性地学习了

    有11位网友表示赞同!

别伤我i

企业级项目可不能就靠2048来诠释啊。。。 感觉教程太简陋了,想要了解真正的“企业级”难度还需要更深入的技术探索。

    有7位网友表示赞同!

致命伤

收藏了!一直想学做游戏,2048入门级别挺合适,配套源码和设计文稿也是一份学习资料宝藏!

    有13位网友表示赞同!

日久见人心

作为一名游戏爱好者,也对开发有兴趣,这个教程刚好可以趁着空闲时间学习一下。希望以后能再分享更多更复杂的项目

    有20位网友表示赞同!

烟雨萌萌

这份源码质量不错,逻辑清晰易懂。 设计文稿也很详细,可以直观了解整个游戏的架构设计思路。 希望能学到更多企业级项目的开发经验!

    有9位网友表示赞同!

我的黑色迷你裙

这个教程挺有用的,把游戏从概念到代码,甚至包括了设计方案的流程都展示出来了。 就是希望后续再分享一些实录案例以及实战技巧。

    有15位网友表示赞同!

安好如初

2048 小游戏虽然简单,但确实是一个很好的入门项目。 这个教程结合源码和设计文稿,对初学者来说非常有帮助!

    有5位网友表示赞同!

心悸╰つ

“企业级”有点夸张吧? 感觉这个教程太过于基础了。 想学习真正意义上的企业级开发,需要更深层次的理论知识和实践经验。

    有7位网友表示赞同!

一纸愁肠。

这个2048小游戏的源码逻辑清晰,代码注释很详细,很容易理解。设计文稿也阐述的很透彻,受益匪浅! 感谢作者分享!

    有8位网友表示赞同!

稳妥

我一直在想学习游戏开发,这个教程简直太棒了!从入门到实战,都包含在内了。 我已经迫不及待想要开始练习了!

    有9位网友表示赞同!

单身i

虽然只是一个2048小游戏,但是这个教程的教学思路非常清晰,能够帮助学习者理解企业级项目开发的基本流程。 期待作者后续分享更多实用的案例和技巧!

    有9位网友表示赞同!

秘密

作为一名游戏玩家,我一直对游戏开发充满好奇。 有了这份教程和源码,我相信我可以尝试自己做一款小游戏! 谢谢作者的分享!

    有9位网友表示赞同!

青袂婉约

这个教程讲得十分详细,从游戏的逻辑到代码实现,再到设计方案的设计,都进行了深入的讲解。 非常适合想要学习游戏开发的新手入门。

    有19位网友表示赞同!

傲世九天

感觉2048只是一个简单的例子,企业级项目应该涉及更复杂的算法、技术和框架。 希望作者能够分享更多关于大型项目的开发经验

    有16位网友表示赞同!

莫名的青春

对于想学习游戏开发的人来说,这是一个很好的入門教程。 2048小游戏的代码简洁易懂,设计文稿也很全面,可以帮助大家快速掌握相关知识。

    有16位网友表示赞同!

隔壁阿不都

这个教程虽然很专业,但还是比较容易理解。 希望能有更多实操案例的分享,这样学习效果会更加明显!

    有17位网友表示赞同!

拽年很骚

期待作者继续分享更高级的游戏开发内容,例如使用 Unity 或 Unreal Engine 等引擎进行项目开发的经验,以及多人游戏及网络技术等方面的讲解。

    有11位网友表示赞同!

热点资讯