4、炮打飞机

那天,阳光特别灿烂,计算机们唱着欢快的蜂鸣声,欢迎着木鸿飞一行。木鸿飞心中荡漾着一股激情:“今天,我开始编程了!我将编写人生的第一个软件,第一个游戏软件!”

“雄赳赳,气昂昂,跨入了机房。”后来同学们是这么评价木鸿飞的,虽然木鸿飞与其他人一样,都是静悄悄地跨入机房,据后世好事者评价,木鸿飞那犀利的眼神,紧握的双拳,坚定的步伐,早已将他出卖,任谁在他身边,都能明显的感觉到,木鸿飞的小宇宙在燃烧,今天机房里面绝对不寻常!

进入机房,木鸿飞环视四周,一一扫过整齐排放的计算机,最终目光定格到一台286机型上,然后迈大步靠近,坐下,插入软盘,按下电源键,稍稍等待后进入DOS提示符。木鸿飞拿出笔记,输入了几个命令,每当他敲入一个回车,屏幕上就对应显示了一行英文,虽然这些英文句子并不都认识,但每个句子中都有显目的单词“error”。木鸿飞点点头,露出“果然如此”的神情,离开286,来到墙边一台被淘汰的“苹果机”前。

开机,等待启动,输入命令,苹果机的屏幕出现了全屏的字符输入界面。木鸿飞在键盘上输入:“print 1+1”,按下运行(RUN)键,屏幕显示:“2”。结果完全符合预期,木鸿飞松了一口气。

“木木,教材上使用的是以前的苹果机吗?”导弹目睹了木鸿飞的全过程,拿起教材问答。

“是的。我刚刚运行了1加1等于2进行测试,完全正确!”木鸿飞肯定回答,“幸亏这些老机器没有淘汰,不然就只有倚天屠龙,没有用武之地了。呵呵。”

历史其实有着惊人的相似性,木鸿飞不知道,早在十多年前的大洋彼岸,一个叫做“比尔·盖茨”的年轻人,与其伙伴开发BASIC语言解释程序,销售其产品时,这个年轻人运行的第一个程序就是“print 1+1”。正是那个“一加一等于二”,证明了比尔·盖茨设计程序的正确性,赚取了其人生的第一桶金,也造就了一个世界首富。十多年后的中国,同样是这个“一加一等于二”,拉开了木鸿飞编程的帷幕,撰写了其传奇的起点,从此木鸿飞在编程路上一路狂奔,渐行渐远。时间飞逝,又是十多年过去了,在这期间也不知道世界上还有多少年轻人,被“一加一等于二”所感召,踏上编程之路。我们行走在同一条道路上,这条道路时常万里无云、一马平川,激励着你前进,时常却又乌云密布、天旋地转,迷惑你走上歧途,或者中途退出。编程之路,是一条坎坷的路,充满着羁绊,每一步的前行都充斥的汗水;编程之路,是一条寂寞的路,除了寥寥行色匆匆的路人,就只有孤独相伴;编程之路,是一条乏味的路,枯燥的代码是它不变的景色。但我们相信,我们会用必胜的信念挑战磕磕碰碰;会学会与代码交流,一路将不再孤单;会透过我们的眼睛,观察掩藏在代码中的精灵,欣赏她们美妙的舞蹈。既然选择了这条路,就无怨无悔,让我们携手共进,去创造人生的辉煌吧!

一旦确定了编程工具,木鸿飞马上实施游戏软件的设计。他选择的是在D县一中历届学生中大名鼎鼎的“炮打飞机”程序。之所以称之为“大名鼎鼎”,是因为他之前,从D县一中走出的计算机专业大学生几乎都知道这个程序,所有的计算机粉丝都亲手敲过这段代码。记得多年之后,D县一中一个学长与木鸿飞见面,他望了望木鸿飞,用一种大家都知道的神情说到:“炮打飞机拉,大家都编过,我编的第一个程序就是炮打飞机。”。

由于教材上已经详详细细列举了炮打飞机的所有代码,所以与其说是“设计”,还不如说是“打字练习”。木鸿飞轻松的输入了50多行的代码后,按下“RUN”——解释运行键(注:BASIC是解释运行语言,不是编译运行语言),但是预期的游戏界面没有出现,取而代之的是一串英文提示和程序中一处反显提示。木鸿飞用仅有的一点点英语知识来阅读,察觉出有信息未定义,于是再回到程序中反显部分,仔细观察发现原来是关键字输入错误,修改后继续按下“RUN”键,如此大约反复五、六次后,终于界面终于发生了变化:在黑漆漆的屏幕上,一架相当简陋的飞机(图像显示:“-=< ”)从右向左缓缓飞过,下面是一个同样简陋的固定炮台(图像显示:“^”),当游戏玩家按下字母“a”时,一个由感叹号“!”描述的炮弹从炮台缓缓升起,冲向飞机。如果击中,则游戏爆机Over;否则可以继续发射炮弹,直到飞机到达最左端时,Game Over。

炮弹飞机界面示意图,汉字和坐标系为解释,实际界面中无

这可能是世界上最简单的游戏了,同学们马上被吸引围观起来,有好事者开始试玩游戏,其中鸭子那个家伙居然一口气狠狠地玩了二十多次,颇有些游戏测试者的气质。更多的人则是充满着兴奋和疑惑,他们七嘴八舌的问道:

“木木,这是你编的游戏吗?”质疑逼人,木鸿飞点头。

“木木,这真的是你编的游戏吗?”质疑再度逼人,木鸿飞再次点头。

“木木,这真的真的是你自己刚刚编的游戏吗?”质疑再三逼人,木鸿飞再三点头。

“木木,这真的……”

“停!这真的真的真的是我刚刚编的炮打飞机游戏!”。质疑四度逼人,木鸿飞赶忙提前辟谣,结束在琼瑶阿姨的小说中才会出现的爱情似问答。

其实不能责怪同学们的不信任,在没有学习BASIC语言的前提下,计算机编程对大家来说就如同仙女般遥远和神圣,如今仙女堕入凡尘,却对木鸿飞投怀送抱,怎能不使大家诧异和羡慕,不可避免在言语上质疑了。质疑过后,人们纷纷希望亲自设计这个程序,木鸿飞也不含糊,告诉大家几个基本的操作命令后,就将源代码显示在屏幕上,供大家对照输入。气质美女何丫丫继续当仁不让,充分利用平时的关系,强行招呼木鸿飞提供VIP式一对一指导。导弹等人看着羡慕,却也毫无办法,谁叫他的炮打飞机还没有运行成功的,只能咬咬牙,继续调试去吧。

不多久,一台台苹果机开始运行炮弹飞机,虽然只是个简单的游戏,同学们却照样玩的不亦乐乎。几分钟后,人们经历了最初的兴奋,渐渐冷静下来,于是有人开始思索游戏的设计来,真是一群喜欢打破沙锅问到底的家伙。

“为什么这些代码就可以炮打飞机呢?木木,你略懂吗?可以讲一讲不?”绍绍发问,首先打破全班游戏的气氛。

“错,我没有略懂。”木鸿飞回答。

“唉!真可惜,不知道为什么要这么设计。木木,知道就说出来,咱俩谁跟谁,不要藏私啊。”绍绍无不惋惜的说道。

“对啊,对啊,独乐乐不如众乐了,你如果知道就说出来,大家分享一下。”丫丫也想知其然知其所以然。

“这个炮弹飞机程序我真的没有略懂!”木鸿飞强调,然后继续强调:“我是全懂!”。四周立刻传来一群杀人的目光,丫丫甚至卷起衣袖,不顾美女的矜持,欲上演一场惊天地泣鬼神的“我的野蛮女同学”版暴力事件。

“我马上就解释。”见势不妙,木鸿飞急忙抢答,有效防止了暴力事件的升级,“其实整个程序就是一个循环,飞机从屏幕右边开始,到达左边结束。”

“循环是什么?”鸭子率先打断木鸿飞。

“循环就是把一个事情分割成很多相似的小步骤,这些小步骤除了一些具体的数值外,步骤和程序都是一样的。”木鸿飞看到鸭子紧锁的双眉,就知道解释工作不到位,赶紧停下来想了想,然后继续说道,“就好比走路,我们从那里走到这里,是一个事情。这个事情其实就是一个循环,可以分为若干个相同的小步骤,这些小步骤就是:抬起左脚,向前迈下,又抬起右脚,再向前迈下。OK,一次循环完成。下一次循环你继续抬左脚迈下,抬右脚迈下。以此类推,每次循环的内容都是一样的,不同的仅仅是起步的绝对位置。”

“就是把一个复杂的事情分为很多个简单的小步骤,我明白了。”鸭子难得清白了一回。

“对,就炮打飞机而言,每个循环需要完成三个内容:第一,飞机向前飞动一格。第二……”木鸿飞侃侃而谈。

“飞机怎么飞?”邵邵突然打断,提问道。

“这个问题暂时不要考虑,总之飞机需要向前飞动,至于如何实现的,这是下一步要考虑的内容,”木鸿飞看了看邵邵,继续解释道:“第二就是炮弹向上飞动一格。这个内容比较复杂,需要判断炮弹是否发送,炮弹是否打中飞机,炮弹是否已经到达顶部等等。第三就是接收我们在键盘上的按键,如果我们按下发送键,这里用字母a表示,就向上发送炮弹。”一边说,木鸿飞一边在纸上画出如下的图案:

导弹用手指了指“2.2”,问道:“是不是如果炮弹打中了飞机,那么游戏结束,否则继续游戏。”木鸿飞点头。

导弹又指着“2.3”问道:“是不是如果炮弹到达了最上面,那么炮弹消失,否则继续游戏。”木鸿飞再次点头。导弹也跟着点点头,表示懂了。

其他人思考了半天,最终参差不齐的点了点头,纷纷表示“略懂”,唯独鸭子仍然不解风情,一个劲的叫嚣:“不清楚,不清楚,那个飞机到底是怎么飞动的呢?”。直把木鸿飞气得咬牙切齿:“刚开始时不是说了吗,现在我们思考的是整个程序的设计流程,考虑的是大方面的东西,就不要管飞机怎么飞的这些具体细节。”

多年以后,木鸿飞曾指导过很多学生,有的学生很有天份,设计思想一点就透,而有一些却显得比较呆板,常常一个设计思想就需要思考半天,难道是他们不适合程序设计吗?木鸿飞曾为之交流过,发现很多这类学生的思维比较混乱:在设计整个系统框架,他们常常考虑某个具体细节如何实现;在设计A模块具体实现时,他们却又突然考虑起B模块中的对象。鸭子就是一个典型的例子,在设计炮打飞机整体流程图时,他总是陷入飞机动画中不能自拔,而一旦开始具体设计飞机动画时,他又总是担心炮弹如何打中飞机。对于这些学生,木鸿飞一般会先发大力气指导他们拨正混乱思维,果然,突破此屏障后的同学们编程能力大多突飞猛进。

其实这就是程序设计中最基础的思想,无论是划分模块还是编写模块,无论是选择对象还是设计对象,都务必保持清晰的头脑,分清楚当前工作的重心,先打好框架,再考虑细节,先设计蓝图,再加砖添瓦,打框架时不要被设计细节所蒙蔽,设计蓝图时不要被购买材料所羁绊。

木鸿飞一群人继续分析炮弹飞机的设计,其中大多数时候是木鸿飞讲述,其他人倾听,或者其他人提问,木鸿飞回答,偶尔导弹也会插上一两句,发表自己的观点。大家你来我去,分析得自得其乐,直到最后,突然听到圈外传来一阵鼓掌声,大家循声望去,杨老师不知什么时候出现在大家面前。只见杨老师满面笑容,翘起大拇指对木鸿飞说道:“不错,不错。虽然每届学生都编了这个炮弹飞机,但是把它的设计思路原原本本还原出来的就只有你一个!”

木鸿飞这家伙本来就有点洋洋自得,得到了杨老师的夸奖,更加喜洋洋的找不到灰太狼了,但又必须保持谦虚谨慎、戒骄戒躁的作风,只好强忍住笑容,露出一股丑陋的神情,假装谦虚的说道:“呵呵,我只是略懂,略懂,呵呵。”突然,木鸿飞迎上了丫丫那杀人的目光,赶紧改口,“略懂只是我的口头禅,其实我是全懂了!”

上一篇   目录  下一篇

ps1:浪子已经在很努力的更新了,其实以前每一章只有1K,到后来的2K,3K,现在本章有4K,还配了两个图和一个程序,本章的更新内容其实远远超过了以往各种。但是似乎本贴的热度越来越低,从最初的500多次阅读,到现在的60次阅读,从最初还有几个评论,到现在无人问津。浪子不禁想问,这个世界是怎么了,现在食品越来越多,可吃的越来越少。赚钱越来越多,幸福越来越少。汽车越来越多,道路越来越少。汗水越来越多,掌声越来越少。更新越来越多,阅读越来越少,文字越来越多,回帖越来越少。期待本章能够上榜,其他本书所有章节天天上榜!

ps2:炮弹飞机可执行程序,供试玩。发射炮弹命令是a,本程序在XP系统下测试通过。

ps3:附上炮打飞机游戏源代码。这是在Borlandc++3.1  for dos上调试通过的,如果使用TC2.0编译,请自己稍做修改。另外windows环境已经不再支持这种字符界面,故请不用使用Vc++,C++builder或Dev-C++编译。

  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <dos.h>
  4. int main()
  5. {
  6. int x, y=23, c;
  7. int nFlag = 0;
  8. textmode(3);
  9. clrscr();
  10. gotoxy(40, 24);
  11. printf("^");
  12. gotoxy(40, 23);
  13. printf("!");
  14. for (x=75; x>=1; x--)
  15. {
  16. gotoxy(x, 3);
  17. printf("-=< ");
  18. if (nFlag)
  19. {
  20. gotoxy(40, y);
  21. printf(" ");
  22. y = y - 5;
  23. gotoxy(40, y);
  24. printf("!");
  25. if (y == 3)
  26. {
  27. if (x <= 40 && x + 3 >= 40)
  28. {
  29. return 0;
  30. }
  31. else
  32. {
  33. nFlag = 0;
  34. gotoxy(40, y);
  35. printf(" ");
  36. y = 23;
  37. gotoxy(40, y);
  38. printf("!");
  39. }
  40. }
  41. }
  42. if (kbhit())
  43. {
  44. c = getch();
  45. if (c == 'a') nFlag = 1;
  46. }
  47. delay(300);
  48. }
  49. return 0;
  50. }

附件:http://down.51cto.com/data/2356599

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

游戏炮打飞机设计——计算机达人成长之路(11)连载相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)

    9.俄罗斯方块(四)失败 编码,编码,努力的编码.再接下来的几天里,木鸿飞如同笔者一般,一有空就开始码字.当然他码的是英文程序,笔者码的是中文汉字,他在笔记本上码,笔者在笔记本电脑上码.终于大约两千行 ...

  8. 计算机达人成长之路(13)

    6.俄罗斯方块(一)建模 失败是成功之母,伴随着成功出现的还有骄傲.经过DOS门.炮弹飞机和音乐演奏等等事件,木鸿飞渐渐地被胜利冲昏了头脑,把高斯成为数学王子的故事直接嵌套在自己的身上,误以为自己成了 ...

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

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

最新文章

  1. smc数显压力表设定方法_SMC压力表使用注意与调试方法
  2. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY16-强化学习
  3. keepalived热备 keepalived+LVS Haproxy
  4. 【pytorch】pytorch自定义训练vgg16和测试数据集 微调resnet18全连接层
  5. linux如何把postgresql添加到环境变量_如何搞清楚PostgreSQL的环境变量 ?
  6. 高端网站建设css3动画响应式模板_网站建设中整站定制与模板建站存在着什么差异...
  7. 在服务子程中首先关闭ie 的HTML5连接向导
  8. 这份精子保存了1亿年,不仅长度惊人还刷新了一项记录
  9. TensorFlow 语法及常用 API
  10. rgb矩阵Android程序,Android ColorMatrixColorFilter
  11. 红米note5系统Android11,红米Note5-MIUI11 开发版|超多功能|Xposed|ROOT|桌面布局-刷机之家...
  12. 使用sort(function(a,b){return a-b})对数组进行排序的原理
  13. 使用gsds绘制基因结构图_使用 GSDS 绘制基因结构图
  14. 软件测试工程师自我介绍范文_软件测试工程师面试英文自我介绍范文
  15. 111wqdqwdwedwedwdwededwedwe
  16. i2c 驱动五:gpio模拟i2c
  17. 室内定位indoor location
  18. 有关在html中修改select标签的option selected默认选中属性实现
  19. 其实,中本聪并没有提过哈耶克...
  20. 蓝鲸智云App应用部署(完整版)

热门文章

  1. 策略模式+简单工厂之旅游出行策略与门票折扣案例
  2. 弥补斯坦福70亿参数「羊驼」短板,精通中文的大模型来了,已开源
  3. cs224w(图机器学习)2021冬季课程学习笔记11 Theory of Graph Neural Networks
  4. java中一元加号和减号是什么_加号.减号和正号.负号有什么区别
  5. canvas制作时钟
  6. html表格边框空心,各种表格样式示例及代码
  7. 智能手机怎样才能不会被定位追踪?
  8. qq日历android,QQ日历 | im.qq.com
  9. Spinner 下拉框
  10. 黑夜给了我黑色的眼睛,我却用它研究CV