2016-06-11 15 views
0

私は、ボードとして10x10のアレイを使用して、ユーザー対コンピューターの戦艦ゲームを作っています。私はボード上に2本の船をランダムに配置したい(1つのサイズ - 5つのアレイとそれ以外のサイズ - 4)。私がしたことはランダムに0または1を生成し、0は垂直配置であり、1は水平である。その後、whileループを使用して、生成された数値がボードに合っているか、サイズが4の船にあるかどうかをチェックします。生成された数値が最初の船にすでに使用されているかどうかをチェックする必要があります。私はこれを別の機能を使って行った。 1つの船が垂直に配置されているときに問題が発生し、その理由を理解できません。それが垂直に置かれたとき、それはサイズ-3の船を作るだけです。ここ は、コードは次のとおりです。Cでの戦艦、ランダム船の配置

void startShips(int ships[][2]){ 
     srand(time(NULL)); 
     int n1,n2; 
     n1 = rand()%2; 
     n2 = rand()%2; 
     //0=vertical, 1=horizontal 

      if(n1==0){ 
       do{ 
       ships[0][0]= rand()%10; 
       ships[0][1]= rand()%10; 
       ships[1][0]= ships[0][0]+1; 
       ships[1][1]= ships[0][1]; 
       ships[2][0]= ships[0][0]+2; 
       ships[2][1]= ships[0][1]; 
       ships[3][0]= ships[0][0]+3; 
       ships[3][1]= ships[0][1]; 
       ships[4][0]= ships[0][0]+4; 
       ships[4][1]= ships[0][1]; 
       }while(ships[4][0]>9); 
      } 
      if(n1==1){ 
       do{ 
       ships[0][0]= rand()%10; 
       ships[0][1]= rand()%10; 
       ships[1][0]= ships[0][0]; 
       ships[1][1]= ships[0][1]+1; 
       ships[2][0]= ships[0][0]; 
       ships[2][1]= ships[0][1]+2; 
       ships[3][0]= ships[0][0]; 
       ships[3][1]= ships[0][1]+3; 
       ships[4][0]= ships[0][0]; 
       ships[4][1]= ships[0][1]+4; 
       }while(ships[4][1]>9); 
      } 

      if(n2==0){ 
       do{ 
       ships[5][0]= rand()%10; 
       ships[5][1]= rand()%10; 
       ships[6][0]= ships[5][0]+1; 
       ships[6][1]= ships[5][1]; 
       ships[7][0]= ships[5][0]+2; 
       ships[7][1]= ships[5][1]; 
       ships[8][0]= ships[5][0]+3; 
       ships[8][1]= ships[0][1]; 
       }while((ships[8][0]>9) || 
         (checkShip(ships)==1) 
        ); 
      } 
      if(n2==1){ 
       do{ 
       ships[5][0]= rand()%10; 
       ships[5][1]= rand()%10; 
       ships[6][0]= ships[5][0]; 
       ships[6][1]= ships[5][1]+1; 
       ships[7][0]= ships[5][0]; 
       ships[7][1]= ships[5][1]+2; 
       ships[8][0]= ships[5][0]; 
       ships[8][1]= ships[0][1]+3; 
       }while((ships[8][1]>9) || 
         (checkShip(ships)==1) 
         ); 
      } 

    } 
int checkShip(int ships[][2]){ 
    int i; 
    for(i=0;i<5 ; i++){ 
     if((ships[5][0]==ships[i][0])&&(ships[5][1]==ships[i][1])){ 
      return 1; 
      break;} 
     } 
     for(i=0;i<5 ; i++){ 
     if((ships[6][0]==ships[i][0])&&(ships[6][1]==ships[i][1])){ 
      return 1; 
      break;} 
     } 
     for(i=0;i<5 ; i++){ 
     if((ships[7][0]==ships[i][0])&&(ships[7][1]==ships[i][1])){ 
      return 1; 
      break;} 
     } 
     for(i=0;i<5 ; i++){ 
     if((ships[8][0]==ships[i][0])&&(ships[8][1]==ships[i][1])){ 
      return 1; 
      break;} 
     } 

     return 0; 
} 

答えて

1

あなたはあなたの垂直取り扱い

... 
    ships[7][1]= ships[5][1]; 
    ships[8][0]= ships[5][0]+3; 
    ships[8][1]= ships[0][1]; 
        ^^^^^^^ 
+0

ハのタイプミスを持っているようです!私はちょうどそのようなものを探していた。また 'ships [8] [1] = ships [0] [1] +3;'次のコードブロックで。 –

+0

ありがとうございました! 1つのタイプミスに非常に多くの問題があります。 – Rowry

関連する問題