Python 完成2048
来源:互联网 发布:可牛拍照软件下载 编辑:程序博客网 时间:2024/06/10 08:47
__file__ = '2048.py'__author__ = 'Jerry Liu'__date__ = '2016-04-19'import random_totalscore =0v = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]def display(v, score): randomNum() print('{0:4} {1:4} {2:4} {3:4}'.format(v[0][0], v[0][1], v[0][2], v[0][3])) print('{0:4} {1:4} {2:4} {3:4}'.format(v[1][0], v[1][1], v[1][2], v[1][3])) print('{0:4} {1:4} {2:4} {3:4}'.format(v[2][0], v[2][1], v[2][2], v[2][3])) print('{0:4} {1:4} {2:4} {3:4}'.format(v[3][0], v[3][1], v[3][2], v[3][3])) print('Total score ', score)#初始化def init(v): ''' 随机分布网格值 ''' for i in range(4): v[i] = [random.choice([0, 0, 0, 2, 2, 4]) for x in v[i]]# 删除0def align(vList, direction): for i in range(vList.count(0)): vList.remove(0) zeros = [0 for x in range(4 - len(vList))] if direction == 'left': vList.extend(zeros) else: vList[:0] = zeros# 随机2、4 添加到0的位置def randomNum(): count = getZeroCount() if count > 0: num = random.choice([2, 2, 2, 2, 4]) # 随即一个位置 ind = random.randrange(1, count+1) # 将这个位置的值设置新num n = 0 for i in range(4): for j in range(4): if v[i][j] == 0: n += 1 if n == ind: v[i][j] = num print(i, j, num) return# 计算零的个数def getZeroCount(): n = 0 for q in v: n += q.count(0) return n# 计算def compute(vlist, direct): align(vlist, direct) addscore = 0 if direct == 'left': for i in [0,1,2]: if vlist[i] == vlist[i+1] and vlist[i+1] != 0: vlist[i] *= 2 vlist[i+1] = 0 addscore += vlist[i] else: for i in [3, 2, 1]: if vlist[i] == vlist[i - 1] and vlist[i - 1] != 0: vlist[i] *= 2 vlist[i - 1] = 0 addscore += vlist[i] return addscore# 左移def left(): _totalscore = 0 for row in range(4): _totalscore += compute(v[row], 'left')# 右移def right(): _totalscore = 0 for row in range(4): _totalscore += compute(v[row], 'right')# 上移def up(): _totalscore = 0 for col in range(4): # 列转行,上为左 vList = [v[row][col] for row in range(4)] _totalscore += compute(vList, 'left') # 从处理后的列表中的数字覆盖原来矩阵中的值 for row in range(4): v[row][col] = vList[row]# 下移def down(): _totalscore = 0 for col in range(4): # 列转行,下为右 vList = [v[row][col] for row in range(4)] _totalscore += compute(vList, 'right') # 从处理后的列表中的数字覆盖原来矩阵中的值 for row in range(4): v[row][col] = vList[row]def handler(): direct = input('enter w a s d, ') if direct in ['W', 'w']: up() elif direct in ['S', 's']: down() elif direct in ['a', 'A']: left() elif direct in ['d', 'D']: right() else: print('命令错误。')# 判断游戏是否结束def isGameOver(): if getZeroCount() > 0: return False else: # 判断是否可以移动 for row in range(4): result = isListOver(v[row]) if not result: return False for col in range(4): # 列转行,下为右 vlist = [v[row][col] for row in range(4)] result = isListOver(vlist) if not result: return False return True# 判断数据是否可以继续移动def isListOver(vlist): for i in [0, 1, 2]: if vlist[i] == vlist[i + 1] and vlist[i + 1] != 0: return False return Trueif __name__ == '__main__': display(v, 0) flag = isGameOver() while not flag: handler() display(v, _totalscore) flag = isGameOver() else: print('game over')
0 0
- Python 完成2048
- python完成pie小游戏
- python实现渲染完成关机
- SICP Python 描述 翻译完成
- 用python字典完成登陆
- 用Python完成代码计时器
- Python 2.4 Tutorial 简体中文版初译完成!
- Python来完成简单图像处理任务
- 用python完成常见的任务
- 有效使用Python完成信息论作业
- 机器学习 python实例完成—决策树
- 用Python完成猜随机数的游戏
- 一行Python代码完成并行任务
- 使用python完成知乎模拟登陆
- python next()完成后引发StopIteration异常
- 使用Python完成双色球的程序
- 用python完成简单面试题
- 用python完成简单面试题2
- 题目1522:包含min函数的栈
- 结合源码探讨Android距离传感器亮灭屏机制
- 泛型,学习2016-4-19
- jquery通过正则表达式校验常用的数据格式 如:电话号码、IP、QQ、字母数字等
- WebLogic的部署模式:开发模式、生产模式区别及相互转换的方法
- Python 完成2048
- iOS 6.0+ Autolayout — UITableViewCell 高度调整
- 依赖注入那些事
- 单实例 oracle 自启动
- 80. Remove Duplicates from Sorted Array II
- ZZULIOJ 1881: 蛤玮的机房【并查集】
- setOnPageChangeListener 过时了怎么办?
- 数据一致性-分区可用性-性能——多副本强同步数据库系统实现之我见
- Hinbernate ManyToMany JPA注解