一、游戏描述
这里省略了(估计来看的人都玩过2048游戏)
二、游戏设计
首先将游戏分解成若干个局部一一实现
(1)输入规则:asdw分别代表左下由上,r为reset,q为退出,其他不执行。
(2)输出界面:

def display():  for i in range(4):print('+----+----+----+----+')for j in range(4):print('| %3s'%(notzero(matix[i][j])),end = '')print('| ')print('+----+----+----+----+')

(3)初始化
(4)上移
(5)下移
(6)左移
(7)右移
(8)判断游戏是否结束
三、代码

import random
#score是一个全局变量,记录分数
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():  for i in range(4):print('+----+----+----+----+')for j in range(4):print('| %3s'%(notzero(matix[i][j])),end = '')print('| ')print('+----+----+----+----+')def init():
# 初始化矩阵initNumFlag = 0while 1:k = 2 if random.randrange(0, 10) > 1 else 4 # 随机生成 2 或 4s = divmod(random.randrange(0, 16), 4)# 生成矩阵初始化的下标if matix[s[0]][s[1]] == 0:# 只有当其值不为0的时候才赋值,避免第二个值重复matix[s[0]][s[1]] = kinitNumFlag += 1if initNumFlag == 2:breakdisplay()def addRandomNum():#处理完移动后添加一个新的随机数while 1:k = 2 if random.randrange(0, 10) > 1 else 4s = divmod(random.randrange(0, 16), 4)#函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。if matix[s[0]][s[1]] == 0:matix[s[0]][s[1]] = kbreakdisplay()def check():#检查游戏是否结束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# true就是没有结束else:return Falsedef moveRight():# 向右移动处理函数global scorefor 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] = 0elif matix[i][j] == matix[i][k]:matix[i][j] *= 2score += matix[i][j]#将当前数作为score加上matix[i][k] = 0breakaddRandomNum()def moveUp():global scorefor 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] = 0elif matix[k][i] == matix[j][i]:matix[j][i] *= 2score += matix[j][i]matix[k][i] = 0breakaddRandomNum()def moveDown():global scorefor 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] = 0elif matix[j][i] == matix[k][i]:matix[j][i] *= 2score += matix[j][i]matix[k][i] = 0breakaddRandomNum()def moveLeft():global scorefor 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] = 0elif matix[i][j] == matix[i][k]:matix[i][j] *= 2score += matix[i][j]matix[i][k] = 0breakaddRandomNum()def main():print("       \033[33;1mWelcome to the Game of 2048!\033[0m")flag = Trueinit()while flag:#循环的标志print('               \033[33;1m You Score:%s' % (score))d = input(' (↑:w) (↓:s) (←:a) (→:d),q(uit) :\033[0m')#不断处理用户输入if d == 'a':moveLeft()if not check():print('游戏结束')flag = False#游戏结束的话直接退出elif d == 's':moveDown()if not check():print('游戏结束')flag = Falseelif d == 'w':moveUp()if not check():print('游戏结束')flag = Falseelif d == 'd':moveRight()if not check():print('游戏结束')flag = Falseelif d == 'q':# 退出breakelse:# 对用户的其他输入不做处理passif __name__ == '__main__':main()

python实现2048游戏开发笔记相关推荐

  1. Python 《Python 实现 2048 游戏》实验报告

    74340da14d79fae0a21de03d44699f80b6c624f3.jpg 2048 游戏 wiki:<2048>是一款单人在线和移动端游戏,由19岁的意大利人 Gabrie ...

  2. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们<Visual C++游戏开发>专栏的游戏引擎导论,也 ...

  3. 从零开始游戏开发笔记(0):前期准备

    从零开始游戏开发笔记(0):前期准备(持续更新中) 一.开发软件 1.1 游戏引擎 1.2 美工软件 1.3 音乐软件 1.4 插件 二.教程.素材 1.1 学习教程 1.2 素材网站 三.其他技能 ...

  4. 游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057 作者:毛星云(浅墨 ...

  5. 《Python和Pygame游戏开发指南》——2.16 pygame.display.update()函数

    本节书摘来自异步社区<Python和Pygame游戏开发指南>一书中的第2章,第2.16节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区" ...

  6. 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理

    本系列文章由zhmxy555编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7405479 作者:毛星云    邮箱: happyl ...

  7. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  8. 《Python和Pygame游戏开发指南》——1.12 图书中的文本折行

    本节书摘来自异步社区<Python和Pygame游戏开发指南>一书中的第1章,第1.12节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区" ...

  9. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

最新文章

  1. 【windows】cmd中的help无法使用的解决方法
  2. 栈与队列6——生成最大窗口值数组
  3. docker 命令每次都需要使用sudo来执行,不太方便,如何去掉sudo?
  4. linux遍历文件目录 链表形式
  5. oracle adf_Fn函数来构建Oracle ADF应用程序
  6. PKU 学生反馈 2009 - 4
  7. python tkinter_Python编程GUI库之tkinter教程——Label篇
  8. 前沿 | NVIDIA PyTorch库让3D深度学习研究更简单!
  9. 2 _RESETFUL介绍
  10. android 获取sd卡视频文件名,android – 如何获取SD卡上的视频列表
  11. oracle显示linesize,SQL Plus输出结果的格式化(linesize、pagesize)
  12. javascript 自建立对象
  13. c# webform js文件获取客户端控件,后台cs获取前台客户端控件的值,c#和js的交互...
  14. 2017美团网易360部分笔试题
  15. python 调整字体大小
  16. 《卓有成效的管理者》 读书摘要
  17. 训练过程曲线分析:acc/loss/val_acc/val_loss【转载】
  18. 专升本C语言试题分析(四)
  19. [Python] 实现文本进度条
  20. 基于R语言非参数统计Brown-Mood中位数检验和Wilcoxon-Mann-Whitney秩和检验

热门文章

  1. 春天的雨是一副五彩斑斓的画卷
  2. 无框架的php cms审计,通读审计之DOYOCMS
  3. 大师教你不用钱也能买大楼!!
  4. comsol中,查看材料库中材料参数的办法
  5. 把电脑屏幕背景设置为绿色,真的能护眼吗?
  6. kubernetes 之 ingress-nginx 概述
  7. 网络可视化 | 虹科网络监控软件解决方案(二)-- 网络探针nProbe
  8. 预推免复习之英语口试
  9. 电脑e盘不见了怎么恢复?6个步骤找回e盘
  10. 今天看到了一个关于学习英语的帖子,学习下