python综合案例

2023-10-27

综合案例

1.需求分析

2048游戏是一款数字益智游戏,如图所示。具体游戏规则如下:
在这里插入图片描述
① 玩家每次可以选择上下左右其中一个方向移动。
② 每移动一次,所有数字方块都会往移动的方向靠拢。
③ 相同数字方块在靠拢时会相加。
④ 每次移动完成后,系统会在空白的方块中随机添加2或4。
⑤ 当所有方块中填满数字并不能相加时,游戏结束。
⑥ 玩家的得分为相同数字之和的累加。
根据上述游戏规则,该游戏需实现以下功能:
① 显示游戏界面。
② 上下左右移动。
③ 添加随机数字。
④ 游戏是否结束。

为方便读者理解各功能之间的联系,此处画出程序的流程图,如图所示。
在这里插入图片描述
2.程序设计

对程序中各功能有了初步了解后,本节将带领大家实现每个功能。首先,程序需选用合适的数据结构,由于游戏可以看成由4×4个数字组成,每移动一次,就是对这4×4个数字进行操作,因此数据结构可以选择二维列表(二维列表类似于二维矩阵),具体如下所示:
在这里插入图片描述
通过print()函数打印该二维列表,则输出结果如下所示:
在这里插入图片描述
二维列表中的数据需显示在4×4方块中,具体实现如下所示:
在这里插入图片描述
其中,第2行与第22行输出带颜色的字符串,其语法格式如下:
在这里插入图片描述
显示方式、前景色与背景色都用数字表示,具体如下两表所示。
在这里插入图片描述
在这里插入图片描述
ifZero ()函数的实现如下所示:
在这里插入图片描述
其中,若参数s为0,则返回空字符,否则返回参数s。

此时,只需在上述界面的基础上再随机生成两个数(2或4)就可以构成初始界面,具体如下所示:
在这里插入图片描述
程序调用init()函数生成初始界面,如图所示。
在这里插入图片描述
界面显示功能完成后,接下来实现上下左右功能,它是整个游戏的核心功能。由于上下左右4个方向的具体实现代码类似,此处只讲解向右移动的实现,具体如下所示:
在这里插入图片描述
每次执行移动操作后,程序中需自动添加一个随机数(2或4)并重新输出显示界面,具体如下所示:
在这里插入图片描述
此处只需将随机数添加到对应矩阵不为0的元素处,再调用display()函数显示界面即可。

最后,程序需检查游戏是否结束,具体如下所示:
在这里插入图片描述
上述代码使用for循环遍历二维矩阵中每个元素,若存在某个元素为0或存在某个元素可以与周围的元素相加时,游戏未结束;否则,游戏结束。

3.代码实现

前面介绍了2048游戏中必须实现的各种功能,接下来讲解如何将这些功能组合成程序流程,具体如下所示:
在这里插入图片描述
上述代码使用while循环与if-elif-else语句来控制整个程序的流程。

接下来编写代码测试整个程序,具体如下所示:
在这里插入图片描述
至此,整个程序编写完成。

4.效果实现

程序代码编辑完成,如果没有错误,便可运行。本节演示程序运行效果。

a.初始界面

程序运行后,首先进入初始界面,如图所示。
在这里插入图片描述
b.上移

当输入W时,游戏中所有数字会向上移动。移动过程中,相同数字方块在靠拢时会相加,并将结果与得分相加。移动完成后,程序会随机添加一个数字,如图所示。
在这里插入图片描述
3. 下移

当输入S时,游戏中所有数字会向下移动。移动过程中,相同数字方块在靠拢时会相加,并将结果与得分相加。移动完成后,程序会随机添加一个数字,如图所示。
在这里插入图片描述
4. 左移

当输入A时,游戏中所有数字会向左移动。移动过程中,相同数字方块在靠拢时会相加,并将结果与得分相加。移动完成后,程序会随机添加一个数字,如图所示。
在这里插入图片描述
5. 右移

当输入D时,游戏中所有数字会向右移动。移动过程中,相同数字方块在靠拢时会相加,并将结果与得分相加。移动完成后,程序会随机添加一个数字,如图所示。
在这里插入图片描述
6. 退出游戏

当输入Q时,程序退出游戏,如图所示。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python综合案例 的相关文章

随机推荐

  • VBA 向文件写入编码为UTF-8的数据

    Sub Test 需要引入 ActiveX Data Objects ADO 组件 即 Microsoft ActiveX Data Objects 2 5 Library 或者 Microsoft ActiveX Data Objects
  • qt右键弹出菜单的一些实现方法

    在qt中 关于右键弹出菜单 有几种实现方法 1 在窗口初始化时 修改指定控件的右键菜单策略 然后把右键点击信号和某个槽函数连接 设置btnNew按钮的右键菜单策略 ui gt btnNew gt setContextMenuPolicy Q
  • 有趣的telnet站点

    这个都能做电影 不知道他们花了多长的时间 telnet towel blinkenlights nl 下面这个是其他的一些站点 我没有看过 留个链接 http www telnet org htm places htm
  • 记第一次拆机

    两周前的周日 也不知道抽了什么风萌生了拆笔记本电脑的想法 可能是由于从购买之后风扇都没清理过的原因吧 笔记本电脑品牌联想 型号G480 2013年大一暑假购置的机子 也就是普通的上网本吧 玩游戏确实有点卡 比如剑灵 好了 言归正传 下面开始
  • 卡西欧计算机的闹铃怎么取消,卡西欧g-shock怎么关闹钟

    卡西欧g shock怎么关闹钟 连续按mode按键 通常是左下角按键 直至液晶屏幕出现al1 al2 al3等等字样 然后 第二显示屏会显示 on 按 adjust 就可以改为 of 就关闭了 卡西欧g shock闹钟怎么设置 1 按MOD
  • 一文搞定Postman(菜鸟必看)

    什么是Postman Postman是一个可扩展的 API 测试工具 可以快速集成到 CI CD 管道中 它于 2012 年作为 Abhinav Asthana 的一个副项目启动 旨在简化测试和开发中的 API 工作流程 API 代表应用程
  • java高并发多线程架构_java架构师指南 高并发和多线程的区别

    高并发和多线程 总是被一起提起 给人感觉两者好像相等 那它们之间究竟有什么区别呢 1 多线程 多线程是java的特性 也是java架构师必须掌握的一项技术 因为现在cpu都是多核多线程的 可以同时执行多个任务 为了提高JVM的执行效率 Ja
  • 搭建Obsidian+picGo+Lsky Pro图床

    搭建Obsidian picGo Lsky Pro图床 0 前言 去年心血来潮买了个小主机 搭建了家庭服务器 安装了PVE系统 散热拉胯 性能不足目前只创建了个黑群晖系统 搭建一个图床 方便日常笔记工作 1 软件 1 1 Obsidian
  • 浅谈App的性能优化

    浅谈App的性能优化 2018 01 02 说到 Android 系统手机 大部分人的印象是用了一段时间就变得有点卡顿 有些程序在运行期间莫名其妙的出现崩溃 打开系统文件夹一看 发现多了很多文件 然后用手机管家 APP 不断地进行清理优化
  • Git第十讲 Git如何正确使用log快速查找内容/提交

    在Git中 你可以使用不同的命令来快速查找指定内容或指定提交 下面我将介绍两种常用的方法 快速查找指定内容 要快速查找包含特定内容的文件或代码行 可以使用 git grep 命令 它类似于常见的 grep 命令 但是专门用于搜索Git仓库中
  • 以太坊交易确认数如何获取

    以太坊和比特币一样 都有一个最长链的概念 因此也有一个交易确认数的概念 当一个以太坊交易所在区块被新加入区块链时 该交易的确认数为1 之后每增加一个区块 该交易的确认数加1 显然 一个以太坊交易的确认数越多 就意味着该交易在区块链中埋的越深
  • html css js实现抽奖,原生(纯)js+html+css实现移动端抽奖转盘系统

    这是我前个月使用纯javascript html写出的一个抽奖转盘系统 按理来说 我应该在当时做完这个小系统 就应该立即写bike总结才对 但是本人之前没有在网上写博客的习惯 平时总结更加习惯写在纸上 但是现在发现卸载网上可能更好 博客中有
  • 【第26篇】Swin Transformer

    文章目录 摘要 1 简介 2 相关工作 3 方法 3 1 整体架构 3 2 基于移动窗口的自注意力 3 3 架构变体 4 实验 4 1 ImageNet 1K 上的图像分类 4 2 COCO 上的物体检测 4 3 ADE20K 上的语义分割
  • 2. ZK客户端与服务端建立连接的过程(基于NIO)

    ZK客户端与服务端建立连接的过程 引例 1 启动SendThread 2 状态初始化 3 开始连接 4 处理服务端连接响应 5 流程图 在上一篇 客户端启动源码分析 文章中讲到了客户端会使用两个线程 SendThread和EventThre
  • C#知识系列:nameof 运算符

    插眼 总结 获取变量名 避免因为变量名而声明字符串 参考 官方文档 https docs microsoft com zh cn dotnet csharp language reference operators nameof 其他参考
  • Qt 信号与槽 传输自定义结构体跨线程访问程序异常退出问题

    Qt 信号与槽 传输自定义结构体跨线程访问程序异常退出问题 在使用自定义结构体的时候发现在同一个线程里面的信号发送和槽函数访问使用是正常的 当跨线程信号与槽连接访问自定义结构体时发生访问异常程序异常退出 通过尝试找到问题 解决办法如下 自定
  • 基于STM32f103c8t6的测温枪设计过程

    体温枪设计 设计流程 一 开发板和模块的介绍 1 STM32F103C8T6开发板 2 MLX90614测温模块 3 TM1650红外数码管 二 硬件连接 1 STM32F103C8T6引脚图 2 MLX90614测温模块连接原理图 3 T
  • 实训报告:C&C++ 结构实训 - 深入学习与实践

    实训报告 C C 结构实训 深入学习与实践 引言 C和C 是广泛应用于软件开发领域的编程语言 它们为开发人员提供了强大的工具和灵活性 本篇文章将围绕 C C 结构实训展开 深入学习并实践其中的关键概念与技术 一 简介 C C 结构实训是一项
  • Spark内存管理

    概述 spark从1 6 0开始内存管理发生了变化 原来的内存管理由StaticMemoryManager实现 现在被称为Legacy 在1 5 x和1 6 0中运行相同代码的行为是不同的 为了兼容Legacy 可以通过spark memo
  • python综合案例

    综合案例 1 需求分析 2048游戏是一款数字益智游戏 如图所示 具体游戏规则如下 玩家每次可以选择上下左右其中一个方向移动 每移动一次 所有数字方块都会往移动的方向靠拢 相同数字方块在靠拢时会相加 每次移动完成后 系统会在空白的方块中随机