前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣。心想着,我貌似也能用Python来整一波,话不多说,直接开搞。
2048的游戏规则:
2048游戏共有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块
咱们可以从游戏规则里面一步一步来:
第一步:
2048游戏共有16个格子,初始时会有两个格子上安放了两个数字2
这一步比较简单,我们可以建立一个二维数组,然后随机在上面放上两个数字2
用代码就可以这么写:
list1=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
def map1(map_list):
count=0
while(count<2):
a=r.randint(0,3)
b=r.randint(0,3)
if map_list[a][b]==0:
map_list[a][b]=2
count+=1
——————————————————————————————————————————
——————————————————————————————————————————
第二步:
每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,相同数字的方块在靠拢、相撞时会相加。
这一步就是这个游戏里,比较复杂的地方了。这里涉及到两种运算,我称之为,去0运算和合并运算
去0运算:
我们先从最简单的2—0开始写:
开始是这样:
我们要假设要进行上滑操作,使其变成这样:
这里我们可以看到在(2,1)的地方的2,上滑到了(1,1),那么我们来写代码:
def qu0(dire,list1):#去0运算,w,a,s,d分别表示各个方向
if (dire=="w" or dire=="W"):
#h表示行,s表示列
for s in range(4):
for h in [3,2,1]:
elif(list1[h-1][s]==0):
list1[h-1][s]=list1[h][s]
list1[h][s]=0
if