c语言流星雨的实现_第1页
c语言流星雨的实现_第2页
c语言流星雨的实现_第3页
c语言流星雨的实现_第4页
c语言流星雨的实现_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:流星雨的实现学院:班级:姓名:学号:指导教师:时间:目录 一 课程设计目的2二 设计内容与要求3三 概要设计3四 详细设计4五 运行界面5六 设计总结15七 教师评语16一 课程设计目的程序模拟一组流星飞向地面的情境,地面用多行#来表示,流星用大写字母表示。二 设计内容与要求1 内容:程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。2 一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。三 概要设计 首先定义二维数组screen表示地面和天空,此数组是一个24行81列的字符数组。上面

2、的行表示天空,数组单元的值是空格;最下面的几行(如5行)表示地面,数组单元的值是#;整个屏幕的大小是80*25,即25行80列, 为了在输出最后一行时不换行滚屏,程序只能利用上面的24行空间。把数组定义成81列的目的是,每行的最后字符赋值成0,就可以按照字符串的方式输出每行文本了。 编写的程序在下降过程中,程序必须知道流星的字符、颜色、位置、速度,因此程序需要定义以下几个数组变量:存放流星字符的数组,存放流星字符颜色的数组,存放流星行位置的数组,存放流星列位置的数组,存放流星下降速度的数组。 输出时程序首先输出地面和天空,即输出定义的二维数组screen中的字符串,前21行是空行,后3行是#号

3、。这样screen2481的字符矩阵就与整个屏幕对应起来。然后随时机产生一组流星数据,包括字符、颜色、位置和速度。速度用一次下降多少行来表示,最大的速度是4。由于要随机产生这些数据,因此需要调用random函数。(random函数的原型是 int random(int num); 这个函数产生一个0num-1之间的一个随机数。 流星字符可以这样产生:random(26)+A; 流星字符的颜色可以这样产生:random(16)+1;流星下降的位置可以这样产生:random(4)+1;流星的行位置一开始都是1; 流星的列位置可以这样产生:random(80)+1;但要保证所有流星的列位置不能相同。

4、调用random之前,用randomize()库函数进行初始化。 两个库函数都在stdlib.h文件中。)设置后,每个流星按照自己的速度下落,所谓的下落就是逐行移动流星字符: 在下一行新的位置上显示流星字符,在原来的位置上显示空格以便擦除流星字符,然后再延迟等待几十毫秒。这样循环往复就构成了流星下落的动画。 但要注意,流星的速度各不相同,而一次下落多行的流星也要逐行下落。如果流星的新位置所对应的screen的单元格的值是#,则表示撞到了地面。 这种情况下在流星的新位置上输出空格,擦除#号,并且对screen相应的单元赋值为空格,流星字符也要赋值为空格,以表示流星消失。当screen23中任何一

5、个单元格是空格时,程序终止。四 详细设计模块一:输入天空和地面,天空和地面都是静止的。模块二:产生一组流星,流星的表示。模块三:流行的颜色,位置,速度。模块四:若碰到#号,流星和#号同时消失。模块五:若第24行的流星被碰到,程序终止。流星的实现输入天空和地面产生一组流星流行的颜色,位置,速度若碰到#号,流星和#号同 五 运行界面1 程序框图2 程序清单#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>#include <conio.h>

6、#define ROW24#define COL81#define REAL100#define NUM10 #define SPEED4 int random(int num);static void setSky();static void display();int check_last_row();void word_n_down();int word_one_down(int begin,int position,int speed ,int word,int *word_end);void gotoxy(int x,int y);char sky_groundREALCOL;int

7、 test = 0;int cycle_end = 0;int word_endNUM;int list = 0;int beginNUM;int positionNUM;int wordNUM;int speedNUM;int main()int end_flag = 0;time_t t; srand(unsigned) time(&t);setSky();while(!(end_flag = check_last_row()for(int a=0;a<NUM;a+)word_enda = 0;list = 0;cycle_end = 0;word_n_down();syst

8、em("pause");return 0;static void setSky()for(int b=0;b<REAL;b+)for(int c=0;c<COL-1;c+)sky_groundbc = ' 'sky_groundbCOL-1 = '0'for(int d=ROW-5;d<ROW;d+)for(int e=0;e<COL-1;e+)sky_groundde = '#'sky_grounddCOL-1 = '0'static void display()gotoxy(0,0)

9、;for(int f=0;f<ROW;f+)printf("%s",sky_groundf);int random(int num)return(rand() % num);int check_last_row()for(int g=0;g<COL;g+)if(sky_ground23g = ' ')return 1;return 0;void word_n_down()for(int h=0;h<NUM;h+)beginh = random(ROW-5);positionh = random(COL-2);wordh = random(2

10、6) + 'A'speedh = random(SPEED)+1;while(1)if(cycle_end >= NUM)break;test = list-1;if(test < 0)test = 0;if(check_last_row()system("pause");exit(0);for(int i=0;i<NUM;i+)word_one_down(begini,positioni,speedi, wordi,&word_endi);list +;display();Sleep(200);int word_one_down(

11、int begin,int position,int speed,int word,int *word_end)if(*word_end) = 0)if(begin+list*speed >= ROW)return 0;sky_groundbegin+test*speedposition = ' 'if(begin+list*speed >= 19)for(int z=19;z<ROW;z+)if(sky_groundzposition = '#')sky_groundzposition = ' '*word_end = 1;c

12、ycle_end +;break;elsesky_groundbegin+list*speedposition = word;return 0;void gotoxy(int x,int y)COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );3、系统运行结果六 设计总结经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。虽然设计时完成了,但是我觉得其中还是由一些不足之处:1. 警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)?”。2. 重名的情况。由于考虑的不周全,没有设计遇到重名的情况该怎么处理。3. 选择单一。我们设计的程序中,只设计了按名字选择,进行操作,忽略了重名的情况。短短的一周课程设计结束了,但是这段时间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论