matix=[[ for i in range()] for i in range()] # 用列表推导式初始化生成一个*的列表,列表元素全为
# notzero函数的作用:游戏界面上非零的时候才显示,当为的时候,让其显示空,
def notzero(s):
return s if s!= else '' # 非零的话返回本身,否则返回 ''
def display(): # 显示界面函数,用┌ ├└,┤,┘┐│,─,┬,┴ 等显示边框,中间显示*矩阵里的的元素
print("\r\
┌──┬──┬──┬──┐\n\
│%s│%s│%s│%s│\n\
├──┬──┬──┬──┤\n\
│%s│%s│%s│%s│\n\
├──┬──┬──┬──┤\n\
│%s│%s│%s│%s│\n\
├──┬──┬──┬──┤\n\
│%s│%s│%s│%s│\n\
└──┴──┴──┴──┘"\
%(notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),\
notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),\
notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),notzero(matix[][]), \
notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),notzero(matix[][]),)
)
display()
def init(): # 初始化矩阵
initNumFlag =
while :
k = if random.randrange(, ) > else # 当生成随机数大于的时候k=否则k= 生成和的概率为:
s = divmod(random.randrange(, ), ) # 生成矩阵初始化的下标 比如divmod(,)的话,s为(,)正好可以作为矩阵下标
if matix[s[]][s[]] == : # 只有当其值不为的时候才赋值,避免第二个值重复
matix[s[]][s[]] = k
initNumFlag +=
if initNumFlag == : # 当initNumFlag== 的话表示矩阵里两个随机数都已经生成了,退出循环
break
init()
display( )
def addRandomNum(): #每次移动后随机在矩阵中在生成一个数
pass
def moveDown(): #向上移动的处理函数
pass<br> addRandomNum() #移动处理完成后,随机生成一个数
def moveLeft(): #向左移动的处理函数
pass
addRandomNum()
def moveUp(): #向上移动的处理函数
pass
addRandomNum()
def moveRight(): #向右移动的处理函数
pass
addRandomNum()
def main():
while flag: #定义一个死循环,不断读入用户的输入,然后在做判断,看是向哪里移动
d = input(' (↑:w) (↓:s) (←:a) (→:d),q(uit) :“)
if d == 'a':
moveLeft()
elif d == 's':
moveDown()
elif d == 'w':
moveUp()
elif d == 'd':
moveRight()
elif d == 'q':
break
else:
pass
def addRandomNum(): # 跟初始化生成随机数一样,只不过这里只是生成一个随机数
while :
k = if random.randrange(, ) > else
s = divmod(random.randrange(, ), )
if matix[s[]][s[]] == :
matix[s[]][s[]] = k
break
display() # 随机数添加完成后就直接调用显示函数,直接显示一下游戏界面
def moveDown(): #处理向下移动的函数
for i in range(): #外层次循环处理例,内层两个层循环,来处理相邻的两个数
for j in range(, , -):
for k in range(j - , -, -):
if matix[k][i] > : # 从最下面的数开始处理相邻的两个数
if matix[j][i] == :
matix[j][i] = matix[k][i] # 如果下面的数为空,上面的数字不为空就移动上面的数为下面的数
matix[k][i] =
elif matix[j][i] == matix[k][i]: # 如果相邻的两个数相等的话,就和并,并把上面的输置零,下面的数变成两倍
matix[j][i] *=
matix[k][i] =
break
addRandomNum() # 移动完成后再随机生成一个数
def check():
for i in range(4): #按每一排循环4 次
for j in range(3): # 如果矩阵中有0存在,或者有相邻的数就表示游戏还可以继续经行,否则就是GG
if matix[i][j] == 0 or matix[i][j] == matix[i][j + 1] or matix[j][i] == matix[j + 1][i]:
return True
else:
return False
import random
score = 0 # 纪录游戏的分数
matix = [[0 for i in range(4)] for i in range(4)] # 初始化生成一个4*4的列表
def notzero(s):
return s if s != 0 else ''
def display():
print("\r\
┌──┬──┬──┬──┐\n\
│%4s│%4s│%4s│%4s│\n\
├──┬──┬──┬──┤\n\
│%4s│%4s│%4s│%4s│\n\
├──┬──┬──┬──┤\n\
│%4s│%4s│%4s│%4s│\n\
├──┬──┬──┬──┤\n\
│%4s│%4s│%4s│%4s│\n\
└──┴──┴──┴──┘" \
% (notzero(matix[0][0]), notzero(matix[0][1]), notzero(matix[0][2]), notzero(matix[0][3]), \
notzero(matix[1][0]), notzero(matix[1][1]), notzero(matix[1][2]), notzero(matix[1][3]), \
notzero(matix[2][0]), notzero(matix[2][1]), notzero(matix[2][2]), notzero(matix[2][3]), \
notzero(matix[3][0]), notzero(matix[3][1]), notzero(matix[3][2]), notzero(matix[3][3]),)
)
def init(): # 初始化矩阵
initNumFlag = 0
while 1:
k = 2 if random.randrange(0, 10) > 1 else 4 # 随机生成 2 或 4
s = divmod(random.randrange(0, 16), 4) # 生成矩阵初始化的下标
if matix[s[0]][s[1]] == 0: # 只有当其值不为0的时候才赋值,避免第二个值重复
matix[s[0]][s[1]] = k
initNumFlag += 1
if initNumFlag == 2:
break
display()
def addRandomNum(): #处理完移动后添加一个新的随机数
while 1:
k = 2 if random.randrange(0, 10) > 1 else 4
s = divmod(random.randrange(0, 16), 4)
if matix[s[0]][s[1]] == 0:
matix[s[0]][s[1]] = k
break
display()
def check(): #检查游戏是否GG
for i in range(4):
for j in range(3):
if matix[i][j] == 0 or matix[i][j] == matix[i][j + 1] or matix[j][i] == matix[j + 1][i]:
return True
else:
return False
def moveRight(): # 向右移动处理函数
global score
for i in range(4):
for j in range(3, 0, -1):
for k in range(j - 1, -1, -1):
if matix[i][k] > 0:
if matix[i][j] == 0:
matix[i][j] = matix[i][k]
matix[i][k] = 0
elif matix[i][j] == matix[i][k]:
matix[i][j] *= 2
score += matix[i][j] #将当前数作为score加上
matix[i][k] = 0
break
addRandomNum()
def moveUp():
global score
for i in range(4):
for j in range(3):
for k in range(j + 1, 4):
if matix[k][i] > 0:
if matix[j][i] == 0:
matix[j][i] = matix[k][i]
matix[k][i] = 0
elif matix[k][i] == matix[j][i]:
matix[j][i] *= 2
score += matix[j][i]
matix[k][i] = 0
break
addRandomNum()
def moveDown():
global score
for i in range(4):
for j in range(3, 0, -1):
for k in range(j - 1, -1, -1):
if matix[k][i] > 0:
if matix[j][i] == 0:
matix[j][i] = matix[k][i]
matix[k][i] = 0
elif matix[j][i] == matix[k][i]:
matix[j][i] *= 2
score += matix[j][i]
matix[k][i] = 0
break
addRandomNum()
def moveLeft():
global score
for i in range(4):
for j in range(3):
for k in range(1 + j, 4):
if matix[i][k] > 0:
if matix[i][j] == 0:
matix[i][j] = matix[i][k]
matix[i][k] = 0
elif matix[i][j] == matix[i][k]:
matix[i][j] *= 2
score += matix[i][j]
matix[i][k] = 0
break
addRandomNum()
def main():
print(" \033[33;1mWelcome to the Game of 2048!\033[0m")
flag = True
init()
while flag: #循环的标志
print(' \033[33;1m You Score:%s\033[0m' % (score))
d = input('\033[33;1m (↑:w) (↓:s) (←:a) (→:d),q(uit) :\033[0m') #不断处理用户输入
if d == 'a':
moveLeft()
if not check(): #检查游戏是否GG
print('GG')
flag = False #GG的话直接退出
elif d == 's':
moveDown()
if not check():
print('GG')
flag = False
elif d == 'w':
moveUp()
if not check():
print('GG')
flag = False
elif d == 'd':
moveRight()
if not check():
print('GG')
flag = False
elif d == 'q': # 退出
break
else: # 对用户的其他输入不做处理
pass
if __name__ == '__main__':
main()
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有