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 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?