一起来写2048(160行python代码)

这篇博客介绍了如何使用Python编程实现2048游戏。作者从游戏的基本流程出发,详细阐述了矩阵移动、数字合并、计分等关键步骤,并提供了简单的代码实现。文章还涉及了Python列表作为储存结构、后退功能的实现以及如何处理游戏移动的细节。
摘要由CSDN通过智能技术生成

前言:

        Life is short ,you need python.

                                                                 --Bruce Eckel

我与2048的缘,不是缘于一个玩家,而是一次,一次,又一次的ACM比赛.四月份校赛初赛,第一次碰到2048,两周后决赛再次遇到2048,后来五月份的广东省赛,又出现了2048。在这三次比赛过程中,我一次2048都没玩过..全靠队友的解释,直到昨天,我突然想起写个2048吧,于是下了个2048玩了几盘,之后就开始用python来写了,心想就不写界面了,为了简洁。

我对python并不熟悉,但是我在之前的博文就提过我希望成为一个python的玩家,所以我选择了python,同时,也希望大家也可以用非常简单的代码取实现2048。

首先,如果你没有玩过2048,没关系,你只要随便在网上或电子市场一搜索肯定会有各种版本,之后玩几把就会了。

来到这里,我假设大家都玩过2048了,于是我们先分析一下怎么来写一个简单的2048?回想一下,游戏的过程是很简单的:

              开始===>(  进行操作(上下左右)===>矩阵移动===>数字合并===>计分  )===>退出

括号内就是游戏的进行过程了,我们退出大概就是两个:1.出现2048,胜利退出 2.无法合并同时无法出现新数(是且的关系)

懂得这个运行过程后,我们就一步步来写,整个过程也不会难,哪怕你跟我一样基本是新手

先看看简略图,看起来虽然真的很朴素,但是爱美的你,可以在看完我的程序后自己美化。


储存结构:列表,其中包括二维矩阵列表,即所谓的mtr[4][4],以及栈,栈是用于退回,如果大家不想要这个功能可以直接忽略。

我们的变量定义:

declare = "←:a/h  ↓: s/j ↑: w/k →: d/l ,q(uit),b(ack)"
illegal = "Illegal operation!"
noefficient = "This move has no efficient"
score = 0
step = 0
mtr = init()  # init the matrix
mtr_stk = []  # use step for back
scr_stk = []

稍微解释一下: declare是解释操作提示,自己喜欢怎么写就怎么写~

                             illegal是我们输入非正常操作提示,,可以省略

                             noefficient是我们往这个方向没效果,也可以省略~

                             score是得分,step是走了多少步,

                             mtr是我们的二维方阵,

                             mtr_stk,scr_stk是储存栈,用于后退功能,如果不要后退,还是可以省略~

算法实现:

 ·「注:其实没有算法可言....更准确叫函数实现。」

(1).在我们这个没有界面的2048中,我们只能用制表符啦,所以我们需要一个display函数。

 这是一个非常简单的事情,跟C语言的printf基本一致, 像如下代码,基本就能绘制出一个固定数字的表格了。

  

        print "┌"+("─"*5+"┬")*3+"─"*5+"┐"
        print "│%4d │%4d │%4d │%4d │"%(1,2048,25,4)
        print "├"+("─"*5+"┼")*3+"─"*5+"┤"
        print "│%4d │%4d │%4d │%4d │"%(1,2048,25,4)
        print "├"+("─"*5+"┼")*3+"─"*5+"┤"
        print "│%4d │%4d │%4d │%4d │"%(1,2048,25,4)
        print "├"+("─"*5+"┼")*3+"─"*5+"┤"
        print "│%4d │%4d │%4d │%4d │"%(1,2048,25,4)
        print "└"+("─"*5+"┴")*3+"─"*5+"┘"

但是我们需要的是将固定的数字变成我们矩阵mtr的数字。

另外可以,注意到一点,数字输出的形式是固定的,表格边线,只有交叉点是不同,其他是0。而交叉点有五个,我们可以走循环(觉得麻烦可以直接忽略)

为了美观,我们不将0输出,所以我们输出时候选择的是字符串即%s,这样,我们遇到0,就可以输出' ',其他直接输出。

我们可以用python的三目运算符号

print "%4s " %(mtr[i][j] if mtr[i][j] else ' ')
所以我们的绘制表格写成这样子: 最直接的方法!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值