前些天在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教程资料!还有老司机解答哦!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

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

  1. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  2. 简单20行python代码_用 20 行 python 代码实现人脸识别!Python实现就是这么简单!...

    今天给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提取.识别.操作人脸. 基于业内领先的 C++ 开源库 dlib 中的深度学习模 ...

  3. python游戏代码五子棋_用20行Python代码实现2048小游戏,你会吗?

    前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...

  4. python自动生成鸡汤文_用20行Python代码生成鸡汤,打造AI咪蒙指日可待。

    作者:Ramtin Alami "Don't think of the overwhelming majority of the impossible." "不要去想不可 ...

  5. java 2048游戏_JAVA2048游戏 本课程设计是基于java语言的2048小游戏设计 联合开发网 - pudn.com...

    JAVA2048游戏 所属分类:游戏 开发工具:Java 文件大小:789KB 下载次数:4 上传日期:2020-11-23 10:57:11 上 传 者:滴滴滴大萌 说明:  本课程设计是基于jav ...

  6. 50行python游戏代码_使用50行Python代码从零开始实现一个AI平衡小游戏

    使用50行Python代码从零开始实现一个AI平衡小游戏 发布时间:2020-10-23 09:26:14 来源:脚本之家 阅读:74 集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何 ...

  7. 50行的python游戏代码_使用50行Python教AI玩运杆游戏

    编译:yxy 出品:ATYUN订阅号 嗨,大家好!今天我想展示如何使用50行Python代码教一台机器来平衡杆!我们将使用标准的OpenAI Gym作为我们的测试环境,并只使用numpy创建我们的智能 ...

  8. python 车牌识别简单_简单30行Python代码让你玩转YOLO目标识别检测!

    YOLO是一种实时目标检测算法,与faster R-CNN不同的是,YOLO不是过多的注重物体定位的精度,而是着重于速度和物体种类的识别.在实际应用中,实时性是目标检测中非常重要的,例如对于一辆自动驾 ...

  9. python回测代码_只用3行Python回测你的交易策略

    作者|Lorenzo Ampil 编译|VK 来源|Towards Data Science 自从我开始学习投资,我接触了不同的股票分析方法-技术分析和基本面分析.我甚至读过很多关于这些技巧的书和文章 ...

最新文章

  1. Xcode 6.x 上开发APP 兼容 iOS7
  2. linux hdparm 测试磁盘io,hdparm测试硬盘性能
  3. 框架:Spring事务的隔离级别
  4. 【Java报错】GP数据库 function point(unknown) is not unique.Could not choose a best candidate function 问题解决
  5. 1119:矩阵交换行
  6. MySQL+Tomcat+JVM,看完还怕面试官
  7. vue 引入json地图_VUE中通过Echarts引入地图
  8. 苏宁易购唱共享之歌,共享干衣、共享数据、共享快递盒为哪般?
  9. 杭州师范大学计算机信息学院调剂,考研调剂信息:杭州师范大学信息科学与工程学院...
  10. cookie、session、sessionid 与jsessionid之间的关系
  11. protues仿真——元件改造
  12. Unity 改变下载资源商店中资源默认路径的方法
  13. JavaCV本地视频流通过帧图片添加文本进行字幕合成
  14. Molten 功能简介以及使用指南
  15. 白色恋人--18首扣人心弦的经典情歌
  16. 【Scratch-外观模块】背景切换指令
  17. 常耀俊老师经典《非人力资源经理的人力资源管理》课程
  18. ffmpeg所有发布版本下载地址
  19. 2月22日 星期三 杨祎祾
  20. Windows无法安装到这个磁盘。这台计算机的硬件可能不支持启动到此磁盘。请确保在计算机的bios菜单中启用了磁盘的控制器

热门文章

  1. 官方数据:5次SDN大会的背后
  2. MVC3学习:将excel文件导入到sql server数据库
  3. Ubuntu 12.04 下安装 VirtualBox 及虚拟机winxp的安装
  4. python中options类_python中的optionParser模块
  5. 免费Windows系统服务器,免费试用人数太多,Windows 365云电脑服务器炸了,官方紧急暂停...
  6. stm32cubemx生成不了keil工程文件_STM32CubeMX系列教程03_创建并生成代码工程
  7. 摘要注释_《间架结构摘要九十二法》高清图片+注释 爱书法的朋友值得收藏
  8. scala mysql bit_Scala连接mysql数据库
  9. c语言黑白棋运行结果,黑白棋c语言代码
  10. 人工神经网络发展历史及算法应用综述