当前位置: 首页 > news >正文

C语言实战 | “俄罗斯方块”游戏重构

 之前的游戏中,为了方便大家掌握框架,在“贪吃蛇”游戏中使用了大量的全局变量。全局变量空间利用率不高,全局变量在程序的执行过程中一直占用存储单元,而不是仅在需要时才开辟单元。另外,全局变量降低了通用性,程序执行时还需要依赖全局变量。例如,显示“食物”和“球”的函数,都是将单个变量的数据显示在屏幕上,并且显示“贪吃蛇”“球拍”的函数实际上都是遍历一维数组的元素,然后根据存储的位置信息,显示在屏幕上。但是因为函数中使用到全局变量,这些函数无法通用。如果将全局变量改成参数传递,将会提高代码的通用性。

01、综合案例

例如,在“俄罗斯方块”“打砖块”和“飞机大战”等游戏中都有按键控制物体上、下、左、右运动,如果函数中使用全局变量,就无法直接使用,只能每个游戏再重新设计一遍。如果使用参数,就能非常好地解决这个问题,提高代码的重用性。代码如下:

 

去掉全局变量,改用函数的参数传递数据,会发现按键控制物体运动的函数,可以直接在多个游戏中使用,而不需要做任何修改,大大提高了代码的重用率。所以,函数中尽量避免使用全局变量,这样使函数像黑盒子一样,隐藏内部实现细节。

重构的每个步骤都很简单,例如修改变量的命名、删除多余的一句代码或修改一条语句。这些小改变看起来微不足道,但是聚沙成塔,累积起来就能形成质变,从根本上改善程序的质量。

 

 

相关文章:

  • Java部分复习笔记整理
  • springboot交流论坛网站-计算机毕业设计源码00304
  • [Gstreamer] 消息处理handler的设置
  • ES6面试题——var,let,const的区别
  • 阿里云centos7.9 挂载数据盘到 www目录
  • 邮件发送失败DKIM报错问题排查解决的方案?
  • Python爬虫实作篇
  • STM32MP135裸机编程:使用软件触发硬件复位
  • Android系统system.exit(10);里面10代表的涵义,以及其他可以赋值数字可以是多少?
  • 如何使用PHP根据输入文字动态调整图片尺寸?
  • 数据库。
  • IDEA 一键部署Docker
  • Unity动画系统(2)
  • Zookeeper底层原理
  • 【Linux】虚拟机安装 openEuler 24.03 X86_64
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • ESLint简单操作
  • Facebook AccountKit 接入的坑点
  • mongodb--安装和初步使用教程
  • 多线程 start 和 run 方法到底有什么区别?
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 我有几个粽子,和一个故事
  • Java数据解析之JSON
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • linux 淘宝开源监控工具tsar
  • 阿里云API、SDK和CLI应用实践方案
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (3) cmake编译多个cpp文件
  • (4) PIVOT 和 UPIVOT 的使用
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (搬运以学习)flask 上下文的实现
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (七)Java对象在Hibernate持久化层的状态
  • (三)elasticsearch 源码之启动流程分析
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)scrum常见工具列表
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net CHARTING图表控件下载地址
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 药厂业务系统 CPU爆高分析
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @Builder用法
  • @EnableAsync和@Async开始异步任务支持
  • [20150707]外部表与rowid.txt
  • [APUE]进程关系(下)