主题:求助各位高手
这是一个高手的帖子~哪位高手能把它改成C++格式的呀~拜托了!~急用~
/*
火箭每飞一周再回原处刷新显示成功
如果火箭没飞回发射台附近就按esc键盘 屏幕会显示:
Failue.The rocket isn't fly back!What did you do?
Press any key to quit.
然后接收按键退出
如果火箭在发射态附近就按esc键盘 屏幕会显示:
Press any key to quit.
然后接收按键退出
*/
#include<graphics.h> /*下面是对程序中的某些函数做预定义*/
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<alloc.h>
#include<math.h>
#define ESC 0x1b /*ESC的ASCII码,十六进制数*/
#define MIDX 310 /*圆心坐标x*/
#define MIDY 240 /*圆心坐标y*/
#define R 180 /*圆的半径*/
#define CYCLEPART 180 /*圆的等分数最好设置成60的倍数*/
#define CYCLEBEGIN 3*CYCLEPART/4 /*开始在第CYCLEBEGIN等分*/
void InstallGraph(void); /*图形初始化函数的声明*/
void DrawGun(void); /*画发射架函数的声明*/
void DrawPlan(void); /*画火箭函数的声明*/
void DrawStar(void); /*画星函数的声明*/
void *buf; /*全局变量,用于存储火箭的图像*/
int x0; /*火箭的位置参数*/
int y0;
int width1=5; /*对火箭上部的宽度定义*/
int width2=20; /*对火箭下部的宽度定义*/
int height=25; /*对火箭的高度定义*/
int y1=8;
int y2=15;
int y3=23;
int y4=38;
main()
{
int tx,ty; /*tx ty用来存储当前的上一个火箭坐标*/
int size;
int i=0;
int key;
int station;
i=CYCLEBEGIN;
x0=MIDX-R*cos((360/CYCLEPART)*i*3.1415926/180);/*初始化火箭的位置参数*/
y0=MIDY-R*sin((360/CYCLEPART)*i*3.1415926/180);
InstallGraph(); /*图形初始化函数*/
setbkcolor(BLUE); /*设置背景颜色*/
cleardevice(); /*清除屏幕的图形*/
setcolor(RED); /*设置字的颜色*/
outtextxy(80,100,"Ready!!!...Now,any key to SET OFF !!!"); /*在屏幕上输出字符*/
DrawGun(); /*调用画火箭架函数*/
getch(); /*从键盘上无回显的接收一个字符*/
cleardevice(); /*再一次清除屏幕图形*/
DrawPlan(); /*调用画火箭函数*/
DrawGun(); /*再一次调用画火箭架函数*/
DrawStar(); /*调用画星星函数*/
setcolor(LIGHTRED); /*设置画线的颜色*/
do
{
tx=x0;ty=y0;
putimage(tx-width2,ty-height-3*width1,buf,XOR_PUT);
/*主循环开始,用于移动火箭,方法是用异或方式在屏幕上连续画出火箭的图像,每画一次,新图像和原来的位置相差若干
个像素点。这个值越大,飞行速度越快*/
i+=1;
if(i>CYCLEPART)
i=0; /*形成连贯*/
x0=MIDX-R*cos((360/CYCLEPART)*i*3.1415926/180); /*求得下一个火箭位置*/
y0=MIDY-R*sin((360/CYCLEPART)*i*3.1415926/180);
putimage(x0-width2,y0-height-3*width1,buf,XOR_PUT);
key=getch(); /*从键盘上无回显的接收一个字符,并赋值*/
if(i==CYCLEBEGIN) /*如果火箭跑一圈*//*若需火箭跑一圈自动退出画面 可在这个if结构里加入代码*/
outtextxy(60,100,"Successfully!!!The rocket fly a circle!!!Press ESC to quit");/*在屏幕上输出字符*/
if (key==ESC)
{
if (i>CYCLEBEGIN+4 || i<CYCLEBEGIN-4) /*如果火箭没有在发射台附近*/
{
cleardevice(); /*再一次清除屏幕图形*/
outtextxy(100,100,"Failue.The rocket isn't fly back!What did you do?");/*在屏幕上输出字符*/
outtextxy(130,300," Press any key to quit."); /*在屏幕上输出字符*/
getch(); /*再从键盘上无回显的接收一个字符*/
}
else
{
cleardevice(); /*再一次清除屏幕图形*/
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(); /*返回可以传给函数setcolor的最大颜色值,并赋值*/
width=getmaxx(); /*返回屏幕的最大X坐标,并赋值*/
height=getmaxy(); /*返回屏幕的最大Y 坐标并赋值*/
srand(seed); /*初始化随机数发生器*/
for(i=0;i<1000;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,WHITE); /*设置填充模式和颜色*/
floodfill(x0,y0,LIGHTRED); /*填充一个有界区域*/
size=imagesize(x0-width2-1,y0-height-3*width1,x0+width2+1,y0+y4);/*返回保存位图像所需的字节数*/
buf=malloc(size); /*从堆中分配大小为size字节的块*/
if(!buf){printf("No enough memory!"); /*如果火箭图象没有生成*/
exit(0); /*退出*/
}
getimage(x0-width2,y0-height-3*width1,x0+width2,y0+y4,buf);
/*确定保存图像所需的存储区大小*/
}