python 实现 2048游戏
Python 实现2048游戏
完整代码下载地址:https://download.csdn.net/download/qq_41676952/14939740
效果图:
![](/assets/blank.gif)
![](/assets/blank.gif)
说明:
- 通过控制方向键实现上下左右的移动
- 按下u键回退到上一步,仅支持回退一步
- 按下r键重新开始
- 按下q键出退出游戏
思路:
1.导入必要的依赖包
import os
import keyboard #用于监听键盘按键事件
import random
2.创建地图:
# 创建数组
field = [[random.choice([0, 2, 4]) for j in range(4)] for i in range(4)]
print_field(field)
3.监听键盘事件
# 监测按键
keyboard.hook(fun) # 当有键盘按键事件触发时会调用fun函数
keyboard.wait()
4.处理键盘按键事件
- r 重新开始
- u 撤销上一步
- q 退出
- 方向键控制游戏操作
注:对应的按键可以自定义,在以下代码的对应 出修改即可
def fun(key):""" 检测按键事件 up down left right """# print(key.name)if key.event_type == 'down': if key.name == 'q':# q退出raise('退出游戏!')elif key.name == 'r':# r重新开始for i in range(4):for j in range(4):field[i][j] = random.choice([0, 0, 0, 2, 2, 4])print_field(field) # 更新显示elif key.name == 'u':# u撤销上一步操作for i in range(4):for j in range(4):field[i][j] = field_1[i][j]print_field(field)# 更新输出显示elif key.name in ['left', 'right', 'up', 'down']: # 方向键for i in range(4):for j in range(4):field_1[i][j] = field[i][j]# 按下方向键之后计算新的矩阵process(key.name)# 产生一个随机数字加入fieldcreate_new()# 输出显示print_field(field)
5.按下方向键后计算新的矩阵
- 先进行去零操作,
- 再进行移动计算
以左移为例:矩阵的每一行先进行去零操作,再进行左移动计算,
[2,0,2,4] -> [2,2,4,0] -> [4,4,0,0]
[2,0,0,2] -> [2,2,0,0] -> [4,0,0,0]
[0,0,2,2] -> [2,2,0,0] -> [4,0,0,0]
[2,2,2,2] -> [2,2,2,2] -> [4,4,0,0]
右移、上移、下移 其本质和左移是相同的,在调用 f1(dat) 函数时,对调用数据的方向进行调整一下就可以了
注意 f1(dat) 函数调用时数据的顺序
def zero_filter(dat):"""去除零元素"""temp_dat = [0, 0, 0, 0]k = 0for i in range(4):if dat[i]:temp_dat[k] = dat[i]k = k + 1return temp_datdef f1(dat):"""计算每一行(列)移动后的元素"""dat = zero_filter(dat)if dat[0] == dat[1]:dat[0] = dat[0] + dat[1]if dat[2] == dat[3]:dat[1] = dat[2] + dat[3]dat[2] = 0dat[3] = 0else:dat[1] = dat[2]dat[2] = dat[3]dat[3] = 0else:if dat[1] == dat[2]:dat[1] = dat[1] + dat[2]dat[2] = dat[3]dat[3] = 0else:if dat[2] == dat[3]:dat[2] = dat[2] + dat[3]dat[3] = 0else:passreturn datdef process(key_name):# 计算移动后的矩阵if key_name == 'left':for i in range(4):temp_dat = f1(field[i])for j in range(4):field[i][j] = temp_dat[j]elif key_name == 'right':for i in range(4):temp_dat = f1(field[i][::-1])for j in range(4):field[i][j] = temp_dat[::-1][j]elif key_name == 'up':for j in range(4):temp_dat = []for i in range(4):temp_dat.append(field[i][j])temp_dat = f1(temp_dat)for i in range(4):field[i][j] = temp_dat[i]else:for j in range(4):temp_dat = []for i in range(4):temp_dat.append(field[i][j])temp_dat = f1(temp_dat[::-1])for i in range(4):field[i][j] = temp_dat[::-1][i]
6.产生新的数据
每次移动后都需要在空白的位置产生一个新的数据
def create_new():"""产生一个新的数字 2 或 4 """field_zero = []# 找出field中数字为0的位置for i in range(4):for j in range(4):if field[i][j] == 0:field_zero.append((i, j))if field_zero:index_zero = random.choice(field_zero)field[index_zero[0]][index_zero[1]] = random.choice([2, 4])
7.输出显示
- 控制输出的格式,通过对print函数的参数进行设置,修改终端默认显示的颜色,
- 可通过设置color_dict 设置不同数字的前景色和背景色
color_dict = {0: [30, 40], # 白字 黑底2: [31, 47], # 黑字 白底4: [30, 42], # 黑字 绿底8: [30, 46], # 黑字 青蓝色底16: [37, 44], # 黑字 蓝底32: [37, 41], # 白字 红底64: [37, 45], # 白字 紫红色底128: [30, 43], # 白字 黄底256: [30, 42], # 白字 青蓝色512: [30, 44], # 黑字 蓝底1024: [37, 45], # 黑字 紫红色2048: [37, 40], # 白字 黑底4096: [37, 40], # 白字 黑底8192: [37, 40]} # 白字 黑底def print_field(dat):"""在控制台打印输出"""os.system('cls')print('\n********* 2048 *********\n')for i in range(4):for j in range(4):# 控制不同数字的颜色color_set = '\033[1;{};{}m'.format(color_dict[dat[i][j]][0], color_dict[dat[i][j]][1]) print(color_set, str(dat[i][j]).center(4), end='')color_set = '\033[1;37;40m'print(color_set)
完整代码下载地址:https://download.csdn.net/download/qq_41676952/14939740
python 实现 2048游戏相关推荐
- Python 《Python 实现 2048 游戏》实验报告
74340da14d79fae0a21de03d44699f80b6c624f3.jpg 2048 游戏 wiki:<2048>是一款单人在线和移动端游戏,由19岁的意大利人 Gabrie ...
- 基于python的2048游戏设计_用python写一个2048游戏
self.randomGenerateNumberself.randomGenerateNumber 然后,当玩家按下方向键(↑↓←→)时,这个二维列表要根据玩家的操作指令进行更新,主要分为两个部分: ...
- 【细节呈现】用Python编写2048游戏(命令行版)
本篇博文围绕使用Python开发热门游戏2048 GAME(命令行版本) 代码未做任何优化(原生且随意).全程以面向过程.MVC的设计思想为主.开发环境是Ubuntu系统下的Pycharm 2048是 ...
- python课堂实验_用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。...
标签: 第1节 认识wxpython 第2节 画几个形状 第3节 再做个计算器 第4节 最后实现个2048游戏 实验1-认识wxpython 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名 ...
- python实现2048游戏开发笔记
一.游戏描述 这里省略了(估计来看的人都玩过2048游戏) 二.游戏设计 首先将游戏分解成若干个局部一一实现 (1)输入规则:asdw分别代表左下由上,r为reset,q为退出,其他不执行. (2)输 ...
- 基于python的2048游戏设计_Python经典练习,游戏2048实现思路
今天教大家弄一个Python版-控制台的2048,正好熟悉下Python语法,程序运行效果如下: 程序代码加上注释大概150行左右,利用了一些Python内置数据类型的操作节省了不少代码量.下面说说我 ...
- python编写2048游戏代码_python pygame实现2048游戏
实现2048相对来说比较简单,用4*4的二维数组保存地图,pygame.key.get_pressed()获取键盘操作,详见代码. 效果图 代码 # -*- coding: utf-8 -*- #!/ ...
- python实现2048游戏_python实现一个简单的2048游戏
[Python]代码 # -*- coding: utf8 -*- import random data = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0 ...
- 带你用Python制作超级经典的2048游戏(文末赠书)
名字:阿玥的小东东 学习:Python.C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 2048游戏 ...
最新文章
- 【Unity教程】创建一个完整的驾驶游戏
- 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
- uvalive4840(n*n方阵的最小花费)
- Boost:circular buffer的测试程序
- poj2823 Sliding Window
- 02-合并frame
- python 解决bytes和str之间 出现 TypeError的问题
- C# list导出Excel(二)
- Vijos P1784 数字统计【进制】
- 我的软考高项考试之旅
- ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
- 【locust】locust与jmeter性能对比
- 北京消费扶贫双创中心启用 2000余种特色产品长期展销
- SAP MM库存盘点流程
- 概述-数据建模是什么?
- 漫画 | “道德沦丧”的程序员 !
- Excel leftjoin
- 什么软件测试鞋子真假,教你5招辨别真假Yeezy Boost鞋,真真假假你图啥?
- 隔离幻想游戏的木马广告
- 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)
热门文章
- 平安银行薪资职级表_超全|阿里、腾讯、百度…这些大厂2020年薪资和职级一览...
- QEMU/KVM虚拟机Win11黑屏问题解决
- BIGEMAP教您如何通过3D-MAX制作三维地图模型
- 【SolidWorks插件】 凯元工具(KYTool)
- 腾讯CDC团队:前端异常监控解决方案
- 【对讲机的那点事】450MHz模拟无线列调的工作原理(连载三)
- 网站上禁止转载的文字,怎么复制文字?(不包括pdf里的文字)
- 百度超级搜霸远程代码执行漏洞
- jQuery入门基本语法选择器
- win10专业版无法找到便签文件存储位置的解决方法