⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dikongduizhan.c

📁 几个C语言小游戏源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*江西理工大学*/
drawmat(jiang16S,16,320,400,8);
drawmat(xi16S,16,336,400,8);
drawmat(li16S,16,352,400,8);
drawmat(gong16S,16,368,400,8);
drawmat(da16S,16,384,400,8);
drawmat(xue16S,16,400,400,8);
/*电子信息科学与技术 专业*/
drawmat(dian16S,16,320,432,8);
drawmat(zi16S,16,336,432,8);
drawmat(xin16S,16,352,432,8);
drawmat(xi16S2,16,368,432,8);
drawmat(ke16S,16,384,432,8);
drawmat(xue16S,16,400,432,8);
drawmat(yu16S,16,416,432,8);
drawmat(ji16S,16,432,432,8);
drawmat(shu16S,16,448,432,8);
drawmat(zhuan16S,16,472,432,8);
drawmat(ye16S,16,486,432,8);
    /*画启动坦克*/
setfillstyle(1,4);
bar(270,240,370,340);
setfillstyle(1,14);
bar(280,250,360,330);
setfillstyle(1,GREEN);
fillellipse(320,290,30,30);
setfillstyle(1,8);
fillellipse(320,290,20,20);
setfillstyle(1,8);
bar(310,180,330,300);

/*声音*/
for(i=100;i<=500;i=i+100)
    {
    sound(i);
    sleep(1);
    nosound();
    }
}
/*******************************************************************************
** 函数名称:bkground
** 函数描述:画天地环境
** 输入参数:无
** 输出参数:无
*******************************************************************************/
int bkground()
{
    setfillstyle(1,1);  /*draw sky*/
    bar(50,0,640,130);
    setfillstyle(1,3);
    bar(50,130,640,320);
    setfillstyle(1,14);  /*draw land*/
    bar(50,320,640,480);
}
/*******************************************************************************
** 函数名称:grass
** 函数描述:画草地
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int grass(int x,int y)
{
    setcolor(2);
    line(x,y,x-3,y-5);
    line(x,y,x+3,y-5);
    line(x,y,x,y-8);
}
/*******************************************************************************
** 函数名称:tree
** 函数描述:画树
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int tree(int x,int y)
{
    setfillstyle(1,6);
    bar(x-5,y,x+5,y-50);
    setfillstyle(1,2);
    setcolor(2);
    fillellipse(x,y-65,30,20);
    fillellipse(x,y-85,18,25);
}
/*******************************************************************************
** 函数名称:tank
** 函数描述:画坦克
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int tank(int fx,int x,int y)/*fx是方向参数,1代表left,0代表right*/
{   /*坦克length=50,height=70 */
    int *earth;
    int sizee;

    if (tankstart==1)                              /*运行时地面环境处理*/
        {
        if(fx==1)
            {putimage(x-15,y-45,earth,COPY_PUT);} /*还原空地,覆盖坦克*/
        else if (fx==0)
            {putimage(x-35,y-45,earth,COPY_PUT);}
            free(earth);
            getimage(x-25,y-45,x+25,y+20,earth);      /*更新存储地面环境  */
        }
            
    if (tankstart==0)                              /*初始化坦克        */
        {tankstart=1;
        sizee=imagesize(x-25,y-45,x+25,y+20) ;
        earth=malloc(sizee);
        getimage(x-25,y-45,x+25,y+20,earth);      /*初次存储地面环境  */
        }

 

               /*画坦克*/
    setfillstyle(1,4);
    bar(x-25,y-20,x+25,y+20);
    setfillstyle(1,14);
    bar(x-21,y-16,x+21,y+16);
    setfillstyle(1,8);
    fillellipse(x,y,10,10);
    bar(x-4,y,x+4,y-45);
}
/*******************************************************************************
** 函数名称:plmid
** 函数描述:画中型飞机
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int plmid(int x,int y,int show)
{   /*飞机length=78,height=60 */
    int *plmid;
    int sizep;
    if (show==1)
    {
        if (planstart==0)
            {
            sizep=imagesize(x,y-30,x+78,y+30);
            plmid=malloc(sizep);
            getimage(x,y-30,x+78,y+30,plmid);/*初次环境存图*/
            planstart=1;
            }
    putimage(x+10,y-30,plmid,COPY_PUT); /*还原环境*/
    free(plmid);


    /*画飞机*/
    setcolor(LIGHTBLUE);
    line(x,y,x+10,y-5); /* 机头 */
    line(x,y,x+10,y+5);
    /*bar(x+10,y-5,x+70,y+5);机身,闪烁 */
    rectangle(x+10,y-5,x+70,y+5);/*机身*/
    line(x+30,y-5,x+49,y-30);/* 上机翼 */
    line(x+49,y-30,x+60,y-30);
    line(x+60,y-30,x+46,y-5);
    line(x+33,y+3,x+55,y+30);/* 下机翼 */
    line(x+55,y+30,x+65,y+30);
    line(x+65,y+30,x+50,y+2);
    line(x+70,y+5,x+78,y+15);/* 尾翼   */
    line(x+78,y+15,x+78,y-15);
    line(x+78,y-15,x+70,y-5);
    }
}

/*******************************************************************************
** 函数名称:plsml
** 函数描述:画小型飞机
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int plsmal(int x,int y,int show)
{
/*length=50,height=36*/
if (show==1)
    {


    setcolor(RED);
    {line(x,y,x+50,y);/*前机身*/
    line(x,y,x+16,y-10);
    line(x+16,y-10,x+35,y);
    line(x+35,y,x+50,y-15);/*后机身*/
    line(x+50,y-15,x+50,y);
    line(x+14,y-8,x+20,y-20);/*上机翼*/
    line(x+20,y-20,x+28,y-20);
    line(x+28,y-20,x+22,y-6);
    line(x+12,y-3,x+20,y+16); /*下机翼*/
    line(x+20,y+16,x+28,y+16);
    line(x+28,y+16,x+20,y-3);
    }
    }
}

/*******************************************************************************
** 函数名称:plsml
** 函数描述:画小型飞机
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int plbig(int x,int y,int show)
{
/*length=120,height=95*/
if (show==1)
    {

    setcolor(RED);
    ellipse(x,y,0,360,40,15);/*前机身*/
    line(x+40,y,x+65,y-30);/*后机身*/
    line(x+65,y-30,x+80,y-30);
    line(x+80,y-30,x+80,y);
    line(x+80,y,x+40,y);
    line(x-5,y,x+5,y+50);/*下机翼*/
    line(x+5,y+50,x+20,y+50);
    line(x+20,y+50,x+10,y);
    line(x-3,y-15,x+3,y-45); /*上机翼*/
    line(x+3,y-45,x+18,y-45);
    line(x+18,y-45,x+15,y-14);
    }
}
/*******************************************************************************
** 函数名称:shot
** 函数描述:
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int shot(int x,int y)
{   int *buf;
    getimage(x-5,y-5,x+5,y+5,buf);
    setcolor(8);setfillstyle(1,8);
    fillellipse(x,y,4,5); delay(10000);
    putimage(x-5,y-5,buf,COPY_PUT);
}
/*******************************************************************************
** 函数名称:boom
** 函数描述:绘制飞机中弹后的爆炸效果
** 输入参数:x,y
** 输出参数:无
*******************************************************************************/
int boom(int x,int y)
{setcolor(RED);
circle(x+40,y,20);
pieslice(x+40,y,0,360,18);
line(x,y,x+80,y);
line(x+40,y-40,x+40,y+40);
line(x+20,y-30,x+60,y+30);
line(x+60,y-30,x+20,y+30);
}
/*******************************************************************************
** 函数名称:drawmouse
** 函数描述:画鼠标
** 输入参数:x,y,fl
** 输出参数:无
*******************************************************************************/
void drawmouse(int x,int y,int fl)
{
/*fl表示先后顺序,即first/last,0表示先,1表示后*/
    int *buf;
    int size;
if(x>=630)
    {y=630;}
if(y<10)/*防止鼠标到达屏幕上边界时候出错,以免程序异常退出*/
    {x=10;}

else
    {
    size=imagesize(x,y-5,x+15,y+15);
    buf=malloc(size);

    if (first==0)
        {
        if(fl==0)
            {delay(10000);
            putimage(x,y-5,buf,COPY_PUT);
            }
        }

    if(fl==1)
        {
        getimage(x,y-5,x+10,y+10,buf);
        setcolor(RED);
        setfillstyle(11,YELLOW);
        bar(x,y,x+10,y+10);
        line(x,y,x+5,y-5);
        line(x+5,y-5,x+10,y);
        line(x+5,y-5,x+5,y+7);
        free(buf);
        first=0;
        }
    }


}
/*******************************************************************************
** 函数名称:main
** 函数描述:
** 输入参数:无
** 输出参数:无
*******************************************************************************/
main()    /**/
{
union REGS regs;  /*必须放在第一行*/
int mx,my;
int i,j;            /*画草地 循环参数 */
int is=1;           /*shot连射控制参数*/
int k=0;            /*公共公用循环参数*/
int xt,yt;  /*tank 的x,y坐标 */
int xp=620,yp=40;   /*plane的x,y坐标 */
int xs[20],ys[20];  /*shot 的x,y坐标 */
int key;            /*键盘按键参数    */

initgr();           /* BGI初始化      */
startpicture();     /* 启动界面       */

/*游戏程序主界面*/
bkground();               /*画天地环境*/
for (i=53;i<640;i=i+10)   /*画草地    */
    {for (j=330;j<=450;j=j+15)
        {grass(i,j);}
    }
tree(100,440);            /*画树      */
tree(450,450);
tree(500,400);
xt=200;yt=400; /*????????????????????曾经导致错误退出?????????????????????????*/

/*操作游戏*/
while(1)
    {
     regs.x.ax=3;    /*鼠标*/
     int86(0x33,&regs,&regs);
     drawmouse(mx,my,0);
     mx=regs.x.cx;
     my=regs.x.dx;

     xp=xp-10;      /*控制plan飞行*/
     plmid(xp,yp,1);
     if (xp<60)
        {xp=630;}

     if(kbhit())    /* keyboard-hit,当有键按下时,执行if内程序,没有就继续往下执行 */
        {
            key=bioskey(0);
            if(ESC==key)   {break; }    /*退出程序*/
            switch(key)
            {
                case LEFT:  xt=xt-10;
                            if(xt<30)
                                {xt=30; }
                            tank(1,xt,yt);
                            break;
                case RIGHT: xt=xt+10;
                            if(xt>610)
                                {xt=610;}
                            tank(0,xt,yt);
                            break;
                case UP:    if (is<20)    /*判断炮弹已使用数目,实现连射*/
                                {is=is+1;}
                            else
                                {is=0;}

                            xs[is]=xt;    /*把炮弹放在坦克炮口处*/
                            ys[is]=yt-47;
                            shot(xs[is],ys[is]); /*发射炮弹,shot*/
                            break;
                default:break;
            }/*switch(key) end*/
        }/*if(kbhit()) end*/
    
     ys[is]=ys[is]-20;  /*控制炮弹shot飞行*/
     for(k=0;k<20;k++)  /*判断飞机是否中弹*/
        {if ((xp-xs[is])<80&&(xp>xs[is])&&ys<70)
            {boom(xs[is],ys[is]);}
        }/*for(k) end*/
    setbkcolor(LIGHTBLUE);  /*鼠标*/
    setcolor(BLUE);
    drawmouse(mx,my,1);
    delay(100000);
    }/*while(1) end*/


getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -