8、俄罗斯方块(三)编码

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

“哪三个?”绍绍问。

“我称之为外循环、中循环和内循环。其中外循环产生方块,循环内是一个方块从产生到落下到消失的全部生命周期,每循环一次肯定落下了一个方块。”木鸿飞道。

“恩,可以理解。”绍绍点点头,“外循环对应每一个方块。那么中循环呢?”。

“在游戏过程中,方块都会下落,对不对?中循环就是这个落下的过程,每循环一次,方块落下一格。”木鸿飞道。

“如果方块落到底了呢?是不是要判断消行了。可以你不是说中循环只负责落下一格吗?难道每一个落下都要判断消行处理?可是不对啊,明明只有落到最下面那一次循环才用消行?啊,我头晕了,想不清楚了。”绍绍摸着头,痛苦的说道。

“消行是外循环的事情好不好!外循环做四件事,分别是:产生方块、游戏结束判断和处理、调用中循环使方块落到底和落到低后的消行处理。”怕绍绍还不明白,木鸿飞在纸上画出了外循环的流程图。

“哦,你这么一画我就明白了。你为什么不早的画呢?还有为什么我刚刚会不明白呢?”绍绍打破沙锅问到底,颇有点十万个为什么的味道。

“我怎么知道。”木鸿飞给了绍绍一个白眼,随后想了想,说道:“可能是你的思路不够清晰,我们是在中循环时提及消行的,然后你就以为消行必须要在中循环中使用,千方百计希望在将它塞入中循环里,而它恰恰是外循环的内容,所以你才会思维混乱,发生短路。”

“好像是怎么回事。”绍绍赞同,“就是说设计的时候要眼观六路,耳听八方,随时联系前后的内容。”

“对,不过也不能以偏概全,有时候该不考虑的就不要考虑。”看到绍绍皱起了眉头,木鸿飞连忙打住,换了一种说法:“其实就是考虑它应该处于哪个模块中,如果处于现在正设计的模块中,那么我们无论如何也要设计它,否则就不要理睬它。比如当前我们正在设计中循环,而消行处理却是外循环的工作,所以可以忽略之。但是如果我们正在设计外循环,那么就必须的设计消行。”

“似懂非懂,还是回头继续说中循环吧。”绍绍说。

“中循环执行三件事,分别是:调用内循环、方块下落一格和判断方块是否已经到达即中循环是否接受。”木鸿飞一边说一边画出了中循环的流程图。

“懂了。再讲解内循环。”有了流程图就是好,极大的增强了绍绍的理解能力。

“内循环就是在方块下落一格的时间之内,循环的接收玩家的输入然后做出相应的处理。比如玩家输入左方向键则方块向左移动一格,玩家输入旋转键则旋转方块等等。当时间到达时内循环结束。”木鸿飞停顿了一下,继续说:“其实内循环的时间长短,就体现了游戏的难度,时间越长则难度越大。”

(笔者注:以上为DOS环境下面向过程的设计方法,如果需要移植到Windows中,则要重新按照消息处理的规则进行转换。如果需要面向对象设计,则需另外分析。)

“本来呢我离懂了还差那么一点点,但是听你这么一说呢,我有懂了一点点。看来你还是有把刷子的!”绍绍开始表演木鸿飞。

“哪里,哪里,不要崇拜哥,哥只是传说,而且哥会骄傲的。呵呵,其实我的程序代码还没有写出来。”千穿万穿,马屁不穿,被朋友PMP,木鸿飞连忙假装谦虚。

“下次你就拿着政治书去上机,电脑老师一看,肯定会问的,木同学,现在是计算机课,不是政治课,虽然你爱党爱国爱人民,可也不能拿着政治书编程序啊。但是,谁也没有想到,你的政治书上居然有流程图,凭借这些图,你硬是编出了俄罗斯方块,多牛啊!到时候……”绍绍帮助木鸿飞陷入憧憬之中。

“打住,停!如果照你说的做,我是不可能编出俄罗斯方块的。”木鸿飞斩钉截铁的说道。

“Why?”绍绍很时髦的问道。

“我现在还是个新手,水平没有你想象的那么高,只靠流程图还编不了程序,必须先在纸上写出代码,然后再敲进去,否则大脑会短路的。”

初学者要先写代码再敲代码,这叫不打无准备之战,编代码时可以事半功倍,所谓磨刀不误砍柴工就是这个道理。只可惜道理很简单,人人都知道,但却不会去遵守,正如交通规则人人都知道却不是人人都遵守一样,很多编程初学者嫌麻烦,不愿意这么做。

木鸿飞曾经为大一学生上过C语言课程,课堂上布置了程序设计题。但上机操作时,常常有很多学生空手而来,打开计算机却不知道干些什么,磨蹭了半天最后选择扫雷。

有的学生不扫雷,他们直接编代码,但敲出来的源程序真的不堪入目,不是这里少的,就是那边缺些,绞尽脑汁也生产不了几行,铃声一响,再一响,一节课过去了,看来匆忙上阵是不行的。

有的学生则谨慎些,他们会拿上教材,照着上面的习题答案敲打,却又常常敲错了字母,编译报错时只能一行一行的核对,如果碰上印刷错误或者作者失误,教材中的源代码本来就是错误的,就只有干坐在座位上等老师来解决了,看来不劳而获也是不行的。

只有极个别的同学带着笔记本过来,流程图画得清清楚楚,源代码写得整整齐齐,一看就知道课后自己做了分析和设计。他们直奔主题,手指如舞,伴随着富有节奏感的键盘敲击上,一行行代码如舞动的精灵在电脑上翩翩起舞。若是输入错误,或者源代码存在错误,都能很快的修改。毕竟是自己设计的程序,理解起来比学习教材上的要深刻许多。

有人说:编程序之前还要先把代码写在纸上,你欧特曼了!如今的程序那个不是动辄几万行,上十万行代码,都写在纸上,太不现实了,误人子弟!没错,真正的编程都是在头脑中思考,在键盘上完成,很少将代码记录在案的。但是,能够做到这些的都是什么人,是真正的程序员!他们哪个不在代码的海洋中浸泡过,岂是你一个小小的初学者可以比拟的。

记得上数学课,每当学习到新东西时,数学老师都要求学生们把每一个计算步骤都列举出来,一个也不能少,只有当熟练之后才可以简化流程。学习计算机也一样,初学者多几个步骤,可以省去很多弯路。即使是达人与木鸿飞者,在编码之前,也要先做好设计分析,画出系统图,在某些复杂的模块,甚至还要画出详细流程图,比如编写链表和指针时,还需要画出链表模型图,万事俱备,然后才开始输入代码。

无准备,不编程!

本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/388617,如需转载请自行联系原作者

无准备,不编程——计算机达人成长之路(15)连载相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 快速编程的捷径——计算机达人成长之路(40)

    9.PASCAL语言(三)木氏程序分析模型 一个小小的课程设计,其实就是一个验金石,谁爱好编程.谁擅长编程一目了然.动手能力强的同学,课程设计常常做的又快又好,而且能帮助很多其他的同学.而动手能力差一 ...

  9. 如果有电脑——计算机达人成长之路(36)

    5.电脑情缘(一)王新华的电脑 现在的大学生一般都有一个工具,就是计算机,尤其是计算机科学系的学生,几乎人手一台.对此,木鸿飞只能深深的说上一句:"幸福啊!" 现在人可能不能了解这 ...

最新文章

  1. ATL的GUI程序设计(3)
  2. 使用sqlite保存数据返回主键
  3. 利用递归、迭代解决斐波那契数列问题与汉诺塔难题
  4. html进度条圆圈渐变色,HTML5 canvas带渐变色的圆形进度条动画
  5. linux/unix系统编程手册11-15
  6. OSPF的route-id选举
  7. activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...
  8. C#面向对象基础(六) 继承
  9. ForkJoin 学习使用笔记
  10. iOS用三种途径实现一方法有多个返回值
  11. r语言矩阵运算_R中的矩阵运算
  12. 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(3)——椭球抛物面
  13. 用c语言编写五子棋用vs写,c语言写的五子棋人与人对战
  14. SVN分支管理以及跨分支打包
  15. 《工业设计史》 绪论
  16. 李炎恢PHP高端培训视频教程
  17. SQL常用连接查询(JOIN)
  18. 【AIS学习】12:AIS标准下载
  19. 华为、阿里等大厂程序员真的好找对象吗?
  20. 图神经网络模型—PATCHY-SAN的基本思想与流程

热门文章

  1. 浮动元素会引起的问题和你的解决办法
  2. alter system switch logfile与alter system archive log current的区别
  3. C#实现php的hash_hmac函数
  4. [j2me]类似于OperaMini二级菜单界面演练[1]
  5. 数据库开发基本操作-安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法...
  6. 让织梦内容页arclist标签的当前文章标题加亮显示
  7. python学习day3
  8. 填问卷赢280元SaaS峰会门票 与Salesforce、Zenefits现场交流!
  9. quick-cocos2d-x游戏开发【3】——display.newSprite创建向导
  10. ElasticSearch Groovy脚本远程代码执行漏洞