那有模拟火箭升空的程序?

发布网友 发布时间:2022-04-24 04:11

我来回答

3个回答

热心网友 时间:2023-10-26 23:45

这是用C语言编的.
一、选题背景:
神六飞天,中华民族终于实现了几千年以来的飞天梦想!也是世界上第三个航天成功的国家,预示着中国的综合国力进一步增强,也标示着中国的航天技术处于世界一流水平。
火箭发射在人们心中只是一个近似与迷的话题,这里用C语言编写的程序可以简单的模拟火箭的发射,趣味性和科学性共存其中。
二、设计思想:
本程序主要应用了绘图函数。调用Install Graph ()的函数来绘出发射架与火箭setcolor()设置图象颜色,ellipsel(), moveto,line to(),用来生成图象,有键盘键入值来增加火箭的运行轨迹,每次判析是否有键入成按下了ESC则程序退出,否则继续增加直至火箭消失在屏幕,够按将提示按ESC键退出程序。
三、程序流程图:

四:程序清单
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<alloc.h>
#define ESC 0x1b
void InstallGraph(void);
void DrawGun(void);
void DrawPlan(void);
void DrawStar(void);
void *buf;
int x0=300;
int y0=340;
int width1=5;
int width2=20;
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(BLACK);
cleardevice();
setcolor(BLUE);
outtextxy(80,100,"Ready!...Any key to SET OFF !!!");
DrawGun();
getch();
cleardevice();
DrawGun();
DrawPlan();
DrawStar();
setcolor(LIGHTRED);
do{putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);
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-i>0){
cleardevice();
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=DETECT;
int grmode;
int errorcode;
char *errormsg;
initgraph(&grdriver,&grmode," ");
errorcode=graphresult();
errormsg=grapherrormsg(errorcode);
if(errorcode!=grOk){
printf("Graphics error: %s\n",errormsg);
printf("Press any key to exit.\n");
getch();
exit(1);
}
}
void DrawStar(void)
{
int seed=2000;
int i,dotx,doty,height,width,color,maxcolor;
maxcolor=getmaxcolor();
width=getmaxx();
height=getmaxy();
srand(seed);
for(i=0;i<250;i++){
dotx=i+random(width-1);
doty=i+random(height-1);
color=random(maxcolor);
setcolor(color);
putpixel(dotx,doty,color);
circle(dotx+1,doty+1,1);
}
srand(seed);
}
void DrawGun(void)
{
int x0=300;
int y0=430;
int height=45;
int rx=20;
int ry=5;
int rightx,righty,leftx,lefty;
int centery1=30;
rightx=righty=leftx=lefty=12;
setcolor(LIGHTGREEN);
ellipse(x0,y0,180,360,rx,ry);
ellipse(x0,y0-height,0,360,rx,ry);
line(x0+rx,y0,x0+rx,y0-height);
line(x0-rx,y0,x0-rx,y0-height);
moveto(x0+rx,y0);
lineto(x0+rx+rightx,y0+righty);
moveto(x0+rx+rightx,y0+righty);
lineto(x0+rx+rightx+10,y0+righty+10);
circle(x0+rx+rightx+10,y0+righty+10,4);
moveto(x0,y0+ry);
lineto(x0,y0+centery1);
moveto(x0,y0+centery1);
lineto(x0,y0+centery1+10);
circle(x0,y0+centery1+10,4);
moveto(x0-rx,y0);
lineto(x0-rx-leftx,y0+lefty);
moveto(x0-rx-leftx,y0+lefty);
lineto(x0-rx-leftx-10,y0+lefty+10);
circle(x0-rx-leftx-10,y0+lefty+10,4);
line(x0-rx-leftx,y0+lefty,x0,y0+centery1);
line(x0,y0+centery1,x0+rx+rightx,y0+righty);
}
void DrawPlan(void)
{
int size;
setcolor(LIGHTRED);
setfillstyle(1,BLUE);
ellipse(x0,y0-height,0,180,width1,3*width1);
moveto(x0+width1,y0);
lineto(x0+width1,y0-height);
moveto(x0+width1,y0);
lineto(x0+width2,y0+y2);
moveto(x0-width1,y0);
lineto(x0-width1,y0-height);
moveto(x0-width1,y0);
lineto(x0-width2,y0+y2);
moveto(x0+width2,y0+y3);
lineto(x0+width2,y0+y1);
moveto(x0+width2,y0+y3);
lineto(x0+width1,y0+y2);
moveto(x0-width2,y0+y3);
lineto(x0-width2,y0+y1);
moveto(x0-width2,y0+y3);
lineto(x0-width1,y0+y2);
moveto(x0,y0+y4);
lineto(x0+width1,y0+y2);
moveto(x0,y0+y4);
lineto(x0-width1,y0+y2);
setfillstyle(2,LIGHTRED);
floodfill(x0,y0,LIGHTRED);
size=imagesize(x0-width2-1,y0-height-3*width1,x0+width2+1,y0+y4);
buf=malloc(size);
if(!buf){printf("No enough memory!");
exit(0);}
getimage(x0-width2,y0-height-3*width1,x0+width2,y0+y4,buf);
}
五、主要问题的解决方法及技术关键
1、主要问题的解决方法:
用“graphics.h”库存函数实现图形的初试化绘制。并利用setcolour()( 显示当前要画线颜色)和循环语句实现图形的颜色随时间周期变换。
利用cleardevice()实现清除图形功能。
2、技术关键:
程序的关键在与判断如何实现火箭的升空的过程。用to语句来判断是否有键盘敲击时则让火箭移动指定的像素(这里为五个像素),否则停止移动。这个像素值与是控制火箭的飞行速度,值大则快、小就慢。Putimage()用来向新位置绘画出火箭的图象。通过获取key的值来通知程序是否继续进行下去。
六、设计结果说明
1、设计优点:
能够手动控制游戏结束,实现人机互动。
多种颜色配置,桌面美观。
2.设计不足:
游戏过于简单,可玩性差。

热心网友 时间:2023-10-26 23:45

这么牛的题目啊,估计得用OPENGL或者DIRECTX了
咱弄不了

问问你同学录象行不行,神州5号的录象我有

热心网友 时间:2023-10-26 23:46

...你想做什么?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com