2016-04-19 10 views
-3

min max AIが機能しないようです。これはこれまでのコードです。私はallScores配列が空であるため、bestScoredへの移動を設定しないというエラーが表示されます。どんな助けもありがとう。MinMaxAIチェッカーの実装

int[] move; 

public static int makeMove(Board board, int currentPlayerColor, int maxingPlayerColor){ 

    int score = 0; 
    int[] moveIndex={}; 

    if (Rules.gameOver(board)[0]==1){ 

     if(Rules.gameOver(board)[1] == maxingPlayerColor){ 
      System.out.println("1"); 
      return score = 1; 
     } else if(Rules.gameOver(board)[1] == Math.abs(maxingPlayerColor-1)) { 
      System.out.println("-1"); 
      return score = -1; 
     } else{ 
      System.out.println("0"); 
      return score = 0; 
     } 

    } else { 

     int[][] availableMoves = board.availableMoves(board, currentPlayerColor); 
     int[] allScores = {}; 

     System.out.println("loop length: "+ availableMoves.length); 

     for(int x = 0; x<availableMoves.length; x++){ 
      Board temp = board; 

      if(currentPlayerColor == maxingPlayerColor){ 
       Board.doMove(availableMoves[x], temp, 7); 
      } else { 
       Board.doMove(availableMoves[x], temp, 0); 
      } 

      System.out.println(""+x); 

      allScores = add(makeMove(temp,Math.abs(maxingPlayerColor-1), maxingPlayerColor), allScores); 

      System.out.println("allscore len "+ allScores.length); 

     } 

     if(currentPlayerColor == maxingPlayerColor){ 

      for(int x = 0; x<allScores.length; x++){ 
       if(score < allScores[x]){ 
        allScores = add(score, allScores); 
       } 
      } 

      for(int x = 0; x<allScores.length; x++){ 
       if(score == allScores[x]){ 
        moveIndex = add(x,moveIndex); 
       } 
      } 

      System.out.println("max "+moveIndex.length); 
      move = availableMoves[rand.nextInt(moveIndex.length)]; 

     } else { 

      for(int x = 0; x<allScores.length; x++){ 
       if(score > allScores[x]){ 
        score = allScores[x]; 
       } 
      } 

      for(int x = 0; x<allScores.length; x++){ 
       if(score == allScores[x]){ 
        moveIndex = add(x,moveIndex); 
       } 
      } 

      System.out.println("min "+moveIndex.length); 
      move = availableMoves[rand.nextInt(moveIndex.length)]; 

     } 

    } 

    return 0; 
} 
+0

達成しようとしていることをもう少し説明してください。なぜそれは働いていないのですか? – ventiseis

+0

こんにちは、スタックオーバーフローへようこそ!あなたは間違いなく正しい場所に来て、コーディングの問題に関して高品質の助けを得ることができました。この質の高い標準は質問にも引き継がれます。あなたがあなたの質問をするのにもっと力を入れれば、他のユーザーがあなたの質問に答えてくれるほど多くの労力がかかります。質問が高品質であることを確認するには、[このガイド](https://stackoverflow.com/help/how-to-ask)を参照してください。コードで達成しようとしていることの説明、エラーメッセージ、入力と出力の例を必ず含めてください。もう一度、歓迎! –

+0

このプログラムに戻ってくる前に、基本的なことに戻ってJava構文をレビューし、いくつかの非常に基本的な問題を解決するのが最善の方法だと私は思うほど多くの問題があります。 –

答えて

0

あなたは

allScores = add(... 

とアレイ上に要素を追加しようとしている。しかし、それはそれがどのように動作するかではありません。実際に配列に要素を追加することはできません。既存の要素のみを変更できます。

int[] allScores = {}; 

しかし、それは空の配列を作成し、あなたはそれで何もできない:あなたは配列を作るとき

だから、あなたは、この持っています。代わりに、このようにそれを宣言します。

int[] allScores = new int[SIZE]; 

あなたは配列が保持する要素の数とSIZEを交換します。

次に、あなたがこのような特定の要素にアクセスして変更することができます。

allScores[index] = someNumber; 

は、いくつかの書式や構文エラーもあります。簡単な間違いを見つけるために、構文強調表示を含むテキストエディタまたはIDEを使用してみてください。

また、配列についてはthis guideをお読みください。

+0

addは配列に要素を追加するために作った別の関数です。私の問題がどこにあるの? – Quinn

+0

@Quinn関数が何であるかは関係ありません。配列に要素を追加することはできません。以前の配列よりも1サイズ大きい新しい配列を作成し、古い配列要素のすべてをコピーして、最後に新しい要素を配置することができます。しかし、それは信じられないほど非効率的で、あなたがしたいことをやるためのより良い方法があります。 ArrayListsを参照し、ここに質問を投稿するときにXY問題の犠牲にならないようにしてください。 –