您的位置:首页 > 编程语言 > Python开发

Python 2048小游戏

2017-10-17 12:39 435 查看
import sys
import random

def init():
global data
data = [[0 for i in range(4)] for j in range(4)]

def myprint():
for line in data:
print (line)

#是否存在还为0的位置
def whether_con():
for i in range(4):
prex = prey = 0
for j in range(4):
if data[i][j] == prex or data[i][j] == prey:
return True
else:
return False

def testcase1():
data[0][0] = 2
data[2][0] = 2
data[3][0] = 4
data[3][1] = 2
data[3][2] = 8

def rand_num():  #在0的地方随机产生一个数
values = [2,4]
zero_pos = [[k,_k] for k,v in enumerate(data) for _k, _v in enumerate(v) if _v == 0]  #存放值为0的所有位置的坐标[[0,1],[1,2],[2,1]]
pos = random.choice(zero_pos)
value = random.choice(values)
data[pos[0]][pos[1]] = value

def main():
score = 0
init()
# rand_num()
# rand_num()
while True:
print ('score:', score)
myprint()
instruction = input('-->')
if instruction == 'w':
for i in range(4):
line_data = []
for j in range(4):
tmp = data[j][i]
if tmp!=0:
if not line_data:
line_data.append([tmp])
elif line_data[-1][0] == tmp and len(line_data[-1])==1:
line_data[-1].append(tmp)
score += 2*tmp
else:
line_data.append([tmp])
line_data = [sum(k) for k in line_data]
for j in range(4):
data[j][i] = 0
for k,v in enumerate(line_data):
data[k][i] = v
if instruction == 's':
for i in range(4):
line_data = []
for j in range(3,-1,-1):
tmp = data[j][i]
if tmp!=0:
if not line_data:
line_data.append([tmp])
elif line_data[-1][0] == tmp and len(line_data[-1])==1:
line_data[-1].append(tmp)
score += 2*tmp
else:
line_data.append([tmp])
line_data = [sum(k) for k in line_data]
for j in range(4):
data[j][i] = 0
for k,v in enumerate(line_data):
k = abs(k -3)
data[k][i] = v
if instruction == 'a':
for i in range(4):
line_data = []
for j in range(4):
tmp = data[i][j]
if tmp!=0:
if not line_data:
line_data.append([tmp])
elif line_data[-1][0] == tmp and len(line_data[-1])==1:
line_data[-1].append(tmp)
score += 2*tmp
else:
line_data.append([tmp])
line_data = [sum(k) for k in line_data]
for j in range(4):
data[i][j] = 0
for k,v in enumerate(line_data):
data[i][k] = v

if instruction == 'd':
for i in range(4):
line_data = []
for j in range(3,-1,-1):
tmp = data[i][j]
if tmp!=0:
if not line_data:
line_data.append([tmp])
elif line_data[-1][0] == tmp and len(line_data[-1])==1:
line_data[-1].append(tmp)
score += 2*tmp
else:
line_data.append([tmp])
line_data = [sum(k) for k in line_data]
for j in range(4):
data[i][j] = 0
for k,v in enumerate(line_data):
k = abs(k-3)
data[i][k] = v
rand_num()

main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python