该游戏用面向对象的思想编写代码,每一个功能都用一个函数实现
该代码为个人原创
import random
#该函数将二维列表显示在4x4的方格中
def init(v, score):
print("总分:", score, "分")
print('{0:4} {1:4} {2:4} {3:4}'.format(v[0][0], v[0][1], v[0][2], v[0][3]))
print('{0:4} {1:4} {2:4} {3:4}'.format(v[1][0], v[1][1], v[1][2], v[1][3]))
print('{0:4} {1:4} {2:4} {3:4}'.format(v[2][0], v[2][1], v[2][2], v[2][3]))
print('{0:4} {1:4} {2:4} {3:4}'.format(v[3][0], v[3][1], v[3][2], v[3][3]))
#该函数将列表中非零的元素按制定方向紧挨排列
def layout(v, direction):
if direction == "left":
for l in v:
zero = []
for i in range(l.count(0)):
l.remove(0)
zero.append(0)
for j in zero:
l.append(j)
else:
for l in v:
zero = []
for i in range(l.count(0)):
l.remove(0)
zero.append(0)
l[0:0] = zero
#该函数将相邻且相同元素相加后计入总分
def addsum(v, direction, score):
score = score
if direction == "left":
for l in v:
for i in range(0, 3):
if l[i] == l[i+1] != 0:
l[i] *= 2
l[i+1] = 0
score += l[i]
break
return score
else:
for l in v:
for i in range(0, 3):
if l[i] == l[i+1] != 0:
l[i+1] *= 2
l[i] = 0
score += l[i+1]
break
return score
#该函数处理上下相加前的列表重新排列,先将二维列表中每个列表的第一个元素取出组成一个新列表,
#然后取每个列表的第二个元素组成一个新列表,以此类推,将4个新的列表醉成一个新的二维列表
def listchange(v):
vchange = []
for i in range(4):
l1 = []
for l in v:
l1.append(l[i])
vchange.append(l1)
return vchange
#该函数处理上下相加后的列表按照原来的方式排列
def initchange(vchange):
l2 = []
for i in range(4):
l3 = []
for l in vchange:
l3.append(l[i])
l2.append(l3)
return l2
#该函数在列表重新排列后随机将某个0元素替换程2或4
def randomlist(v,score):
#判断有多少个0元素
n = 0
for l in v:
n += l.count(0)
#当列表中没有0元素时,返回一个数值,在该函数外进行退出和打印总成绩
if n == 0:
return 1
#当列表中存在0元素时,将2或4随时替换某个0元素
number = random.choice([2,2,2,4])
k = random.randrange(1,n+1)
m = 0
for i in v:
for j in range(4):
if i[j] == 0:
m += 1
if m == k:
i[j] = number
print(k)
break
return 2
def main():
v = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
for i in range(4):
v[i] = [random.choice([0, 0, 0, 2, 2, 4]) for x in v[i]]
score = 0
init(v, score)
while True:
print("a(左),d(右),w(上),s(下)")
n = input("请输入方向:")
if n == "a":
direction = "left"
layout(v, direction)
sum = addsum(v, direction, score)
score = sum
game = randomlist(v,score)
elif n == "d":
direction = "right"
layout(v, direction)
sum = addsum(v, direction, score)
score = sum
game = randomlist(v,score)
#将w按照a处理
elif n == "w":
direction = "left"
vchange = listchange(v)
layout(vchange, direction)
sum = addsum(vchange, direction, score)
score = sum
v = initchange(vchange)
game = randomlist(v,score)
#将s按照d处理
elif n == "s":
direction = "right"
vchange = listchange(v)
layout(vchange, direction)
sum = addsum(vchange, direction, score)
score = sum
v = initchange(vchange)
game = randomlist(v,score)
elif n == "Q":
print("总分:", score, "分")
print("谢谢使用")
break
else:
print("您的输入有误,请重新输入")
print("总分:", score, "分")
continue
if game == 1:
print("总分:", score, "分")
print("游戏结束,谢谢使用")
break
else:
init(v, sum)
if score >= 2048:
print("顺利通关,恭喜您")
print("按任意键继续游戏,按Q退出游戏")
nb = input("请输入:")
if nb == "Q":
continue
else:
print("游戏结束,谢谢使用")
break
if __name__ == "__main__":
main()