可爱扎 2018-10-05 05:39 采纳率: 100%
浏览 509
已采纳

这个代码怎么重复执行,按1之后直接跳到结束是为什么

#include<stdlib.h>   //system
#include<windows.h>  //sleep
#include<conio.h>  //getch()

int back_x,back_y; //背景
int man_x,man_y;  //主角位置
int zidan_x[7],zidan_y[7]; //子弹位置
char input;
int gameover = 0;//判断结束
int wan;

void hide()   //隐藏光标 
{
   CONSOLE_CURSOR_INFO cursor_info={1,0};
   SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void gotoxy(int x,int y) //达到清屏效果 
{
   HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
   COORD pos;
   pos.X = x;
   pos.Y = y;
   SetConsoleCursorPosition(handle,pos);

}

void chushihua()  //初始化
{
    back_x = 13;
    back_y = 18;
    man_x = 5;
    man_y = 8;
    zidan_x[1] = rand()%back_x;
    zidan_y[1] = rand()%back_y;
    zidan_x[0] = rand()%back_x;
    zidan_y[0] = rand()%back_y;
    zidan_x[2] = rand()%back_x;
    zidan_y[2] = rand()%back_y;
    zidan_x[3] = rand()%back_x;
    zidan_y[3] = rand()%back_y;
    zidan_x[4] = rand()%back_x;
    zidan_y[4] = rand()%back_y;
    zidan_x[5] = rand()%back_x;
    zidan_y[5] = rand()%back_y;
    zidan_x[6] = rand()%back_x;
    zidan_y[6] = rand()%back_y;
    for(int i=0;i<7;i++)
    {
        if((man_x==zidan_x[i] && man_y==zidan_y[i])||(man_x==zidan_x[i]+1 && man_y==zidan_y[i])||(man_x==zidan_x[i]+1 && man_y==zidan_y[i]+1)||(man_x==zidan_x[i] && man_y==zidan_y[i]+1))
        {
           zidan_x[i] = zidan_x[i]+3;
           zidan_y[i] = zidan_y[i]-5;
        }

    }

    hide();
}

void withinput() //输入有关
{
  if(kbhit())
  {
    input = getch();
    if(input=='a')
        man_y--;
    if(input=='d')
        man_y++;
    if(input=='s')
        man_x++;
    if(input=='w')
        man_x--;
  }
}

void withoutinput() //输入无关
{
    static int speed = 0;
    if(speed<50)
       speed++;
    if(speed==50)
    {
      for(int i=0;i<7;i++)
      {
        if(zidan_x[i]<man_x)
        zidan_x[i]++;
        if(zidan_x[i]>man_x)
        zidan_x[i]--;
        if(zidan_y[i]<man_y)
        zidan_y[i]++;
        if(zidan_y[i]>man_y)
        zidan_y[i]--;
      }
      speed = 0;
    }
    for(int i=0;i<6;i++)
    {
        if(zidan_x[i]==zidan_x[i+1] && zidan_y[i]==zidan_y[i+1])
        {
            zidan_x[i] = rand()%back_x;
            zidan_y[i] = rand()%back_y;
        }
    }

}

void show()
{

    gotoxy(0,0);
    for(int i = 1;i<=back_x;i++)
    {   
        for(int j = 1;j<=back_y;j++)
        {
           if(i==man_x && j==man_y)
               printf("*");
           if((i==zidan_x[1] && j==zidan_y[1])||(i==zidan_x[0] && j==zidan_y[0])||(i==zidan_x[2] && j==zidan_y[2])||(i==zidan_x[3] && j==zidan_y[3])||(i==zidan_x[4] && j==zidan_y[4])||(i==zidan_x[5] && j==zidan_y[5])||(i==zidan_x[6] && j==zidan_y[6]))
               printf("#");
           else printf(" ");
        }
     printf("|\n");
    }

    printf("时间 = ------------------------");
}

void game()
{
    Sleep(500);
    chushihua();
    while(1)
    {

       show();
       withoutinput();
       withinput();
       for(int i = 0;i<7;i++)
       {
          if(zidan_x[i]==man_x&&zidan_y[i]==man_y)
          {
              gameover = 1;
              break;
          }
       }
       if(gameover==1)
           break;

    }
    system("cls");
    printf("你输了!是否继续游戏\n");
    printf("1. 继续 2. 再见");
    scanf("%d",&wan);
    if(wan==1)
        game();

}


int main()
{
  game();

}

这个是我自己写的是男人就100秒,被碰撞之后就弹出1 2选项,选了之后还是直接弹出了这个,为什么/?

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-10-05 05:51
    关注

    scanf("%d",&wan);前面加上fflush(stdin);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度