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

下载本文档

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

文档简介

1 题目:流星雨的实现题目:流星雨的实现 学院:学院: 班级:班级: 姓名:姓名: 学号:学号: 指导教师:指导教师: 时间:时间: 2 目录目录 一一 课程设计目的课程设计目的.2 二二 设计内容与要求设计内容与要求.3 三三 概要设计概要设计.3 四四 详细设计详细设计.4 五五 运行界面运行界面.5 六六 设计总结设计总结.15 七七 教师评语教师评语.16 3 一一 课程设计目的课程设计目的 程序模拟一组流星飞向地面的情境,地面用多行#来表示,流星 用大写字母表示。 二二 设计内容与要求设计内容与要求 1 内容:程序产生一组流星(比如 10 个) ,从屏幕顶部下降 飞向地面。 2 一组流星中,每个流星的字符颜色是随机的,下降的位置 是随机的,下降的速度也是随机的。一个流星下落只能去掉一个 #号,当最后一行地面有#被去掉时,程序终止。 三三 概要设计概要设计 首先定义二维数组 screen 表示地面和天空,此数组是一个 1 24 行 81 列的字符数组。上面的行表示天空,数组单元的值是空格; 最下面的几行(如 5 行)表示地面,数组单元的值是#;整个屏幕 的大小是 80*25,即 25 行 80 列, 为了在输出最后一行时不换行滚 屏,程序只能利用上面的 24 行空间。把数组定义成 81 列的目的是, 每行的最后字符赋值成0,就可以按照字符串的方式输出每行文本 了。 编写的程序在下降过程中,程序必须知道流星的字符、颜色、 2 位置、速度,因此程序需要定义以下几个数组变量:存放流星字符 4 的数组,存放流星字符颜色的数组,存放流星行位置的数组,存放 流星列位置的数组,存放流星下降速度的数组。 输出时程序首先输出地面和天空,即输出定义的二维数组 3 screen 中的字符串,前 21 行是空行,后 3 行是#号。这样 screen24 81的字符矩阵就与整个屏幕对应起来。然后随时机产生一组流星 数据,包括字符、颜色、位置和速度。速度用一次下降多少行来表 示,最大的速度是 4。由于要随机产生这些数据,因此需要调用 random 函数。 (random 函数的原型是 int random(int num); 这个 函数产生一个 0num-1 之间的一个随机数。 流星字符可以这样产 生:random(26)+A; 流星字符的颜色可以这样产生:random(16) +1;流星下降的位置可以这样产生:random(4)+1;流星的行位置一 开始都是 1; 流星的列位置可以这样产生:random(80)+1;但要保 证所有流星的列位置不能相同。调用 random 之前,用 randomize() 库函数进行初始化。 两个库函数都在 stdlib.h 文件中。 )设置后,每 个流星按照自己的速度下落,所谓的下落就是逐行移动流星字符: 在下一行新的位置上显示流星字符,在原来的位置上显示空格以便 擦除流星字符,然后再延迟等待几十毫秒。这样循环往复就构成了 流星下落的动画。 但要注意,流星的速度各不相同,而一次下落多 行的流星也要逐行下落。如果流星的新位置所对应的 screen 的单元 格的值是#,则表示撞到了地面。 这种情况下在流星的新位置上 输出空格,擦除#号,并且对 screen 相应的单元赋值为空格,流星字 符也要赋值为空格,以表示流星消失。 5 当 screen23中任何一个单元格是空格时,程序终止。 4 四四 详细设计详细设计 模块一:输入天空和地面,天空和地面都是静止的。 模块二:产生一组流星,流星的表示。 模块三:流行的颜色,位置,速度。 模块四:若碰到#号,流星和#号同时消失。 模块五:若第 24 行的流星被碰到,程序终止。 流星的实现 输入天空和地 面 产生一组流星流行的颜色, 位置,速度 若碰到#号, 流星和#号同 6 五五 运行界面运行界面 1 程序框图 2 程序清单 #include #include #include 7 #include #include #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 test = 0; int cycle_end = 0; 8 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( setSky(); while(!(end_flag = check_last_row() for(int a=0;aNUM;a+) word_enda = 0; list = 0; cycle_end = 0; word_n_down(); 9 system(pause); return 0; static void setSky() for(int b=0;bREAL;b+) for(int c=0;cCOL-1;c+) sky_groundbc = ; sky_groundbCOL-1 = 0; for(int d=ROW-5;dROW;d+) for(int e=0;eCOL-1;e+) sky_groundde = #; sky_grounddCOL-1 = 0; 10 static void display() gotoxy(0,0); for(int f=0;fROW;f+) printf(%s,sky_groundf); int random(int num) return(rand() % num); int check_last_row() for(int g=0;gCOL;g+) if(sky_ground23g = ) 11 return 1; return 0; void word_n_down() for(int h=0;h= NUM) break; test = list-1; if(test = 19) 13 for(int z=19;zROW;z+) if(sky_groundzposition = #) sky_groundzposition = ; *word_end = 1; cycle_end +; break; else sky_groundbegin+list*speedposition = word; return 0; void gotoxy(int x,int y) COORD coord; coord.X=x; 14 coord.Y=y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); 3、系统运行结果 15 六六 设计总结设计总结 经过一个星期的上机实践学习,使我对C语言有了更进一步 的认识和了解,要想学好它要重在实践,要通过不断的上机操作 才能更好地学习它,通过实践,我也发现我的好多不足之处,首 先是自己在指法上还不行,经常按错字母,通过学习也有所改进; 再有对C语言的一些标准库函数不太了解,还有对函数调用的正 确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通 过实践,使我在这几个方面的认识有所提高。 虽然设计时完成了,但是我觉得其中还是由一些不足之处: 1. 警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)? 1 ”。2. 重名的情况。由于考虑的不周全,没有设计遇到重名的情 况该怎么处理。3. 选择单一。我们设计的程序中,只设计了按名 字选择,进行操作,忽略了重名的情况。短短的一周课程设计结 束了,但是这段时间里,我又学到了更多C 知识,如:对象数组, string类,文件流等

温馨提示

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

评论

0/150

提交评论