m0_69314830 2022-04-25 17:18 采纳率: 0%
浏览 36

问一下这个代码的错误

里面的元素会突然不动而且飞机出现了两个

#include<stdio.h>
#include <windows.h>
#include<stdlib.h>
#include<conio.h>
#define enemynum 3
int element [20][30];//游戏元素设定
int position_x,position_y;//飞机位置
int enemy_x[enemynum],enemy_y[enemynum];//敌机位置
int score;
int width;
int left,right;
int speedeny;

    void gotoxy(int x, int y)
    {
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        COORD pos;
        pos.X = x;
        pos.Y = y;
        SetConsoleCursorPosition(handle, pos);
    }
    
    //隐藏光标函数
    void HideCursor()
    {
        CONSOLE_CURSOR_INFO cursor_info = {1,0};//第二个值为0表示隐藏光标
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    
    void startup()//游戏初始化
    { element[20][30]={0};
    position_x=10;position_y=15;
     element[position_x][position_y]=1;
     for(int k=0;k<enemynum;k++)
     { 
        enemy_x[k]=rand()%3;enemy_y[k]=rand()%20;
        element[enemy_x[k]][enemy_y[k]]=3;
     }
      width=1;
      
      score=0;
    speedeny=1;
     
         HideCursor();
    } 
    void show()//显示画面
    { int i,j;
     gotoxy(0,0); 
     for(i=0;i<20;i++) 
       {
        for(j=0;j<30;j++)
        { if(element[i][j]==1)
          { 
          printf("*");
          }else if(element[i][j]==2)
          { 
              printf("|");
          }else if(element[i][j]==3)
          { 
              printf("@");
          }
         else
        printf(" ");
        }
        printf("\n"); 
        } printf("得分为%d\n",score); 
    }
             void updatewhithout()//和用户无关的更新
    {      
         int i,j;
        for(i=0;i<20;i++)               //子弹滑行 
       {
        for(j=0;j<30;j++)
        {
            if(element[i][j]==2)
            {
                element[i][j]=0;
                if(i>0)
                element[i-1][j]=2;
                 
            } for(int x=0;x<enemynum;x++)    //当子弹打到敌机时 
            {
                    if(element[enemy_x[x]][enemy_y[x]]==2)
                {       
                        element[enemy_x[x]][enemy_y[x]]=0;
                        enemy_x[x]=rand()%3;
                        enemy_y[x]=rand()%20;
                        score++;
                }
            }
            
        
        }
         
       } static int flag;
       if(flag<20)
       flag++;
            if(flag==20)
            {      for(int k=0;k<enemynum;k++)
                 {
                     if(enemy_x[k]==20)
                {
                    enemy_x[k]=rand()%3;
                    enemy_y[k]=rand()%20;
                }
                 element[enemy_x[k]][enemy_y[k]]=0;
                enemy_x[k]++;
               if(enemy_x[k]==position_x&&enemy_y[k]==position_y)
               {  printf("game over");
               
               }
              
              
              element[enemy_x[k]][enemy_y[k]]=3;
              flag=0;
                 } 
            
            }
          
            left=position_y-width;
      right=position_y+width;  
          
      
 }
                void  updatewhith()//和用户有关的更新
                { char ch;
            if( kbhit())
                ch=getch();
                if(ch=='a')
                { element[position_x][position_y]=0;
                position_y--;
                element[position_x][position_y]=1;
                }
                    if(ch=='d')
                { element[position_x][position_y]=0;
                position_y++;
                element[position_x][position_y]=1;
                }
                    if(ch=='w')
                { element[position_x][position_y]=0;
                position_x--;
                element[position_x][position_y]=1;
                }
                    if(ch=='s')
                { element[position_x][position_y]=0;
                position_x++;
                element[position_x][position_y]=1;
                }
                    if(ch==' ')
                {  
                for(int i=left;i>=left&&i<=right;i++)
                element[position_x-1][i]=2;//设置子弹 
                }
                
            
            
                }
        int main()
         {startup();//游戏初始化 
         while(1)
           {show();//显示画面
             updatewhithout();//和用户无关的更新
             updatewhith();//和用户有关的更新 
           } 
        
         } 

不知道怎么解决,感觉是敌机变化时导致飞机的位置也更新了

  • 写回答

1条回答 默认 最新

  • 卡尔曼的BD SLAMer 计算机视觉领域新星创作者 2022-04-25 18:18
    关注

    报了什么错误?

    评论

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题