python秒表游戏代码_用20行Python代码实现2048小游戏,你会吗?

更新时间:2023-07-23 20:39:37 阅读: 评论:0

python秒表游戏代码_⽤20⾏Python代码实现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)
那么,最繁琐的移动过程就这么结束喽(⿎掌,啪啪啪),接下来就是产⽣随机数了
责任作文800字第三步:
系统会在空⽩的地⽅随即出现⼀个数字⽅块,系统给予的数字⽅块不是2就是4
这玩意⼉挺简单的,我们可以让系统随机⽣成⼀个坐标地址,然后我们再检验这个坐标地址内的数字是否为0。如果为0,就随机填⼀个2或4进去,如果不为0,那咱们就再随机⽣成⼀个坐标地址,然后接着检验,直到这个坐标内的数字为0
代码如下:
def mainmap(map_list):
count = 0
while (count < 1):
a = r.randint(0, 3)
女人大b
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)可以移动了,那么游戏就判定为失败。

本文发布于:2023-07-23 20:39:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1113291.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数字   游戏   判定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图