回 帖 发 新 帖 刷新版面

主题:求助各位高手


这是一个高手的帖子~哪位高手能把它改成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);
    /*确定保存图像所需的存储区大小*/
}

回复列表 (共1个回复)

沙发

自己动手才有用。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册