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

📄 initgraphics.c

📁 独立编写的坦克大战(未完成)但实现了简单的碰撞
💻 C
字号:
/*******头文件包含*******/
#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/************************/

/*******程序预定义*******/
#define LEFT    0x4b00
#define RIGHT   0x4d00
#define DOWN    0x5000
#define UP      0x4800
#define SPACE   0x3920
#define ESC     0x011b
#define ENTER   0x1c0d
/************************/

/*******全局变量定义*******/
int z=1,sco,z1=1,x=10,y=34,i,tankdir,ts1=0,tankd;
int space[37][38];     //此空间为零的地方坦克可以通行
char str[10];
//变量z是开始欢迎界面处判断上下的标志位
//变量sco是成绩的全局变量
//变量z1是退出选单的标志位
//变量x是坦克的横向数组值
//变量y是坦克的纵向数组值
//变量i是坦克的朝向
//变量tankdir坦克的方向是否一致标志位
//数组space[38][39]是坦克活动的范围数组
//
/**************************/

/**************坦克图形***************/
//全局三维数组
int tank[4][3][3]={
{{0,1,0},
 {1,1,1},
 {1,0,1}},
{{1,1,0},
 {0,1,1},
 {1,1,0}},
{{1,0,1},
 {1,1,1},
 {0,1,0}},
{{0,1,1},
 {1,1,0},
 {0,1,1}}
};

void tankbar(int x1,int y1,int i)
{
    int j=1,k,x2=x1,y2=y1;
    for(j=0;j<3;j++)
    {
        for(k=0;k<3;k++)
        {
            if(1==tank[i][j][k])
            {
                setfillstyle(SOLID_FILL,RED);
                bar(60+x2*10,45+y2*10,68+x2*10,53+y2*10);
                x2++;
            }
            else
                x2++;
        }
        x2=x1;
        y2++;
    }
}

void tankblack(int x1,int y1)
{
    int j,k,x2=x1,y2=y1;
    for(j=0;j<3;j++)
    {
        for(k=0;k<3;k++)
        {
            if(1==tank[i][j][k])
            {
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+x2*10,45+y2*10,68+x2*10,53+y2*10);
                x2++;
            }
            else
                x2++;
        }
        x2=x1;
        y2++;
    }
}

/*******我方坦克的虚拟数组*******/
tankspace()
{
    int ii,jj;
    for(ii=0;ii<3;ii++)
        for(jj=0;jj<3;jj++)
                space[x+jj][y+ii]=1;
}

tankbkspace(int xx,int yy)
{
    int ii,jj;
    for(ii=0;ii<3;ii++)
        for(jj=0;jj<3;jj++)
                space[xx+jj][yy+ii]=0;
}

/***********敌方坦克*************/
void tankbard(int i)
{
    int j=1,k,x2=0,y2=0;
    for(j=0;j<3;j++)
    {
        for(k=0;k<3;k++)
        {
            if(1==tank[i][j][k])
            {
                setfillstyle(SOLID_FILL,BLUE);
                bar(60+x2*10,45+y2*10,68+x2*10,53+y2*10);
                x2++;
            }
            else
                x2++;
        }
        x2=0;
        y2++;
    }
}


/********敌方坦克的虚拟数组*******/
tankspaced()
{
    int ii,jj;
    for(ii=0;ii<3;ii++)
        for(jj=0;jj<3;jj++)
                space[x+jj][y+ii]=2;
}
/***********************************/

/******坦克发出的炮弹******/
void bullet(int ii)
{
    int xbu,ybu,xbum,ybum;
    if(0==ii)
    {
        xbu=x+1;
        ybu=y-1;
        while(space[xbu][ybu]!=space[xbu][y] && ybu>=0)
        {   
            setfillstyle(SOLID_FILL,YELLOW);
            bar(63+xbu*10,45+ybu*10,65+xbu*10,53+ybu*10);
            space[xbu][ybu]=1;
            delay(5000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(63+xbu*10,45+ybu*10,65+xbu*10,53+ybu*10);
            space[xbu][ybu]=0;
            ybu--;
        }
        ybu++;
        if(space[xbu][ybu]!=space[xbu][y])
        {
            setfillstyle(8,LIGHTRED);
            bar(60+xbu*10,45+ybu*10,68+xbu*10,48+ybu*10);
            delay(30000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
            if(ybu>0)
            {
                ybu--;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
            }
        }
        else if(ybu>0)
        {
                ybu--;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
        }
    }
    if(2==ii)
    {
        xbu=x+1;
        ybu=y+3;
        while(space[xbu][ybu]!=space[xbu][y] && ybu<=37)
        {   
            setfillstyle(SOLID_FILL,YELLOW);
            bar(63+xbu*10,45+ybu*10,65+xbu*10,53+ybu*10);
            space[xbu][ybu]=1;
            delay(5000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(63+xbu*10,45+ybu*10,65+xbu*10,53+ybu*10);
            space[xbu][ybu]=0;
            ybu++;
        }
        ybu--;
        if(space[xbu][ybu]!=space[xbu][y])
        {
            setfillstyle(8,LIGHTRED);
            bar(60+xbu*10,50+ybu*10,68+xbu*10,53+ybu*10);
            delay(30000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
            if(ybu<37)
            {
                ybu++;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
            }
        }
        else if(ybu<37)
        {
                ybu++;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
        }
    }
    if(3==ii)
    {
        xbu=x-1;
        ybu=y+1;
        while(space[xbu][ybu]!=space[x][ybu] && xbu>=0)
        {   
            setfillstyle(SOLID_FILL,YELLOW);
            bar(60+xbu*10,48+ybu*10,68+xbu*10,50+ybu*10);
            space[xbu][ybu]=1;
            delay(5000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,48+ybu*10,68+xbu*10,50+ybu*10);
            space[xbu][ybu]=0;
            xbu--;
        }
        xbu++;
        if(space[xbu][ybu]!=space[x][ybu])
        {
            setfillstyle(8,LIGHTRED);
            bar(60+xbu*10,45+ybu*10,63+xbu*10,53+ybu*10);
            delay(30000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
            if(xbu>0)
            {
                xbu--;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
            }
        }
        else if(xbu>0)
        {
                xbu--;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
        }
    }
    if(1==ii)
    {
        xbu=x+3;
        ybu=y+1;
        while(space[xbu][ybu]!=space[x][ybu] && xbu<=36)
        {   
            setfillstyle(SOLID_FILL,YELLOW);
            bar(60+xbu*10,48+ybu*10,68+xbu*10,50+ybu*10);
            space[xbu][ybu]=1;
            delay(5000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,48+ybu*10,68+xbu*10,50+ybu*10);
            space[xbu][ybu]=0;
            xbu++;
        }
        xbu--;
        if(space[xbu][ybu]!=space[x][ybu])
        {
            setfillstyle(8,LIGHTRED);
            bar(65+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
            delay(30000);
            setfillstyle(SOLID_FILL,BLACK);
            bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
            if(xbu<36)
            {
                xbu++;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
            }
        }
        else if(xbu<36)
        {
                xbu++;
                setfillstyle(SOLID_FILL,BLACK);
                bar(60+xbu*10,45+ybu*10,68+xbu*10,53+ybu*10);
                space[xbu][ybu]=0;
        }
    }
}

/********坦克特效*******/
//坦克出场特效
tankspec1()
{
    int s;
    int dingdian[18]={155,390,165,380,183,380,193,390,193,412,
                      188,418,160,418,155,412,155,390};
    for(s=0;s<15;s++)
    {
        setcolor(LIGHTRED);
        drawpoly(9,dingdian);
        //line(155,418,193,418);
        delay(10000);
        setcolor(BLACK);
        drawpoly(9,dingdian);
        delay(10000);
    }
}

/******随机数产生******/
//0~3随机产生一个数
int myrand()
{
    int ii;
    srand((int)time(0));
    ii=0+(int)(4.0*rand()/(RAND_MAX+1.0));
    return ii;
}

/******计分函数*********/
void score()
{
    setcolor(BLUE);
    settextjustify(RIGHT_TEXT,TOP_TEXT);
    itoa(sco,str,10);
    settextstyle (0,0,3);
    outtextxy(580,220,str);
}
/******Are you ready*****/
void ready()
{
    setcolor(LIGHTRED);
    settextstyle(0,0,1);
    outtextxy(460,210,"Are you ready !");
}

/******游戏随机地图*******/

/*****大本营*****/
myboss()
{
    setfillstyle(2,LIGHTRED);
    bar(60+15*10,45+35*10,68+15*10,53+35*10);
    space[15][35]=1;
    bar(60+18*10,45+35*10,68+18*10,53+35*10);
    space[18][35]=1;
    bar(60+21*10,45+35*10,68+21*10,53+35*10);
    space[21][35]=1;
    bar(60+16*10,45+36*10,68+16*10,53+36*10);
    space[16][36]=1;
    bar(60+17*10,45+36*10,68+17*10,53+36*10);
    space[17][36]=1;
    bar(60+18*10,45+36*10,68+18*10,53+36*10);
    space[18][36]=1;
    bar(60+19*10,45+36*10,68+19*10,53+36*10);
    space[19][36]=1;
    bar(60+20*10,45+36*10,68+20*10,53+36*10);
    space[20][36]=1;
    bar(60+17*10,45+37*10,68+17*10,53+37*10);
    space[17][37]=1;
    bar(60+19*10,45+37*10,68+19*10,53+37*10);
    space[19][37]=1;
}
/****************/

void map()
{
//空间左上角x=60  y=45
//    右上角x=420 y=45
//    左下角x=60  y=415
//    右下角x=420 y=415
//space[37][38]
//bar(60+i*10,45+j*10,68+i*10,53+j*10);
    int ii,jj;
    setfillstyle(9,7);
    for(ii=14;ii<=22;ii++)
    {
        bar(60+ii*10,45+34*10,68+ii*10,53+34*10);
        space[ii][34]=1;
    }
    for(jj=35;jj<38;jj++)
    {
        bar(60+14*10,45+jj*10,68+14*10,53+jj*10);
        space[14][jj]=1;
        bar(60+22*10,45+jj*10,68+22*10,53+jj*10);
        space[22][jj]=1;
    }
    for(ii=0;ii<=15;ii++)
    for(jj=29;jj<=30;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=21;ii<=36;ii++)
    for(jj=29;jj<=30;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=0;ii<=4;ii++)
    for(jj=24;jj<=25;jj++)
    {
        setfillstyle(9,7);
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=9;ii<=30;ii++)
    for(jj=24;jj<=25;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=12;ii<=15;ii++)
    for(jj=8;jj<=19;jj++)
    {
        setfillstyle(9,7);
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=22;ii<=25;ii++)
    for(jj=8;jj<=19;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=16;ii<=21;ii++)
    for(jj=12;jj<=15;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=4;ii<=7;ii++)
    for(jj=6;jj<=14;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=0;ii<=7;ii++)
    for(jj=15;jj<=17;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=30;ii<=36;ii++)
    for(jj=4;jj<=6;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=30;ii<=32;ii++)
    for(jj=7;jj<=19;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    for(ii=17;ii<=20;ii++)
    for(jj=0;jj<=3;jj++)
    {
        bar(60+ii*10,45+jj*10,68+ii*10,53+jj*10);
        space[ii][jj]=1;
    }
    ready();
    myboss();
}
/***********************/

/******退出表单*********/
void escchange()
{
    setfillstyle(SOLID_FILL,LIGHTGRAY);
    bar(240,150,410,240);
    setfillstyle(SOLID_FILL,BLUE);
    bar(242,152,408,168);
    setcolor(0);
    rectangle(260,190,310,210);
    rectangle(338,190,390,210);
    settextstyle(1,0,1);
    setcolor(15);
    settextjustify(LEFT_TEXT,TOP_TEXT);
    outtextxy(246,157,"B-Trix");
    settextjustify(LEFT_TEXT,CENTER_TEXT);
    outtextxy(278,201,"OK");
    setcolor(0);
    outtextxy(342,201,"Cancel");
}
/*************************/

/******游戏开始图********/
void begin()
{
    int ii,jj;
    setcolor(BLUE);
    setlinestyle(0,0,1);
    rectangle(40,25,595,445);
    setlinestyle(0,0,2);
    rectangle(35,20,600,450);
    setlinestyle(0,0,1);
    line(450,25,450,445);
    setfillstyle(1,7);
    for(ii=50;ii<=430;ii+=8) //外边框横行排列
    {
        bar(ii,35,ii+8,43);
        bar(ii,425,ii+8,433);
        ii+=2;
    }
    for(jj=45;jj<=420;jj+=8) //外边框纵行排列

⌨️ 快捷键说明

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