Python 实现2048游戏

完整代码下载地址:https://download.csdn.net/download/qq_41676952/14939740

效果图:

说明

  • 通过控制方向键实现上下左右的移动
  • 按下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游戏相关推荐

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

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

  2. 基于python的2048游戏设计_用python写一个2048游戏

    self.randomGenerateNumberself.randomGenerateNumber 然后,当玩家按下方向键(↑↓←→)时,这个二维列表要根据玩家的操作指令进行更新,主要分为两个部分: ...

  3. 【细节呈现】用Python编写2048游戏(命令行版)

    本篇博文围绕使用Python开发热门游戏2048 GAME(命令行版本) 代码未做任何优化(原生且随意).全程以面向过程.MVC的设计思想为主.开发环境是Ubuntu系统下的Pycharm 2048是 ...

  4. python课堂实验_用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。...

    标签: 第1节 认识wxpython 第2节 画几个形状 第3节 再做个计算器 第4节 最后实现个2048游戏 实验1-认识wxpython 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名 ...

  5. python实现2048游戏开发笔记

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

  6. 基于python的2048游戏设计_Python经典练习,游戏2048实现思路

    今天教大家弄一个Python版-控制台的2048,正好熟悉下Python语法,程序运行效果如下: 程序代码加上注释大概150行左右,利用了一些Python内置数据类型的操作节省了不少代码量.下面说说我 ...

  7. python编写2048游戏代码_python pygame实现2048游戏

    实现2048相对来说比较简单,用4*4的二维数组保存地图,pygame.key.get_pressed()获取键盘操作,详见代码. 效果图 代码 # -*- coding: utf-8 -*- #!/ ...

  8. python实现2048游戏_python实现一个简单的2048游戏

    [Python]代码 # -*- coding: utf8 -*- import random data = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0 ...

  9. 带你用Python制作超级经典的2048游戏(文末赠书)

    名字:阿玥的小东东 学习:Python.C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 2048游戏 ...

最新文章

  1. 【Unity教程】创建一个完整的驾驶游戏
  2. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
  3. uvalive4840(n*n方阵的最小花费)
  4. Boost:circular buffer的测试程序
  5. poj2823 Sliding Window
  6. 02-合并frame
  7. python 解决bytes和str之间 出现 TypeError的问题
  8. C# list导出Excel(二)
  9. Vijos P1784 数字统计【进制】
  10. 我的软考高项考试之旅
  11. ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
  12. 【locust】locust与jmeter性能对比
  13. 北京消费扶贫双创中心启用 2000余种特色产品长期展销
  14. SAP MM库存盘点流程
  15. 概述-数据建模是什么?
  16. 漫画 | “道德沦丧”的程序员 !
  17. Excel leftjoin
  18. 什么软件测试鞋子真假,教你5招辨别真假Yeezy Boost鞋,真真假假你图啥?
  19. 隔离幻想游戏的木马广告
  20. 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)

热门文章

  1. 平安银行薪资职级表_超全|阿里、腾讯、百度…这些大厂2020年薪资和职级一览...
  2. QEMU/KVM虚拟机Win11黑屏问题解决
  3. BIGEMAP教您如何通过3D-MAX制作三维地图模型
  4. 【SolidWorks插件】 凯元工具(KYTool)
  5. 腾讯CDC团队:前端异常监控解决方案
  6. 【对讲机的那点事】450MHz模拟无线列调的工作原理(连载三)
  7. 网站上禁止转载的文字,怎么复制文字?(不包括pdf里的文字)
  8. 百度超级搜霸远程代码执行漏洞
  9. jQuery入门基本语法选择器
  10. win10专业版无法找到便签文件存储位置的解决方法