0

私はJavaが初めてで、誰かが以下を手伝ってくれるとありがたい. チェス盤のスコアキーパーを作ろうとしています。現時点では、スコアは毎回ゼロに戻ります。以前のスコアを保存して、すべての動きに追加するにはどうすればよいですか? ありがとう!

public static int scoreKeeper(Chessmen[][] chessboard, int X, int Y, int X1, int Y1, int currentNumber, int totalNumber){

    AbstractPiece knight = new Knight();
    AbstractPiece bishop = new Bishop();
    AbstractPiece pawn = new Pawn();
    AbstractPiece king = new King();
    AbstractPiece queen = new Queen();
    AbstractPiece rook = new Rook();

    if ((chessboard[Y][X] == Chessmen.WHITE_KNIGHT) || 
            (chessboard[Y][X] == Chessmen.BLACK_KNIGHT)){
        currentNumber = currentNumber+totalNumber+knight.relativeValue();
        return currentNumber;
    }else return totalNumber;
}
4

3 に答える 3

1

最も簡単な解決策は、スコアをクラス データ メンバーとして保存することです。

class Game {
    static int score;

    public static int updateScore(... some inputs...) {
        if(some condition is true) {
            score = score + whatever you want to add;
        }
    }
}

クラスは、メソッド呼び出し間で「スコア」の値を保持します。

于 2013-10-25T17:22:05.990 に答える
1

抽象化が悪いと思います。Chessboardの 2D 配列を非表示にする必要があると思いますChessmen。現在のスコアをデータ メンバーとして保持します。ピースを適切に選択して移動するメソッドを提供します。

そのコンストラクターが Chessboard をインスタンス化していることがわかります。各ピースを適切な開始位置に設定します。次に、各プレーヤーが交代で移動します。

些細な問題ではありません。

于 2013-10-25T17:23:16.017 に答える
1

あなたが抱えている主な問題は、currentNumberの値をパラメーターとして渡していることです。つまり、このメソッドの外では変更されないことを意味します。この例は私の要点を示しています

public class Test{

   public static void main (String[] args){
       int a = 0 ;
       changeValue(a);
       System.out.print(a);
   }
   public static  void changeValue(int a){
       a=20;
   }
}

出力は常に 0 になります。

メソッドgetValueOfCurrentNumber()およびgetValueOfTotalNumbe( ) を記述することで解決できます

パラメータとして受け取る代わりに、値[currentNumber and totalNumbe]を取得 します。

于 2013-10-25T17:32:20.857 に答える