《用C语言实现火箭的升空》由会员分享,可在线阅读,更多相关《用C语言实现火箭的升空(10页珍藏版)》请在金锄头文库上搜索。
1、/计算机程序设计-课程设计(C 语言)题目:用 C 语言实现火箭的升空学院:专业:班级:姓名:指导教师:设计日期:一. 选题背景:问题的提出:在科学技术高度发达的世界的今天,人类向太空的探索已经进入了热门化阶段,伴随着我国航天事业的飞速发展,选择了此次程序的设计。在此,用 C 语言编制的程序,实现了对火箭“升空”的“键盘”控制。二.设计思路.本程序是从画火箭架、星星、火箭以及发射火箭进行的完整过程。画火箭架是用了调用函数 DrawGun()函数,这其中是用了两个 ellipse()函数画上面的完整椭圆以及下面的半椭圆,然后分别用 moveto()函数和 lineto()函数进行移动画线点和执行
2、画线过程。其中定义的 rightx ,righty ,leftx ,lefty 以及 centry1 ,rx ,ry ,变量对实现每个交叉点建的连线提供了条件,然后用 circle()函数对三条线的端点分别用函数画圆,就是用以上的方法实现了画火箭发射架的过程;画星星调用了 Drawstar()函数,主要就是用 srand()函数对每个象素进行随机分布以及用 random()函数和 setcolor()函数对每一个象素进行颜色处理,再用 circle()函数对每一个象素进行了放大处理(在每一个象素上画一个小圆) ;画火箭调用了 DrawPlan()函数,主要是用 ellipse()函数对火箭的顶
3、部画椭圆,并再次用 moveto()函数和 lineto()函数对火箭的外观轮廓进行画线处理,定义的 width1 ,width2 ,y0 ,y1 ,y2 ,y3 ,y4 等变量对火箭的绘制的精确有了保障。其中用的setcolor()函数设置了此画线的颜色,并用了 setfillstyle()函数设置了岁火箭的闭合轮廓天填充的模式和颜色,再用了 floodfill()函数对火箭轮廓不同颜色的填充,当然这其中也用了 setfillstyle()函数的两次不同的应用。为使火箭的图象处于稳定的状态,当完成画火箭后,又用了 imagesize()函数返回了保存此图象所需要的字节数目,这对此次程序是直关
4、重要的了;发射火箭是用了循环语句do-while结构,并用了putimage()函数用与移动火箭的图象,方法是方法是用异或方式在屏幕上连续画出火箭的图像,每画一次,新图像和原来的位置相差两个像素点。这个值越大,飞行速度越快。运行的退出是用了free()函数释放分配的块,并用了closegraph()函数关闭了图形系统,除了以上主要的介绍外,此程序还用了如outtextxy()函数(在指定的位置输出指定的内容,如“继续”,“返回”等所需要的条件等),setbkco()lor函数(设置屏幕的颜色),InstallGraph()函1数(图形初始化函数),getch()函数(从键盘无回显的接收一个字符
5、,用于控制火箭的进程的“端口”),等一系列的函数来设计此次程序。三、主要解决问题的方法及技术关键1.主要问题及解决方法 火箭及火箭发射架的画法问题。因为火箭和火箭架都不是简单的如正方、长方形等图形,而是由一些椭圆和圆形组织而成的复杂图形。这就对火箭以及火箭架的画法提出了问题:如何画?解决的方法是用 moveto()和 lineto()函数来连接火箭或火箭架的每一个交叉点(接点) 。 屏幕的美观问题,即程序中对星星的显示大小问题。此次程序如何用 C 语言来更加现实化的显示星星?在这里有一个很巧妙的方法就是用 circle()函数以每个像素为圆心画一个小圆,这样做不仅美观,而且增加了现实性。 火箭
6、艰苦的移动问题。火箭虽然是比较圆满的画出,但移动火箭却遇到了困难,如何移动?再这里,是用了 do-while 结构以及 putimage()函数,设置了每接收一个字符前后的位图就相差几个像素点(本程序中相差 2 个像素点) 。 满天繁星的美丽天空如何制作?此程序中的解决方法是用一个 for 循环结构和 random()函数对“天空” 中的星星进行随机分布显示,这也是一种很巧妙的方法,这样即成了满天繁星的美观场景。2.技术关键 对火箭的移动技术。 (do-while 以及 putimage()的应用) 对火箭的位图的字节保存过程。 四:程序流程图 定义、赋值、包含的头文件、函数声明.进入主函数,
7、定义调用库函数。If 条件语句判断断断为假时调用画火箭架函数DrawGun() 。为真退出五.程序清单:#include /*下面是对程序中的某些函数做预定义*/#include#include#include#include#define ESC 0x1b /*ESC的ASCII码,十六进制数*/void InstallGraph(void); /*图形初始化函数的声明*/void DrawGun(void); /*画发射架函数的声明*/void DrawPlan(void); /*画火箭函数的声明*/void DrawStar(void); /*画星函数的声明*/void *buf; /*
8、全局变量,用于存储火箭的图像*/int x0=300; /*以下是火箭的位置初始化参数*/int y0=340;int width1=5; /*对火箭上部的宽度定义*/调用画星星函数 DrawStar().调用画火箭函数DrawPlan().If 条件句判断字节数与内存的大小关系为真,退出为假,保存到主页中用 do-while 结构及putimage()函数移动火箭当输入字符不为 ESC 时,If 条件句判断:发射完毕时当输入字符为ESC 时,循环一次。 用 free()函数释放单元,用CloseGraph()函数关闭图形系统,退出运行过程。int width2=20; /*对火箭下部的宽度定
9、义*/int height=25; /*对火箭的高度定义*/int y1=8; int y2=15;int y3=23;int y4=38;main()int size; /*以下是定义几个变量*/ int i=0;int key;int station;InstallGraph(); /*图形初始化函数*/setbkcolor(WHITE); /*设置背景颜色*/cleardevice(); /*清除屏幕的图形*/setcolor(RED); /*设置字的颜色*/outtextxy(80,100,Ready!.Now,any key to SET OFF !); /*在屏幕上输出字符*/Dr
10、awGun(); /*调用画火箭架函数*/ getch(); /*从键盘上无回显的接收一个字符*/cleardevice(); /*再一次清除屏幕图形*/setbkcolor(BLUE); /*再次设置屏幕颜色*/DrawGun(); /*再一次调用画火箭架函数*/ DrawPlan(); /*调用画火箭函数*/ DrawStar(); /*调用画星星函数*/ setcolor(LIGHTRED); /*设置画线的颜色*/doputimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);/*主循环开始,用于移动火箭,方法是用异或方式在屏幕上连续画出火
11、箭的图像,每画一次,新图像和原来的位置相差两个像素点。这个值越大,飞行速度越快*/i+=2; putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);key=getch(); /*从键盘上无回显的接收一个字符,并赋值*/if(y0-height-3*width1-i=0) /*如果火箭发射成功*/ outtextxy(60,100,Successfully! Press ESC to quit); /*在屏幕上输出字符*/if (key=ESC)if (y0-height-3*width1-i0) /*如果在发射过程中*/cleardevice
12、(); /*再一次清除屏幕图形*/outtextxy(100,100,Failue. What did you do?); /*在屏幕上输出字符*/outtextxy(130,300,Press any key to quit.); /*在屏幕上输出字符*/getch(); /*再从键盘上无回显的接收一个字符*/while(key!=ESC);free(buf); /*释放已分配的块*/ closegraph(); /*操作已经完成,关闭图形系统*/return 0; /*返回编辑界面*/void InstallGraph(void) /*图形初始化函数*/int grdriver=DETEC
13、T; /*以下是定义几个变量*/ int grmode;int errorcode;char *errormsg; /*定义一个字符型指针,因为后面的语句所返回的是一个指针*/initgraph(&grdriver,&grmode, ); /*初始化图形系统*/errorcode=graphresult(); /*返回最后一次不成功的图形操作的错误代码,并赋值*/ errormsg=grapherrormsg(errorcode); /*返回一个错误信息串的指针,并赋值*/if(errorcode!=grOk)printf(Graphics error: %sn,errormsg); /*输出
14、错误的信息串*/printf(Press any key to exit.n); /*输出退出返回编辑界面的条件*/getch(); /*从键盘上接收一个字符以返回*/exit(1); /*返回退出*/ void DrawStar(void) /*画星函数*/int seed=2000; /*以下是定义几个变量*/int i;int dotx; int doty,height;int width;int color;int maxcolor;maxcolor=getmaxcolor(); /*返回可以传给函数setcolor的最大颜色值,并赋值*/width=getmaxx(); /*返回屏幕的最大X坐标,并赋值*/height=getmaxy(); /*返回屏幕的最大Y 坐标并赋值*/srand(seed);/*初始化随机数发生器*/i=0;for(;i1000;i+