python写2048游戏代码,python实现2048小游戏代码和解释
大蟒实现2048迷你游戏
来源:中文来源网络阅读:次2018年9月2日
【下载文档:python实现2048小游戏. txt】
(友情提示:右键单击文本文件(文本文件)文档名称-将目标另存为) ) ) ) ) ) ) )。
大蟒实现2048小游戏2048的大蟒实现。修改了一个网友的代码,解决了原来网友版本的两个小错误。 1 .原创游戏不是递归消除,而是一次只消除一次。如果要向左移动,如[2、2、2、2],则必须是[4、4、0、0]而不是[8、0、0、0]
2 .检测到游戏结束时存在错误,已被修复。
2048游戏。巴拉圭
#-* -编码:utf-8-* -
创建于114336015336039205
@作者:开尔文
导入随机
职业游戏2048:
总得分=0
v=[ 2,8,8,2 ],
[ 4,2,4,8 ],
[ 2,4,2,0 ],
[ 4,2,4,0 ]
v=[ 0,0,0,0 ],
[ 0,0,0,0 ],
[ 0,0,0,0 ],
[ 0,0,0,0 ]
def __init__(self):
forIinrange(4):
self.v [ I ]=[ random.choice ] [ 0,0,0,2,2,4 ] forxinrange (4) ]
仰角指示器显示(自) :
print((0:4),13:4),23:4),3:4),format ) self.v.v[0][0],self.v[0][1],self.v .
print((0:4)、13:4)、23:4)、3:4)、format ) self.v[1][0]、self.v[1]、self.v[1]、等
print((0:4),13:4),23:4),3:4),format ) self.v.v[2][0],self.v[2][1],self.v .
print((0:4),13:4),2:4),3:4),format ) self.v.v[3][0],self.v[3][1],self.v .
打印(得分为:(0:4 ).格式(self .总分))。
打印()游戏为:(0:4 ).格式(self.is over)))
#排序
定义对齐(自、列表、方向) :
forIinrange(vlist.count )0):
vist.remove(0))。
zeros=[0 for Xin range(4-len)vlist)]
如果方向==左:
是vist.extend(零)
否则:
vList[:0]=零
#将相同的元素相加,返回新的积分
efaddsame(自、列表、方向) :
增量=0
如果方向==左:
fori in [ 0,1,2 ]:
if vlist [ I ]==vlist [ i1 ]和vlist [ i1 ]!=0:
vList[i] *=2
vList[i 1]=0
increment=vList[i]
否则:
[ 3,2,1 ]中的fori:
if vlist [ I ]==vlist [ I-1 ]和vlist [ I-1 ]!=0:
vList[i] *=2
vList[i-1]=0
increment=vList[i]
返回增量
#处理行和方向,返回添加点
efHandle(self,vList,direction):
自对准(vlist,方向))。
increment=self.addsame(vlist,direction))。
自对准(vlist,方向))。
self.totalScore=increment #直接加到总额中
返回增量
#判断游戏是否结束
defjudge(自我) :
if self.isOver():
打印(输了,游戏结束!)
返回假
否则:
如果self.totalScore=2048:
打印(你赢了,游戏结束!但是我可以继续玩。
返回真
#判断游戏是否真的结束了
差速操作器(自己) :
n=self.calccharnumber(0))。
如果n!=0:
返回假
否则:
对于rowinrange(4):
旗帜=自我。islistover(self。v[row]).
如果flag==False:
返回假
对于colinrange(4):
#将矩阵列复制到列表中进行处理
vist=[self。范围(4)中行的v[row][col]
flag=self.isListOver(vList)
如果flag==False:
返回假
返回真
#判断一个列表是否可以合并
defislistover(self,vList):
fori in [ 0,1,2 ]:
if vlist [ I ]==vlist [ i1 ]和vlist [ i1 ]!=0:
返回假
返回真
efcalccharnumber(self,char):
n=0
对于self.v中的问:
n=数量计数(字符)
返回n
定义添加元素(自) :
#统计空白区域数n
n=self.calccharnumber(0))。
如果n!=0:
#2和四出现的概率为3/1,产生随机数2和四
num=随机选择
#生成随机数k,并将上一步中生成的2或四填充到第k个空白区域
k=random.randrange(1,N ^ 1)# k的范围为[1,N]
n=0
forIinrange(4):
forjinrange(4):
if self.v[i][j]==0:
n=1
如果n==k:
self.v[i][j]=num
返回
仰角指示器移动左(自) :
self.movehorizontal(left))。
仰角指示器移动(自) :
self.movehorizontal(right))。
Efmovehorizontal(自,方向) :
对于rowinrange(4):
自。手柄(自100 . v[行],方向).
德夫移动向上(自己) :
slf.movevertical(left )。
efmovedown(self):
slf.movevertical(right )。
Defmovevertical(从,方向):
对于colinrange(4):
#将矩阵列复制到列表中进行处理
vist=[self . v[row][col]for rowin range(4)
自从。handle (vlist,direction))。
#从已处理的列表编号中覆盖原始矩阵的值。
对于rowinrange(4):
self.v[row][col]=vList[row]
#主要处理功能
Ef操作(来自):
Op=输入(运算符:)
如果在[a , A]: #向左移动
self.moveLeft(
self.addElement()).
Eliopin [d , D]: #向右移动
self.moveRight(
self.addElement()).
移动到[w , W]: #中的elif op
self.moveUp()
self.addElement()).
在[s , S]: #中下移elif op
self.moveDown(
self.addElement()).
否则:
打印(输入错误。请输入[W,S,A,D]或其小写字母)
#开始
打印(输入:w(上)s(下)a(左)d(右),按。)
g=game2048()
标志=真
虽然正确:
G.display())。
flag=g.judge()
G.操作())
Flag=g.judge))以上是演示图的全部内容。我希望你喜欢它。
专业人士请尽量通过微信扫描分享此页面!*^_^*
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。