Tank!小游戏
[local]1[/local]#include<stdio.h>
#include<conio.h>
#include<math.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define UP 0x4800
#define DOWN 0x5000
#define ENTER 0x1c0d
#define ESC 0x011b
struct
{
struct add
{
int x;
int y;
} a[6];
enum
{
North,South,Weast,East
}Dir;
}tank[5]; /*5个坦克的坐标和炮筒的方向,自己的为0号,敌方的为1至4号*/
struct /****子弹的位置,方向************/
{
int x;
int y;
int Dir;
}bullet[100];
int score=0; /**************得分*************/
int num=0; /********子弹的个数**********************/
void begin(); /*打印开始界面提示*/
void init0(); /*********初始化自己的战车**********************/
void prin(); /***************打印游戏界面,战车,子弹***********************/
void keyboard(); /**********键盘扫描函数控制自己的战车*****************************/
void left(); /**************战车左转**********************/
void right(); /**************战车右转**********************/
void up(); /**************战车向上走**********************/
void down(); /**************战车向下走**********************/
void game(); /**************游戏主函数**********************/
void byebye(); /************退出游戏**********************/
void shoot(); /************射击,打击敌方**********************/
void brief(); /***********操作简介**********************/
void dellbullet(); /*************处理子弹********************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void main()
{
begin();
brief();
game();
getch();
}
/*********************************************************************************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void game() /*************游戏主函数**********************/
{
int i;
init0();
while(1)
{
dellbullet();
prin();
keyboard();
for(i=80;i>0;i--)
delay(1000);
}
}
/*********************************************************************************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void begin() /*打印开始界面提示*/
{
textmode(C80);
window(1,1,80,25);
textbackground(GREEN);
textcolor(YELLOW);
clrscr();
gotoxy(15,10);
cprintf("Welcome to this game");
gotoxy(15,11);
cprintf("TANKS");
gotoxy(15,13);
cprintf("Are you Ready");
gotoxy(15,14);
cprintf("Let's Go!");
gotoxy(15,19) ;
cprintf("Press anykey to begin");
getch();
}
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void prin() /*************打印游戏界面,战车,子弹**********************/
{
int i,j,k;
clrscr();
window(1,1,80,25);
gotoxy(35,1);
cprintf("Score:");
gotoxy(42,1);
cprintf("%d,%d",score,num);
for(i=1;i<=80;i++) /**********游戏界面**********************/
{
gotoxy(i,2);
putch(4);
}
for(i=0;i<=5;i++) /***********打印主战车**********************/
{
gotoxy(tank[0].a[i].x,tank[0].a[i].y);
putch(3);
}
if(num>=1)
for(i=1;i<=num;i++)
{ /***********打印子弹**********************/
gotoxy(bullet[i].x,bullet[i].y);
putch(2);
}
}
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void init0() /******主战车的初始化位置**********************/
{
tank[0].a[0].x=40; tank[0].a[0].y=12; /****** 0 ****/
tank[0].a[1].x=40; tank[0].a[1].y=11; /***** 000 ******/
tank[0].a[2].x=39; tank[0].a[2].y=12; /***** 0 0 ******/
tank[0].a[3].x=41; tank[0].a[3].y=12;
tank[0].a[4].x=39; tank[0].a[4].y=13;
tank[0].a[5].x=41; tank[0].a[5].y=13;
tank[0].Dir=0;
}
/**********************************************************************************/
/**********************************************************************************/
/**********************************************************************************/
void keyboard() /***********键盘扫描函数*********************/
{
int key;
if( kbhit())
{
key=bioskey(0);
switch(key)
{
case LEFT :
left();
break;
case RIGHT:
right();
break;
case UP:
up();
break;
case DOWN:
down();
break;
case ENTER:
shoot();
break;
case ESC:
byebye();
break;
} /*选择方向的switch*/
}/*检查是否有按键if */
}/*子函数keyboard */
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void left() /**************战车左转**********************/
{
tank[0].a[1].x=tank[0].a[0].x-1; tank[0].a[1].y=tank[0].a[0].y;
tank[0].a[2].x=tank[0].a[0].x; tank[0].a[2].y=tank[0].a[0].y+1;
tank[0].a[3].x=tank[0].a[0].x; tank[0].a[3].y=tank[0].a[0].y-1;
tank[0].a[4].x=tank[0].a[0].x+1; tank[0].a[4].y=tank[0].a[0].y+1;
tank[0].a[5].x=tank[0].a[0].x+1; tank[0].a[5].y=tank[0].a[0].y-1;
tank[0].Dir=2;
if(tank[0].a[1].x-1>=1)
{
tank[0].a[0].x--;
tank[0].a[1].x--;
tank[0].a[2].x--;
tank[0].a[3].x--;
tank[0].a[4].x--;
tank[0].a[5].x--;
}
}
/********************************************************************************************/
/*************************************************************************************/
/************************************************************************************/
void byebye()
{ /******打印结束界面***********/
window(1,1,80,25) ;
textmode(C80);
textattr(GREEN+BLUE<<4);
clrscr();
gotoxy(30,12);
cprintf("The game is over!");
gotoxy(25,14);
cprintf("score-%d",score);
getch();
while(1);
}
void down() /**************战车向下走**********************/
{
tank[0].a[1].x=tank[0].a[0].x; tank[0].a[1].y=tank[0].a[0].y+1;
tank[0].a[2].x=tank[0].a[0].x+1; tank[0].a[2].y=tank[0].a[0].y;
tank[0].a[3].x=tank[0].a[0].x-1; tank[0].a[3].y=tank[0].a[0].y;
tank[0].a[4].x=tank[0].a[0].x+1; tank[0].a[4].y=tank[0].a[0].y-1;
tank[0].a[5].x=tank[0].a[0].x-1; tank[0].a[5].y=tank[0].a[0].y-1;
tank[0].Dir=1;
if(tank[0].a[1].y+1<=25)
{
tank[0].a[0].y++;
tank[0].a[1].y++;
tank[0].a[2].y++;
tank[0].a[3].y++;
tank[0].a[4].y++;
tank[0].a[5].y++;
}
}
void up() /*************战车向上走**********************/
{
tank[0].a[1].x=tank[0].a[0].x; tank[0].a[1].y=tank[0].a[0].y-1;
tank[0].a[2].x=tank[0].a[0].x-1; tank[0].a[2].y=tank[0].a[0].y;
tank[0].a[3].x=tank[0].a[0].x+1; tank[0].a[3].y=tank[0].a[0].y;
tank[0].a[4].x=tank[0].a[0].x-1; tank[0].a[4].y=tank[0].a[0].y+1;
tank[0].a[5].x=tank[0].a[0].x+1; tank[0].a[5].y=tank[0].a[0].y+1;
tank[0].Dir=0;
if(tank[0].a[1].y-1>=3)
{
tank[0].a[0].y--;
tank[0].a[1].y--;
tank[0].a[2].y--;
tank[0].a[3].y--;
tank[0].a[4].y--;
tank[0].a[5].y--;
}
}
void right() /**************战车右转**********************/
{
tank[0].a[1].x=tank[0].a[0].x+1; tank[0].a[1].y=tank[0].a[0].y;
tank[0].a[2].x=tank[0].a[0].x; tank[0].a[2].y=tank[0].a[0].y-1;
tank[0].a[3].x=tank[0].a[0].x; tank[0].a[3].y=tank[0].a[0].y+1;
tank[0].a[4].x=tank[0].a[0].x-1; tank[0].a[4].y=tank[0].a[0].y-1;
tank[0].a[5].x=tank[0].a[0].x-1; tank[0].a[5].y=tank[0].a[0].y+1;
tank[0].Dir=3;
if(tank[0].a[1].x+1<=80)
{
tank[0].a[0].x++;
tank[0].a[1].x++;
tank[0].a[2].x++;
tank[0].a[3].x++;
tank[0].a[4].x++;
tank[0].a[5].x++;
}
}
void shoot() /**************战车射击,攻击敌方**********************/
{
num++;
bullet[num].x=tank[0].a[1].x;
bullet[num].y=tank[0].a[1].y;
switch(tank[0].Dir)
{
case 0:
bullet[num].Dir=0;
break;
case 1:
bullet[num].Dir=1;
break;
case 2:
bullet[num].Dir=2;
break;
case 3:
bullet[num].Dir=3;
break;
}
}
void brief() /*************操作简介**********************/
{
window(1,1,80,25);
textbackground(GREEN);
textcolor(YELLOW);
clrscr();
gotoxy(39,10);
cprintf("Brief!");
gotoxy(30,11);
cprintf("ESC : quit!");
gotoxy(30,13);
cprintf("ENTER : shoot!");
gotoxy(40,15);
putch(30);
gotoxy(39,16) ;
putch(17);
gotoxy(41,16);
putch(16);
gotoxy(40,17);
putch(31);
getch();
}
void dellbullet()
{
int i,j;
for(i=1;i<=num;i++) /*************子弹前进**********************/
{
switch(bullet[i].Dir)
{
case 0 : bullet[i].y--; break;
case 1 : bullet[i].y++; break;
case 2 : bullet[i].x--; break;
case 3 : bullet[i].x++; break;
}
}
for(i=1;i<=num;i++) /*************超出界面的子弹,不打印释内存**********************/
{
if(bullet[i].x<1||bullet[i].x>80||bullet[i].y<3||bullet[i].y>25)
{
for(j=i+1;j<=num;j++)
{
bullet[j-1].x=bullet[j].x;
bullet[j-1].y=bullet[j].y;
bullet[j-1].Dir=bullet[j].Dir;
}
num--;
break;
}
}
}
看看哈:还不完整,我会接着优化的,指点指点啊!!!