当前位置:首页 > 股票行情

英亚体育_用20行Python代码实现2048小游戏,你会吗?
本文摘要:前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣。

英亚体育登录

前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣。心想着,我貌似也能用Python来整一波,话不多说,直接开搞。

2048的游戏规则:2048游戏总共有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个偏向去滑动,每滑动一次,所有的数字方块都市往滑动的偏向靠拢外,系统也会在空缺的地方随即泛起一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想措施在这小小的16格子规模中凑出“2048”这个数字方块这里还要注意:如果你刚学python,记着:项目实战永远是焦点,如果你没有python入门到高级实战视频教程,可以关注我,后台私信我 ‘py’ 自动获取最新python教程资料!另有老司机解答哦!咱们可以从游戏规则内里一步一步来:第一步: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 (dire=="s" or dire=="S"): for s in range(4): for h in [0,1,2]: elif(list1[h+1][s]==0): list1[h+1][s]=list1[h][s] list1[h][s]=0 if (dire=="a" or dire=="A"): for h in range(4): for s in [3,2,1]: elif(list1[h][s-1]==0): list1[h][s-1]=list1[h][s] list1[h][s]=0 if (dire=="d"or dire=="D"): for h in range(4): for s in [0,1,2]: elif(list1[h][s+1]==0): list1[h][s+1]=list1[h][s] list1[h][s]=0 这里我们通过看自己格子的前一个格子里的数字是否为0,如果是,那么我们就把这个格子里的数字移动到前一个格子里。合并运算:相同数字的方块在靠拢、相撞时会相加(示意图就不给画了,你们应该都能想象,orz )先上代码def heB(dire,list1): if (dire=="w" or dire=="W"): for s in range(4): for h in [3,2,1]: elif(list1[h][s]==list1[h-1][s] ): #合并运算 list1[h-1][s]=list1[h-1][s]*2 list1[h][s]=0 if (dire=="s" or dire=="S"): for s in range(4): for h in [0,1,2]: elif(list1[h][s]==list1[h+1][s] ): list1[h+1][s]=list1[h+1][s]*2 list1[h][s]=0 if (dire=="a" or dire=="A"): for h in range(4): for s in [3,2,1]: elif(list1[h][s]==list1[h][s-1]): list1[h][s-1]=list1[h][s-1]*2 list1[h][s]=0 if (dire=="d"or dire=="D"): for h in range(4): for s in [0,1,2]: elif(list1[h][s]==list1[h][s+1]): list1[h][s+1]=list1[h][s+1]*2 list1[h][s]=0这里我们仍然还是看格子的前一个数字,如果格子里的前一个数字跟格子里的数字相同,那么就要把原来的格子里的数字变为0,格子里的前一个数字翻倍(相加)。

相识完2048的这两种运算,我们就要开始研究判断顺序了,研究判断顺序需要拿出一个极端的例子好比下面这个:我们使这个这个二维数组往上相加,它履历的历程如下:第一步:第二步:第三步:由上可见,纵然是最极端的例子也只举行了2次合并运算,所以我们可以得出结论,在2048举行运算时的顺序是 去0运算——合并运算——去0运算——合并运算所以我们可以写出下面的代码:def move(dire,list1): # h表现行 s表现列 qu0(dire,list1) heB(dire,list1) qu0(dire,list1) heB(dire,list1)那么,最繁琐的移动历程就这么竣事喽(拍手,啪啪啪),接下来就是发生随机数了第三步:系统会在空缺的地方随即泛起一个数字方块,系统给予的数字方块不是2就是4这玩意儿挺简朴的,我们可以让系统随机生成一个坐标地址,然后我们再磨练这个坐标地址内的数字是否为0。如果为0,就随机填一个2或4进去,如果不为0,那咱们就再随机生成一个坐标地址,然后接着磨练,直到这个坐标内的数字为0代码如下:def mainmap(map_list): count = 0 while (count < 1): a = r.randint(0, 3) b = r.randint(0, 3) if map_list[a][b] == 0: c = r.choice([2, 4]) map_list[a][b] = c count += 1写到这,一个基本的框架就差不多完成了,接下来就是判断游戏胜负的时候了第四步:玩家在这小小的16格规模中凑出“2048”这个数字方块,就能判断为游戏的胜利。

如果这个16格的规模内,已经没有空间(0)可以移动了,那么游戏就判断为失败。这其实我们只需要遍历每个表格中的数字,如果有一个数字为2048,就判断胜利,所有表格中,没有一个表格里的数字为0,就判断失败。代码如下:def panding(list1): panding = 0 count = 0 for i in list1: for b in i: if (b == 2048): panding = 1 if (b == 0): count = 1 if (panding == 1): print("恭喜您,挑战乐成") input() break if (count == 0): print("真遗憾,挑战失败") input() break到这边,2048的游戏已经可以正常的玩耍了,可是浪漫的人不能满足于此, 我们来给表格添上一个悦目 的框框def kuangkuang(list1): print("+----+----+----+----+") for i in list1: a=i[0] b=i[1] c=i[2] d=i[3] print("| | | | |") print("| {0} | {1} | {2} | {3} |".format(a,b,c,d)) print("+----+----+----+----+") 终于,我们终于把它给攻占完了(撒花)最后让我们把它们拼接在一起吧def main(): print("哇呼,你发现了一个2048,要不要举行游戏") input() print("1.好的 2.没问题 3.棒极了") input() print("请使用wasd举行操作,w为往上滑,s为往下滑,a为往左滑,d为往右滑") input() print("那么,游戏开始喽。

英亚体育

") map1(list1) while True: dire = input("请输入偏向:") if dire == "abc": break move(dire, list1) mainmap(list1) kuangkuang(list1) panding(list1)main()最后注意:如果你刚学python,记着:项目实战永远是焦点,如果你没有python入门到高级实战视频教程,可以关注我,后台私信我 ‘py’ 自动获取最新python教程资料!另有老司机解答哦!本文的文字及图片泉源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请实时联系我们以作处置惩罚。


本文关键词:英亚体育,英亚体育登录

本文来源:英亚体育-www.videoswap.net