用python写一个2048游戏

大家好,欢迎来到Crossin的编程教室!
《2048》是一个几年前曾经火爆一时的小游戏(查了一下,竟然是将近7年前上线的)。今天我们就用Python来仿制一个2048小游戏吧。废话不多说,让我们愉快地开始吧~
Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。
安装Python并添加到环境变量,pip安装需要的相关模块即可。
注意需要下载代码文件夹中的所有文件,并保持原有目录结构。
在代码所在目录打开CMD,运行如下命令即可:
效果如下:
不瞒大家说,我以前还真没玩过2048这个小游戏。于是找了个网页版的2048小游戏先体验了一下:
感觉玩法还是挺简单的,无非就是:
"使用方向键移动方块,两个数字相同的方块撞在一起后,将会合并为一个数字是原来两倍的新方块。游戏的时候尽可能多地合并这些数字方块就行了。"
大概了解了游戏规则之后,我们就可以开始写这个游戏啦~
首先,进行一下游戏初始化操作并播放一首自己喜欢的游戏背景音乐:
接着,我们来定义一个2048游戏类,里面主要负责实现2048的各种游戏规则:
具体而言,我们先用一个二维的列表来保存当前的游戏状态:
其中null表示当前的块里没有数字。否则,对应的位置则用当前的数字表示。很显然地,2048小游戏的当前游戏状态是可以用一个4*4的列表表示的:
游戏一开始,我们需要在这个二维列表里随机地选择两个位置生成数字(即2或者4):
然后,当玩家按下方向键()时,这个二维列表要根据玩家的操作指令进行更新,主要分为两个部分:
移动所有的数字块并进行必要的合并和记分;
随机地在一个还没有数字的位置上生成一个数字。
具体而言,代码实现如下:
其中,移动所有的数字并进行必要的合并的代码实现如下:
懒得动脑子了(反正就4*4那么大T_T),所以直接遍历了这个二维列表以实现我们想要的所有操作了。最后,我们再写个函数以根据当前的游戏状态来判断游戏是否结束就ok啦:
其实很简单,如果二维列表被数字填满,且数字不能再进行合并的话,这局游戏就结束了,否则,游戏就没有结束。
定义完2048游戏类,我们的游戏基本上算是写完了。只需要在游戏主循环里根据用户操作来更新当前的游戏状态并将游戏里所有必要的元素显示在屏幕上就ok啦:
最后的效果大概是这样的:
图片
大功告成,完整源代码详见相关文件~
作者:Charles未晞
来源:Charles的皮卡丘
_往期文章推荐_