5、一代女皇武则天
接下来的几天,高一年级最火热的话题就是炮打飞机了,由于前几届下发了教材,每个班或多或少都知道一些,而今年却只有一人学习并且编写了出来,所以刹那间木鸿飞成了高一年级的风云人物,不住的有人在他背后指指点点,时不时还有几个外班的同学过来确认消息,顺便PMP(笔者按:并非软件项目管理,而是拍马屁)一番。呵呵,木鸿飞是人逢喜事精神爽啊,被吹得飘飘然的,一度自以为成了万千少女崇拜的偶像,不禁喜洋洋起来。
只可惜好景不长,大家对木鸿飞的关注如潮水一般涌来,又如潮水一般退去,只几天功夫,当红的明星就被打入冷宫,很少有人再提及。其实这也是历史的必然,首先当时电脑尚未走下神坛,大家只能到机房才可以使用,而机房一周才开放一次,长期不接触很容易使人降温乃至遗忘,“两情若在长久时,又岂在朝朝暮暮”的情感生活并不适合大多数人。其次炮打飞机毕竟是个简单之极的游戏,缺乏华丽的界面,没有优美的音乐,更不具备激烈的对战,就如同一份枯燥而无内涵的报纸,若非阅读资源极度匮乏,没有人会选择观看。最后,高中生学习本来就紧张,计算机只不过是紧张生活的一份调味点心而已,现在点心尝过了,甜味知道了,该是继续吃正餐的时候了。
其实,木鸿飞编程的目标并非想赚取大家关注的目光,而是因为自从初学BASIC,木鸿飞就已经深深的爱上了计算机编程,系统分析思维,程序设计思想,代码编写方法,一切的一切,虽然只是初次见面,却是那么的熟悉,仿佛一颗早已埋藏在心底的种子,春风吹过,生根发芽,不住的共鸣。至于成为焦点,不过是意外的奖励而已。
“君似明月我似雾,雾随月隐空留露。君善抚琴我善舞,曲终人离心若堵。只缘感君一回顾,使我思君朝与暮。魂随君去终不悔,绵绵相思为君苦”。木鸿飞就如热恋中的人儿,一首古相思曲正好道出了他的心声,编程上瘾啊,一日不见,如三秋兮,几天没有接触计算机,木鸿飞早已手痒不止,只希望能够再编写几个趣味程序。可是炮打飞机已成过往,选择什么题材好呢?教材中的实例一个个在木鸿飞脑中翻滚,被满怀希望的取出又被无情的删除,最终它们定格到一个瞬间。
“就是它了!”木鸿飞大手一挥,确定了目标——音乐演奏程序
名称:模拟音乐发声程序。
功能:利用计算机演奏一曲音乐。
原理:
(1)sound函数可以发音,其参数为频率,如sound(523)能够发出频率为523HZ的声音。而音乐中“多”的频率也是523HZ,所以用这个函数可以发出“多”音,同理更改参数则发出其他声音,比如“2”、“3”、“4”、“5”、“6”、“7”的频率分别为587、659、698、784、880、988等
同理也可以发出其他的声音。
(2)音乐中的节拍可以用延时表示,一个节拍大约2400毫秒,所以全音符delay(2400),四分音符delay(600),十六分音符则delay(150)。
实例:以下乐谱的程序代码为:(4/4拍)
sound(659);delay(300);unsound(); 模拟八分音符的“3”
sound(784);delay(300);unsound(); 模拟八分音符的“5”
sound(659);delay(300);unsound(); 模拟八分音符的“3”
sound(587);delay(300);unsound(); 模拟八分音符的“2”
sound(659);delay(1200);unsound(); 模拟二分音符的“3”
不得不说,木鸿飞是个五音严重不全的人,他全身上下就没有几个音乐细胞。记得有一次木鸿飞到下属单位出差,下属单位热情招待,K歌自然是必不可少,于是一伙人直冲到量贩式KTV,接待方邀请木鸿飞高歌一曲,但木鸿飞自家人知自家事,一再表示嗓音不好不是自己的错,但拿出来吓人就不对了。接待方只以为是木鸿飞谦虚,于是继续发扬劝酒的风格劝歌。木鸿飞何曾经过如此架势,马上败下阵来,真真切切勉为其难的K歌一首。当木鸿飞那比海豚还怪异的嗓门、任意妄为的旋律环绕在包厢时,下属单位领导因为喝酒而通红的脸刷的一下全白了。一曲终结,该领导重新喝上一杯酒,恢复脸色的红润,然后照惯例需要夸奖一下歌唱者,领导说道:“木高工唱歌,这个声音特别的……”,一阵停顿,明显思考了一下,“啊,木高工唱歌,这个节奏把握的特别……”,又是一阵停顿,显然以上思考均欠佳,只得另外选择闪光灯:“总之,其实,唱得与曾逸差不多……”,此后直到曲终人返,木鸿飞一路清闲,再无人邀请K歌。
计算机唱歌给了木鸿飞一个弥补缺陷的机会,反正的电脑发音,不要自己发声,应该不至于那么难听。但是选择哪首歌好呢,目前正在热播的电视连续剧《一代女皇武则天》主题歌似乎很好听,木鸿飞心中有了计较。只是歌曲的乐谱在哪呢?当时不像现在,网络如此发达,一切资料只需谷歌一下即可,要选择乐谱,只能走手抄渠道。一般来讲,美女都能歌善舞而且具有美术天赋,于是木鸿飞将目光投向了他后面的同桌——一代美女何丫丫。
何MM不是一般的人,她极具歌唱天赋。当然木鸿飞也不是一般的人,他是“极具唱歌天赋”的取反。所以,当木鸿飞借歌本(记载歌曲简谱的手抄本)时,何MM诧异的表情不亚于看到黄河之水倒流,又或是惊闻美国总统请她共进晚餐,她不顾男女之防的摸了摸木鸿飞的额头,自言自语道:“好像没有发烧啊。”
其实只要声明是编程序需要,就可以顺利的借到歌本,但为了那一点点神秘性,木鸿飞硬是没有透露,于是引发了下面的剧本:
剧本名称:木鸿飞连翻18个跟斗、转体360度、雪夜跪地裸求《一代女皇》密谱
(一名不愿透露姓名的读者按:以上剧本名不副实,纯属标题党。)
出场人物:木鸿飞(男),何丫丫(女)
木鸿飞(摆在一个自以为酷的姿势):“丫丫大美女。”
何丫丫(直接翻了一个白眼):“拜托请不要学健美明星,你没有肱二头肌,就别学大力水手摆健美动作。”
木鸿飞(赶紧恢复正常姿势):“请借歌本一用。”
何丫丫(吃惊,吃惊,再吃惊):“我没有听错吧,貌似你想要歌本?”。
木鸿飞(缓缓而有力地点头):“YES!”
何丫丫(眼神闪烁着警惕的光芒):“你不是准备吃饱了晚饭没事做,又同鸭子到楼顶去唱歌吧。上次你们俩唱歌,我一个晚自习没有心思学习,晚上还连连做梦。”
木鸿飞(洋洋自得):“貌似我没有那么大魅力吧,唱个歌就能对你造成这么大的影响。何同学,少壮不努力,老大徒伤悲,今天不努力学习,明天努力找学校。作为高中生,你要意志坚定,一心扑在学习上,不要被别人所吸引。虽然本人样子帅了一点,个子高了一点,成绩好了一点,为人诚实了一点,……”。
何丫丫(打断木鸿飞):“停!给你点阳光你就灿烂,给你点洪水你就泛滥。你以为你是阳光灿烂猪八戒啊!”
木鸿飞:“你不是听我唱歌后睡不着觉吗,我觉得我有义务提醒你好好学习天天向上。”
何丫丫:“提醒你个大头鬼,我是被你们上次搞得噪声污染,恶心的睡不着觉。你们以后可不能再制造噪音污染了,不然我代表环保部门消灭你们。”
木鸿飞(一脸无辜):“我只不过想借你的歌本,看看里面有没有《一代女皇武则天》的乐谱,关环保什么事情。”
何丫丫:“什么?一代女皇武则天,我的天哪!如果你唱摇滚,我觉得还勉强可以听一听。唱武则天,鸡皮疙瘩掉一地。”
木鸿飞(皱眉思考,觉得侧面攻击):“丫丫同学,知道人世间最悲哀的事情是什么吗?”
何丫丫(警惕而且疑惑):“是什么?”
木鸿飞:“歌本抄了,却没有人唱。”
何丫丫:“知道人世间最最悲哀的事情是什么吗?”
木鸿飞:“不知道。”
何丫丫:“歌本抄了,却被曾哥拿去唱了。”
木鸿飞:“借不借罗?”
何丫丫:“不借!”
木鸿飞:“这个可以借。”
何丫丫:“这个真不借。”
木鸿飞:“这个必须借。”
“……”
经过一番讨价还价,木鸿飞在保证月圆之夜不登上教室之巅拿着课本鬼哭狼嚎,并且还答应要给丫丫一个与武则天相关的意外惊喜后,终于拿到了久违的乐谱。
-----------------------------------------------------------------------------------------------------------------
时间一天一天过,又是一周上机日,这天太阳当空照,花儿对他笑,小鸟说早早早,木鸿飞你为什么跑跑跑,我要用电脑,决不能迟到,编程序写代码,计算机要演奏音乐了。
音乐演奏程序没有什么难度,一旦明白了其原理,更多的只是个体力活。早在上机前木鸿飞就已经将乐谱整理为代码,现在只要照着敲上去就行了。整个过程一点也不难,简直就是心情愉悦的打字练习。很快,木鸿飞输入了代码,在更改了几次笔误后,执行了程序。
“娥眉耸参天,丰颊满光华,气宇非凡是慧根,唐朝女皇武则天。
美冠六宫粉黛,身系三千宠爱,善于计谋城腑深,万仗雄心难为尼。
君临天下威风凛凛,憔悴心事有谁知怜,问情何寄泪湿石榴裙,看朱成碧痴情无时尽。
纵横天下二十年,深宫迷离任凭添,两面评价在人间,女中豪杰武则天!”
机房里突然想起了音乐声,虽然只闻曲调而无人声,但所有同学都听出这就是一代女皇武则天的主题曲。大家循声望去,无数道目光聚焦处,木鸿飞腼腆的抬起头来。
丫丫跑了过来,“野蛮”地朝木鸿飞肩上打了一记粉拳,“不错啊。比你唱的好多了!你早点说是编程序用的吗,我还以为是你自己用呢。这种事情你要说出来,你不说我怎么知道你要不要,不可能你要的东西我不给你,你不要的东西我硬要给你,大家讲道理,对不对,……”何美女兴奋地讲了很多,她先是对木鸿飞大肆夸奖一番,然后论述了自己借歌本的功劳,最后强烈要求木鸿飞再编写一曲小虎队的歌,于是又引发了下面的剧本:
剧本名称:何丫丫看贴不回帖还催楼主更新
出场人物:何丫丫(女),木鸿飞(男)
何丫丫(露出笑容):“木木,很不错,你编程序的水平真高。可惜现在的我不认识比尔·盖茨,要不我一定夸奖你比比尔·盖茨还牛!”
木鸿飞(摸摸后脑勺):“呵呵,呵呵,谢谢夸张,谢谢夸张,你可以继续使用对比和排比的修辞手法继续夸张我。”
何丫丫(嗲声嗲气):“你能不能编程再唱一首歌曲,我喜欢听小虎队的。”
木鸿飞(很为难):“不行啊,我没有带歌本来,不知道乐谱,没法编啊。”
何丫丫(继续嗲声嗲气):“那你为人家编写一个钢琴程序,就是由人家在键盘上弹,电脑像钢琴一下发声。”
木鸿飞(很享受的神情):“这个书上面没有,咱不专业,我不会啊。”
何丫丫:“这个可以会!”
木鸿飞:“这个真不会。”(木鸿飞见到丫丫又欲发飙,连忙问道)“问你个问题,一个美女和一个丑女同时撒娇,你觉得谁会得逞。”
何丫丫(疑惑):“我觉得是美女。”
木鸿飞:“错!你要研究人们的心里,美女撒娇别有一番风味,人们都想多看看,而丑女撒娇就只有恶心,人们都想快点结束。所以丑女撒娇一般容易得逞。”
何丫丫(点点头):“我明白了。”(面容突然一变,恶狠狠的露出牙齿,举起粉拳,用杀人的目光盯着木鸿飞,整个一野蛮女同学的剧照)“别说怎么多废话,你到底能不能遍?”
木鸿飞(吓得缩缩头):“能,太能,太阳能。”
何丫丫(怒目圆瞪):“那你到底遍不编?”
木鸿飞:“编,我编,我编编编。”
……
钢琴程序的原理相当简单:当按下“1”键时,电脑发出“多”的声音,当松开“1”键时,就中止发音,其他每种音阶都有对应的按键。因此编写过程相当顺利,不一会而丫丫同学就开始弹奏了。不得不说丫丫弹钢琴还是有一定天赋的,一些简单的曲目开始在机房中飘荡,为这个寂寞的机房,乃至寂寞的高中,带来了一丝丝清凉。
时光飞逝,多年以后,丫丫早已嫁作人妇,木鸿飞也有了自己的妻子。丫丫越发成熟高贵,却野蛮依旧,木鸿飞稳重有加,但腼腆亦然。老同学见面,相逢一笑,谈起当年设计程序的往事,丫丫说木鸿飞当年设计程序的动力,来源于她的推动,就是希望能在她这个美女面前好好的表现,才把编程的天赋发挥得淋漓尽致。木鸿飞则拒不承认,他认为自己内心有着深深的编程欲望,才会不断的设计新程序,不断的挑战自我,至于获取众人的关注和美女的青睐,不过是额外的奖励罢了,有则享受无则不求。因为在编程的道路上,也许偶有鲜花,偶有欢唱,但不变的永恒永远是寂寞。只有耐住寂寞、战胜寂寞和欣赏寂寞,才能在编程之路上一路畅行。
ps1:近5千字更新奉上。
ps2:音乐演奏程序,供试玩。 本次演奏的是周杰伦的菊花台。
ps3:附上以上程序的源代码。这是在Borlandc++3.1 for dos上调试通过的,如果使用TC2.0编译,请自己稍做修改。另外windows环境中不支持sound和delay,故请不用使用Vc++,C++builder或Dev-C++编译,硬要在Windws下编译,请使用替代函数,比如Beep和Sleep等。
- #include <dos.h>
- #include <stdio.h>
- int main(void)
- {
- int yy[][8] =
- {
- {0, 262, 296, 330, 349, 392, 440, 494},
- {0, 523, 587, 659, 698, 784, 880, 988}, //1234567
- {0, 1047 ,1175,1319,1397,1568,1760 ,1976}
- };
- int yq[][3] =
- {
- 0,0,4,
- 0,0,4,
- 0,0,4,
- 1,1,2,
- 1,2,2,
- 1,3,4,
- 1,3,2,
- 1,5,2,
- 1,6,4,
- 1,6,2,
- 2,3,2,
- 2,2,2,
- 2,1,2,
- 2,1,2,
- 1,6,2,
- 1,5,8,
- 1,6,2,
- 1,5,2,
- 1,3,2,
- 1,2,2,
- 1,1,4,
- 0,6,2,
- 1,1,2,
- 1,2,4,
- 1,2,2,
- 1,3,2,
- 1,2,4,
- 1,1,2,
- 1,2,2,
- 1,3,4,
- 1,3,2,
- 1,5,2,
- 1,6,4,
- 1,6,2,
- 0,3,2,
- 2,2,2,
- 2,1,2,
- 2,1,2,
- 2,2,2,
- 2,1,8,
- 1,5,4,
- 1,5,2,
- 1,3,2,
- 1,7,2,
- 2,1,2,
- 1,1,2,
- 1,2,2,
- 1,3,4,
- 1,2,6,
- 1,1,2,
- 1,1,16,
- 1,1,16,
- 1,3,4,
- 1,3,2,
- 1,2,2,
- 1,3,4,
- 0,0,4,
- 1,3,2,
- 1,5,2,
- 1,3,2,
- 1,2,2,
- 1,3,8,
- 1,1,4,
- 1,1,2,
- 1,2,2,
- 1,3,2,
- 1,5,2,
- 1,3,4,
- 1,2,4,
- 1,2,2,
- 1,1,2,
- 1,2,4,
- 0,0,4,
- 1,3,6,
- 1,5,1,
- 1,3,1,
- 1,6,2,
- 1,5,2,
- 1,5,4,
- 1,6,2,
- 1,5,2,
- 1,5,2,
- 1,3,2,
- 1,5,6,
- 1,5,2,
- 1,3,4,
- 1,2,2,
- 1,3,2,
- 1,5,4,
- 1,3,2,
- 1,2,2,
- 1,2,4,
- 1,2,2,
- 1,1,2,
- 1,2,8,
- 1,3,4,
- 1,3,2,
- 1,2,2,
- 1,3,4,
- 0,0,4,
- 1,3,2,
- 1,5,2,
- 1,3,2,
- 1,2,2,
- 1,3,8,
- 1,1,4,
- 1,2,1,
- 1,2,2,
- 1,3,2,
- 1,5,2,
- 1,3,4,
- 1,2,4,
- 1,2,2,
- 1,1,2,
- 1,2,4,
- 0,0,4,
- 1,3,6,
- 1,5,1,
- 1,3,1,
- 1,6,2,
- 1,5,2,
- 1,5,4,
- 1,6,2,
- 1,5,2,
- 1,5,2,
- 1,3,2,
- 1,5,8,
- 1,3,4,
- 1,2,2,
- 1,3,2,
- 1,5,4,
- 1,3,2,
- 1,2,2,
- 1,2,2,
- 1,1,2,
- 1,1,12,
- 1,1,2,
- 1,2,2,
- 1,3,4,
- 1,3,2,
- 1,5,2,
- 1,6,4,
- 1,6,2,
- 2,3,2,
- 2,2,2,
- 2,1,2,
- 2,1,2,
- 1,6,2,
- 1,5,8,
- 1,6,2,
- 1,5,2,
- 1,3,2,
- 1,2,2,
- 1,1,4,
- 0,6,2,
- 1,1,2,
- 1,2,4,
- 1,2,2,
- 1,1,2,
- 1,2,4,
- 1,1,2,
- 1,2,2,
- 1,3,4,
- 1,3,2,
- 1,3,5,
- 1,6,4,
- 1,6,2,
- 2,3,2,
- 2,2,2,
- 2,1,2,
- 2,1,2,
- 2,2,2,
- 2,1,8,
- 1,5,4,
- 1,5,2,
- 1,3,2,
- 1,7,2,
- 2,1,2,
- 1,1,2,
- 1,2,2,
- 1,3,8,
- 1,2,8,
- 1,1,16
- };
- for (int i=0; i<sizeof(yq)/(sizeof(int)*3); i++)
- {
- sound(yy[yq[i][0]][yq[i][1]]);
- delay(150*yq[i][2]);
- nosound();
- }
- return 0;
- }
附件:http://down.51cto.com/data/2356619
本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/384074,如需转载请自行联系原作者