VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1123|回复: 8

[求助] 求c或c++单线程坦克大战坦克移动和子弹移动的处理方式

[复制链接]
14_avatar_middle
在线会员 发表于 2016-6-22 22:44:38 | 显示全部楼层 |阅读模式
10驿站币
求助希望大家帮帮小白吧!!!
请看附件

Tank Battle.rar

4.8 MB, 下载次数: 50

不完整的坦克大战,希望大家帮帮小白吧

最佳答案

查看完整内容

没有考虑障碍物的情况,也没有考虑坦克自身,大概就是这个意思,只改了向上发子弹,你自己考虑考虑吧 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,此时按下空 ...




上一篇:system函数怎么样能够不显示DOS界面
下一篇:对于计算器退格,小数点等的运算无法实现
95_avatar_middle
在线会员 发表于 2016-6-23 20:29:34 | 显示全部楼层
move_my_tanke()   修改此函数即可
14_avatar_middle
ico_lz  楼主| 发表于 2016-6-23 21:06:27 | 显示全部楼层
您好,您这样改的话。如果向一个方向开两抢的话第一颗子弹会停下来,留在屏幕上。。。我之前之所以那么麻烦就是为了避免向一个方向开两枪的时候第一颗子弹停在屏幕上。。。所以我强制一个方向只能打一颗子弹。。。有网友说用数组打印子弹。。不过我一直想不明白。。。。还请您在帮我看看。。。
14_avatar_middle
ico_lz  楼主| 发表于 2016-6-23 21:07:07 | 显示全部楼层
ET幻影 发表于 2016-6-23 20:29
move_my_tanke()   修改此函数即可

您好,您这样改的话。如果向一个方向开两抢的话第一颗子弹会停下来,留在屏幕上。。。我之前之所以那么麻烦就是为了避免向一个方向开两枪的时候第一颗子弹停在屏幕上。。。所以我强制一个方向只能打一颗子弹。。。有网友说用数组打印子弹。。不过我一直想不明白。。。。还请您在帮我看看。。。
95_avatar_middle
在线会员 发表于 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;
                                }                               
                        }
                }
}
               

       
95_avatar_middle
在线会员 发表于 2016-6-23 20:29:02 | 显示全部楼层
/****************************************************************************

函数     : move_my_tanke()

函数功能 : 坦克可以上下左右移动遇到墙停止移动。
                        移动同时可以按空格发射子弹。

****************************************************************************/
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;
                                 
/***************************************************************************

        变量    : 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--;
                        }
                }

            //子弹朝下发射
                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;
                                }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;
                                }                               
                        }
                }
}
               

       
               

       
               
95_avatar_middle
在线会员 发表于 2016-6-23 21:10:47 | 显示全部楼层
本帖最后由 ET幻影 于 2016-6-23 21:18 编辑
caxilo 发表于 2016-6-23 21:07
您好,您这样改的话。如果向一个方向开两抢的话第一颗子弹会停下来,留在屏幕上。。。我之前之所以那么麻 ...




仿照如下改是否可以??????????
if (stat == ' ')
                {
                        tanke_stat(stat);
                                if(bullet_caseDirection == 0)
                                {
                                        if(bullet_up)
                                        {
                                                gotoxy(bullet_up_x, bullet_up_y);
                                                printf("  ");
                                                bullet_up_y = 0;
                                        }
//                                        bullet_case_up += 10;
                                        bullet_up = 1;
                                        bullet_up_x = x + 2, bullet_up_y = y - 1;
                                }else
95_avatar_middle
在线会员 发表于 2016-6-23 21:30:10 | 显示全部楼层
确实用数组打印子弹比较好, 就是一维数组,  开一枪就把【0】位置一, 然后循环移位 【1】置1【0】恢复, 直到到达边界,  如果中途开第二枪,只需要把【0】置1,其他不变即可,每个方向定义一个子弹的一维数组即可
14_avatar_middle
ico_lz  楼主| 发表于 2016-6-23 21:38:44 | 显示全部楼层
ET幻影 发表于 2016-6-23 21:30
确实用数组打印子弹比较好, 就是一维数组,  开一枪就把【0】位置一, 然后循环移位 【1】置1【0】恢复,  ...

那就麻烦你帮我改下吧。。数组这个我想了2天了都没有思路。。我就不明白数组如果不通过循环怎么打印。如果循环打印。那就肯定得先打印完子弹坦克才能动。。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-26 23:32

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表