|
发表于 2016-6-22 22:44:39
|
显示全部楼层
没有考虑障碍物的情况,也没有考虑坦克自身,大概就是这个意思,只改了向上发子弹,你自己考虑考虑吧
void move_my_tanke()
{
/****************************************************************************
变量 : bullet_case_up = 0; bullet_case_down = 0;
bullet_case_left = 0; bullet_case_right = 0;
变量作用: 相当于打子弹前的保险,当按下W向上后bullet_case_up
被赋值为1,此时按下空格相当于扣动扳机bullet_up
被赋值为1,发射子弹
****************************************************************************/
//int bullet_case_up = 1;
//int bullet_case_down = 0;
//int bullet_case_left = 0;
//int bullet_case_right = 0;
int bullet_caseDirection = 0;//0-上
/***************************************************************************
变量 : bullet_up bullet_down bullet_left bullet_right
变量作用 :相当于子弹扳机,当值为1时发射子弹,为0停止发射子弹
****************************************************************************/
int bullet_up = 0;
int bullet_down = 0;
int bullet_left = 0;
int bullet_right = 0;
int bulletUp[28];
for(int n=0; n<29;n++)
{
bulletUp[n] = 0;
}
/***************************************************************************
变量 : bullet_up_x bullet_up_y bullet_down_x bullet_down_y
bullet_left_x bullet_left_y bullet_right_x bullet_right_y
变量作用: 接收坦克坐标,因为是先擦在画子弹,子弹的坐标应在坦克前方
所以子弹坐标在坦克坐标基础上加1或者减1,来求出子弹坐标
****************************************************************************/
int bullet_up_x, bullet_up_y;
int bullet_down_x, bullet_down_y;
int bullet_left_x, bullet_left_y;
int bullet_right_x, bullet_right_y;
//打印我的坦克和敌军坦克
print_tanke(x,y);
print_tanke(Enemy_x_1, Enemy_y_1);
print_tanke(Enemy_x_2, Enemy_y_2);
int oldx, oldy;
while (true)
{
/******************************************************************
实现敌方坦克自己动
实现方法:以敌方坦克Enemy_tanke_1为例,Enemy_tanke_1坦克默认转态是向
下,给它一个向上移动的状态Enemy_stat_1=1,如果Enemy_y_1==1
也就是到顶了,Enemy_stat_1 = 3让它朝左走,依次类推,让它不
断循环
*******************************************************************/
if (Enemy_stat_1 > 0)
{
if (Enemy_stat_1 == 1)
{
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
if (Enemy_y_1 == 1)
{
clear_tank(Enemy_x_1, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Enemy_stat_1 = 3;
}
else
{
clear_tank(Enemy_x_1, Enemy_y_1);
gotoxy(Enemy_x_1, Enemy_y_1--);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Sleep(50);
}
}
else
if (Enemy_stat_1 == 2)
{
if (Enemy_y_1 == 26 || Enemy_y_1 == map_boundary_1)
{
clear_tank(Enemy_x_1, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Enemy_stat_1 = 4;
}
else
{
clear_tank(Enemy_x_1, Enemy_y_1);
gotoxy(Enemy_x_1, Enemy_y_1++);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Sleep(50);
}
}
else
if (Enemy_stat_1 == 3)
{
if (Enemy_x_1 == 2)
{
clear_tank(Enemy_x_1, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Enemy_stat_1 = 2;
}
else
{
clear_tank(Enemy_x_1, Enemy_y_1);
gotoxy(Enemy_x_1--, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Sleep(50);
}
}
else
if (Enemy_stat_1 == 4)
{
if (Enemy_x_1 == 52 || (Enemy_x_2 - Enemy_x_1 < 7))
{
clear_tank(Enemy_x_1, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Enemy_stat_1 = 1;
}
else
{
clear_tank(Enemy_x_1, Enemy_y_1);
gotoxy(Enemy_x_1++, Enemy_y_1);
Enemy_stat(Enemy_x_1, Enemy_y_1, Enemy_stat_1);
Sleep(50);
}
}
}
if (Enemy_stat_2 > 0)
{
if (Enemy_stat_2 == 1)
{
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
if (Enemy_y_2 == 1)
{
clear_tank(Enemy_x_2, Enemy_y_2);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Enemy_stat_2 = 4;
}
else
{
clear_tank(Enemy_x_2, Enemy_y_2);
gotoxy(Enemy_x_2, Enemy_y_2--);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Sleep(50);
}
}
else
if (Enemy_stat_2 == 2)
{
if (Enemy_y_2 == 26 || Enemy_y_2 == map_boundary_1)
{
clear_tank(Enemy_x_2, Enemy_y_2);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Enemy_stat_2 = 3;
}
else
{
clear_tank(Enemy_x_2, Enemy_y_2);
gotoxy(Enemy_x_2, Enemy_y_2++);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Sleep(50);
}
}
else
if (Enemy_stat_2 == 3)
{
if (Enemy_x_2 == 2 || (Enemy_x_2 - Enemy_x_1 < 7))
{
clear_tank(Enemy_x_2, Enemy_y_2);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Enemy_stat_2 = 1;
}
else
{
clear_tank(Enemy_x_2, Enemy_y_2);
gotoxy(Enemy_x_2--, Enemy_y_1);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Sleep(50);
}
}
else
if (Enemy_stat_2 == 4)
{
if (Enemy_x_2 == 52)
{
clear_tank(Enemy_x_2, Enemy_y_2);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Enemy_stat_2 = 2;
}
else
{
clear_tank(Enemy_x_2, Enemy_y_2);
gotoxy(Enemy_x_2++, Enemy_y_2);
Enemy_stat(Enemy_x_2, Enemy_y_2, Enemy_stat_2);
Sleep(50);
}
}
}
/**************************************************************
子弹发射
实现方法: int bullet_up = 0; int bullet_down = 0;
int bullet_left = 0; int bullet_right = 0;
当按下空格后这几个变量被赋值为1,开始发射子弹
子弹遇到边界后停止发射子弹并将上面的变量赋值0
停止发射子弹
***************************************************************/
//子弹朝上发射
if (bullet_up == 1)
{
// if (bullet_up_y == 1)
// {
// gotoxy(bullet_up_x, bullet_up_y);
// printf(" ");
// //清除子弹痕迹
//// bullet_case_up = 0;
// bullet_up = 0;
// bullet_up_x = x + 2, bullet_up_y = y - 1;
//
// }
// else if (bullet_up_y == 0)
// {
// bullet_up = 0;
//// bullet_case_up = 0;
//
// }
// else
// {
// SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
// gotoxy(bullet_up_x, bullet_up_y);
// printf(" ");
// gotoxy(bullet_up_x, bullet_up_y - 1);
// printf("●");
// bullet_up_y--;
// }
for(int m=1; m<28; m++)
{
if(bulletUp[m] == 0)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
gotoxy(bullet_up_x, m);
printf(" ");
}
else if(bulletUp[m] == 1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
gotoxy(bullet_up_x, m);
printf("●");
}
bulletUp[m] = bulletUp[m+1];
}
bulletUp[29] = 0;
}
//子弹朝下发射
if (bullet_down == 1)
{
if (bullet_down_y == 28)
{
gotoxy(bullet_down_x, bullet_down_y);
printf(" ");
//停止循环。子弹坐标清零
bullet_down = 0;
bullet_down_x = x + 2, bullet_down_y = y + 3;
// bullet_case_down = 0;
}
else if (bullet_down_y == 29)
{
bullet_down = 0;
// bullet_case_down = 0;
}
else
{
gotoxy(bullet_down_x, bullet_down_y);
printf(" ");
gotoxy(bullet_down_x, bullet_down_y + 1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("●");
bullet_down_y++;
}
}
//子弹朝左发射
if (bullet_left == 1)
{
if (bullet_left_x == 2)
{
gotoxy(bullet_left_x, bullet_left_y);
printf(" ");
//子弹坐标清零
bullet_left = 0;
bullet_left_x = x - 3, bullet_left_y = y + 1;
// bullet_case_left = 0;
}
else if (bullet_left_x == 0 || bullet_left_x == 1)
{
bullet_left = 0;
// bullet_case_left = 0;
}
else
{
gotoxy(bullet_left_x, bullet_left_y);
printf(" ");
gotoxy(bullet_left_x - 1, bullet_left_y);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("●");
bullet_left_x--;
}
}
//子弹朝右发射
if (bullet_right == 1)
{
if (bullet_right_x == 56)
{
gotoxy(bullet_right_x, bullet_right_y);
printf(" ");
bullet_right = 0;
bullet_right_x = x + 6, bullet_right_y = y + 1;
// bullet_case_right = 0;
}
else if (bullet_right_x == 57 || bullet_right_x == 58 || bullet_right_x == 59)
{
bullet_right_x = 0;bullet_right_y = 0;
bullet_right = 0;
// bullet_case_right = 0;
}
else
{
gotoxy(bullet_right_x, bullet_right_y);
printf(" ");
gotoxy(bullet_right_x + 1, bullet_right_y);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("●");
bullet_right_x++;
}
}
/*************************************************************
获取按键,通过W,w,S,s,A,a,D,d移动坦克方向
**************************************************************/
if (_kbhit())
{
stat = _getch();
fflush(stdin);
switch (stat)
{
case 'W':
case 'w':
{
if (y == 1)
{
clear_tank(x,y);
tanke_stat(stat);
}
else
{
clear_tank(x,y);
gotoxy(x, y--);
tanke_stat(stat);
}
//if (bullet_case_up == 0)
//{
// bullet_case_up = 1;
//}
bullet_caseDirection = 0;
}
break;
case 'S':
case 's':
{
if (y == 26)
{
clear_tank(x,y);
tanke_stat(stat);
}
else
{
clear_tank(x,y);
gotoxy(x, y++);
tanke_stat(stat);
}
/* if (bullet_case_down == 0)
{
bullet_case_down = 2;
}*/
bullet_caseDirection = 1;
}
break;
case 'A':
case 'a':
{
if (x == 2)
{
clear_tank(x,y);
tanke_stat(stat);
}
else
{
clear_tank(x,y);
gotoxy(x--, y);
tanke_stat(stat);
}
//if (bullet_case_left == 0)
//{
// bullet_case_left = 3;
//}
bullet_caseDirection = 2;
}
break;
case 'D':
case 'd':
{
if (x == 52)
{
clear_tank(x,y);
tanke_stat(stat);
}
else
{
clear_tank(x,y);
gotoxy(x++, y);
tanke_stat(stat);
}
//if (bullet_case_right == 0)
//{
// bullet_case_right = 4;
//}
bullet_caseDirection = 3;
}
break;
}
}
else
{
continue;
}
/*************************************************************
发射子弹
实现方法:当按下空格后,下面各变量被赋值为1,发射子弹
int bullet_up = 1; int bullet_down = 1;
int bullet_left = 1; int bullet_right = 1;
子弹遇到边界后被赋值为0,停止发射
*************************************************************/
if (stat == ' ')
{
tanke_stat(stat);
if(bullet_caseDirection == 0)
{
// bullet_case_up += 10;
bullet_up = 1;
bullet_up_x = x + 2, bullet_up_y = y - 1;
bulletUp[bullet_up_y] = 1;
}else
if(bullet_caseDirection ==1)
{
// bullet_case_down += 10;
bullet_down = 1;
bullet_down_x = x + 2, bullet_down_y = y + 3;
}else
if(bullet_caseDirection ==2)
{
// bullet_case_left += 10;
bullet_left = 1;
bullet_left_x = x - 3, bullet_left_y = y + 1;
}else
if(bullet_caseDirection ==3)
{
// bullet_case_right += 10;
bullet_right = 1;
bullet_right_x = x + 6, bullet_right_y = y + 1;
}
}
}
}
|
|