6、俄罗斯方块(一)建模

失败是成功之母,伴随着成功出现的还有骄傲。经过DOS门、炮弹飞机和音乐演奏等等事件,木鸿飞渐渐地被胜利冲昏了头脑,把高斯成为数学王子的故事直接嵌套在自己的身上,误以为自己成了编程王子,于是乎他作了一个疯狂的决定:设计俄罗斯方块游戏程序。

按说木鸿飞已经具备了一定的编程知识与能力,应该可以独立设计了。不过此时此景作这个选择,的确有的急功近利,至少有三座大山摆在面前:其一,木鸿飞缺乏编程的系统学习,用现在一句流行话来说,叫做“驾校除名,自学成才”,均属于恐怖的新手类型。其二,木鸿飞必须独立设计俄罗斯方块,前几次程序都可以从书上照抄,比如炮打飞机只要照书打字即可,而音乐演奏程序也仅仅是修改一些数据,但本次不同,必须独立完成开始系统分析,每一个函数,每一个代码都必须自己设计,一一调试通过。其三,木鸿飞缺乏时间,系统分析、程序设计、代码调试,都需要大量的时间,但是高中生涯早已排的满满当当的,必须继续挤压时间。

当然,木鸿飞向俄罗斯方块发起进攻也是有所倚仗的,这出自于他对程序强大的直觉,俄罗斯方块在他眼中,只不过是两个二维数组,其中一个小的二维数组在另一个大的二维数组中移动。

“使用一个4×4的二维数组表示正在掉落的方块,一个10×20的二维数组表示整个方块可以移动的区域,使用1表示有方块,0表示没有方块。只要明白了这个,俄罗斯方块已经成功了一半。”面对导弹等人咨询时,木鸿飞如是说。

多年以后,木鸿飞明白了这种描述方法叫做俄罗斯方块游戏的“模型”,设计这个模型的过程叫做“建模”,也就是透过程序缤纷复杂的表象去抓住实质。比如貌美如花的女子在佛法高深的大师眼中不再是人类,而是一具具粉色的骷髅;汽车在物理学者眼中不再是汽车,而是一具同时制动力、摩擦力和空气阻力的物体;牛在庖丁眼中不再是生物,而是一根根骨头与肌肉的混合物。同理俄罗斯方块在木鸿飞眼中也不是一个游戏,而是两个二维数组,其中一个大而固定,另一个小却在大二维数组中移动。

这就是建模思想,一个计算机编程者必须具备的思想。当登录风靡世界的QQ类游戏时,你必须联想到服务器——客户机模型,此时登录的PC机正作为客户机向QQ服务器进行SOCKET通信。当游玩Windows中自带的扫雷游戏时,你必须将之建模为二维数组,其元素值为‘X’时表示该格有地雷,为数字时表示周围的地雷数目。当进行麻将游戏时,你必须立刻浮现出一维数组,其元素使用不同的数字描述不同的麻将牌,例如1~9表示“万”,11~19表示“条”,21~29表示“筒”等。

其实建模思想并不高深也并不复杂,大家在生活中可能直觉不自觉的进行了建模。有一位街头霸王资深玩家,他充分地运用了建模思想描述班级篮球赛,让我们看看吧:

赤木刚宪同学上场了,赤同学身体结实强壮,估计生命值可达350。樱木花道同学也上场了,他打着哈欠,明显睡眠不足,疲劳度60。

流川枫同学接到球,快速运过中场,三步上篮,球进了,得两分,但是流同学的体力值也减少了3个点。

樱木花道同学抢到球,跳起灌篮,可惜太高了,头撞到篮板上,呵呵,樱同学弹跳力100,体力100,可惜技巧只有50。

哇塞,樱木花道与肌肉男打了起来,樱同学战斗力1000,肌肉男只有800,明显不是樱同学的对手。

……

虽然以上内容纯属搞笑,如有雷同实属巧合,但是却也不乏为建模的最好实例。

不妨将人们建模的能力称之为建模感,建模感直接决定了编程者在程序之路上前进的距离。有人似乎相当有天赋,只一眼就洞悉程序的模型。有人似乎却比较迟钝,无论如何也理解不要程序的内涵。还有些同学虽然初次接触计算机建模能力不足,但通过训练可以学习建模技巧、提升建模能力。木鸿飞很幸运,他有着超乎寻常的计算机建模感觉,任何程序都能在第一眼就能寻找到最佳的模型,他对计算机的疯狂热爱和疯狂编程反过来又加强了这种建感觉。

大学期间,木鸿飞虽然游戏水平不高,却经常对大家热玩的游戏指指点点,指点的内容都是关于如何游戏建模的,仿佛该游戏就是他亲自设计的一般。于是有无聊好事的寝室同学使用整型数值建模“建模感”,取值100为最高,并为年级所有编程高手排名,仿百晓生设置编程榜,“木鸿飞的建模感达99,黑榜排名第一。”比如寝室里曾经流行玩耍“雷电”,木鸿飞也乐在其中,自然不忘使用特殊的视角评论一番:

“玩家飞机、对手飞机和坦克、固定物体以及子弹等都可以建模为一个对象,有很多属性,比如整型描述的生命值,整型描述的速度等。”

“部分飞机击打一次就可以消灭,部分飞机则需要击打多次。系统肯定为每个飞机设定了整型的生命值,为每个子弹设计了整型的破坏值。假设生命值为x,破坏值为y,如果子弹打中飞机,则飞机生命值x更换为x-y,即打中时执行语句:x=x-y,此后判断x取值,如果小于等于0,则飞机摧毁。”

“系统设置了一个定时器,每个间隔单元内,所有对象均执行一步,比如子弹飘移一个,坦克移动一格,玩家飞机则接收输入并作出相应处理等。”

“大家看,当玩家的飞机移动时,子弹会改变方向,向玩家移动。这里面肯定加入了人工智能,子弹可以根据玩家位置自动调整前进方向。这种调整不能太明显,否则游戏难度太大,大家都会望而止步,破坏了游戏的可玩性。当然也不能不调整,否则游戏难度太小,破坏了游戏的耐玩度。”

“……”

木鸿飞是全班唯一的系统分析师,也是全国为数不多的系统分析师之一,同学们都认为大学时期独特的游戏视角成就了木鸿飞的系分之梦,只是木鸿飞是如何知道这种游戏建模训练方法的呢?

“我没有精力编写所有的程序,甚至有一段时间我连电脑都没有,但是我真的特别喜欢编程,尤其是编写游戏程序,怎么办?我只有设计每个游戏的模型,思索模型的优缺点,以此满足编程的欲望。当然我也会从中选取一两个工作量相对比较小的进行编码。”随着接触游戏的增多,木鸿飞的训练也逐渐加大,建模能力在潜移默化中提升。而木鸿飞选取设计的游戏程序也在大学最后一学期悄然开花,为其爱情之旅带来了一丝浪漫,成为爱之表白的秘密武器,最终抱得美人归,当然这是后话,暂且不提。

上一篇   目录   下一篇

计算机达人成长之路(13)相关推荐

  1. 计算机达人成长之路 目录

    计算机达人成长之路 木鸿飞就是芸芸众生中推动历史年轮中的微小一员而已,他不是叱诧风云的人物,没有引领时代的潮流,但却走出了自己的计算机之路. "我是为计算机而生的."木鸿飞在日记中 ...

  2. 《计算机达人成长之路——憧憬与迷茫篇》有钱的捧个预订场,有人的捧个评价场...

    <计算机达人成长之路--憧憬与迷茫篇>终于上市了,现在已经在网上预售,预售地址为: 当当网:http://product.dangdang.com/product.aspx?product ...

  3. 计算机达人成长之路目录

    计算机达人成长之路 木鸿飞就是芸芸众生中推动历史年轮中的微小一员而已,他不是叱诧风云的人物,没有引领时代的潮流,但却走出了自己的计算机之路. "我是为计算机而生的."木鸿飞在日记中 ...

  4. 开学前夕——计算机达人成长之路(30)

    11.激情与憧憬 木鸿飞在XT大学的日子,不只有编程,还有激情蓬勃的生活.比如当太阳肆虐着大地.大家都午休的时候,总有几个大学生模样的人,光着膀子,流淌着汗水,在篮球场上奔跑,一遍又一遍的投篮.无论何 ...

  5. 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇

    1.2 这样学习C语言最有效 学好C语言的秘诀就是1234:"一字真言,两种态度,三个框架,四项注意". 一.一字真言 各位看官,学好C语言,其实只需一个字,那就是"编& ...

  6. 计算机达人成长之路 之软件分析与设计

    计算机达人成长之路  之软件分析与设计 最后,必须声明的事,任何事情都有一个熟能生巧的过程,系统分析也不例外.大家是不是看了上面的分析实例忽然觉得热血沸腾,发觉原来程序分析是如此简单如此清晰的一件事情 ...

  7. 计算机达人成长之路(9)

    2.我只是略懂,略懂 第四次课,终于迎来了期盼已久的上机课.不用木鸿飞提醒,上节课的下课铃声一响起,大家就急切的冲向传说中D县唯一的计算机机房. 机房不大,整齐摆放了4排电脑.中间两条电脑,木鸿飞认识 ...

  8. 无准备,不编程——计算机达人成长之路(15)连载

    8.俄罗斯方块(三)编码 嬉闹归嬉闹,最终二人静下心来,绍绍开始请教俄罗斯方块的设计,木鸿飞也不藏拙,马上开始讲解:"游戏其实分为三重循环,也就是可以分为三个部分." " ...

  9. 六天学会BASIC语言的方法——计算机达人成长之路(10)连载

    3.六天学会BASIC 木鸿飞真的只是略懂,他还需要老师解惑.杨老师似乎很高兴,老师都喜欢成绩好并且尊重他的学生,木鸿飞正好满足要求.为了能够更好的讲解,杨老师领着木鸿飞来到了他的办公室,其实就是一个 ...

最新文章

  1. python脚本实例手机端-手机APP自动签到-python实现 - 运维之路
  2. [2020多校A层11.22]party(概率期望/近似)
  3. C# list 多条件排序
  4. 腾讯云联合信通院等发布标准物模型平台,构建物联网行业通用标准
  5. 谈谈MySQL的WriteSet并行复制
  6. centos 如何测udp端口是否开放_centos测试udp端口是否打开
  7. 简单线性相关系数 r及检验
  8. 如何修复win7蓝牙服务器,处理Bluetooth外围设备驱动在win7中出错的修复方法
  9. 关于一系列斯坦福代码查重moss出问题的解决办法总和与注意事项
  10. 腾讯云副总裁王龙:云+AI是产业升级的最佳搭档
  11. 专精特新小巨人企业是什么
  12. html 苹果 地图,为什么苹果手机自带的地图是高德而不是谷歌?
  13. php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
  14. TikTok与抖音有什么不同?为什么TikTok被称为“海外版抖音”?
  15. 第19章 集合框架(3)-Map接口
  16. 20145221高其_免杀原理与实践
  17. DCMM数据管理能力成熟度评估模型
  18. 有哪些操作简单能将PDF转成图片的工具?
  19. 登高望远,一文解答 2023 年你最关心的前端热点问题
  20. 如何搭建云进销存-采购管理系统?

热门文章

  1. QT with OpenGL(Shadow Mapping)(面光源篇)
  2. 浅析涉及“疾病的诊断和治疗方法”审查意见的答复方式。
  3. tensorflow estimator详细介绍,实现模型的高效训练
  4. ipad可以不用原装电容笔吗?好用的ipad平替电容笔推荐
  5. 阿里云国际站登录遇到困难怎么办?
  6. chainer-目标检测-centerNet
  7. 如何通过阿里云短信服务来发送验证码短信(超详细)
  8. 百度OCR文字识别API-试用
  9. 远程桌面失败:你的凭据不工作
  10. 删除ubuntu linux系统,教你安全卸载Ubuntu系统