2

各プレイヤーのターン後にプレイヤー番号を切り替えるメソッドを書いています。まだプレイしているプレーヤー(削除されていない)を追跡するブール配列を使用しています。したがって、ゲーム開始時の配列はtrueに初期化され、ゲーム内のプレーヤー数のサイズになります。プレーヤーが削除されると、インデックスの対応する値がfalseに設定されます(たとえば、プレーヤー2が削除されると、配列の3番目のインデックスがfalseに設定されます)。(注:プレーヤー0は存在するため、2人のプレーヤーがプレイしている場合はプレーヤー0とプレーヤー1です。)プレーヤー番号が最後のプレーヤーと等しい場合は、最初からやり直して、最初のプレーヤーを見つける必要があります。まだゲーム中です。それ以外の場合、プレーヤー番号は、まだ再生中の最初のプレーヤーに増加します。これが私が持っているものです:

public static int switchPlayer(int currentPlayer, boolean[] playerList) {
    if(currentPlayer == playerList.length) {
        for(int i = 0; i < playerList.length; i++) {
            if(playerList[i] == true) {
                currentPlayer = i;
                break;
            }
        }
    }
    else {
        for(int i = (currentPlayer+1); i < playerList.length; i++) {
            if(playerList[i] == true) {
                currentPlayer = i;
                break;
            }
        }
    }
    return currentPlayer;
}

変更や提案はありますか?それは完全には機能しておらず、どこがうまくいかないのかわかりません。

答えの1つを実装しようとしましたが、実装方法がわかりません。誰かが解決策を持っていますか?

4

2 に答える 2

1

プレーヤーが 0、1、2、3 の場合。その場合、長さは 4 です。ただし、引数currentPlayerは 0 ~ 3 の値しか持てません。これはプレイヤー番号なので、これを変更してみてください。

if(currentPlayer == playerList.length) {
    for(int i = 0; i < playerList.length; i++) {
        if(playerList[i] == true) {
            currentPlayer = i;
            break;
        }
    }
}

に:

if(currentPlayer + 1 == playerList.length) {
    for(int i = 0; i < playerList.length; i++) {
        if(playerList[i] == true) {
            currentPlayer = i;
            break;
        }
    }
}
于 2012-11-22T20:07:12.240 に答える
0

現在削除されていないすべてのプレーヤーを格納するArrayListデータ構造を使用するとどうなりますか。したがって、プレーヤーが削除されたら、そのオブジェクトをArrayListから削除します。このように、プレーヤーのステータスを追跡するためにブール値を使用する必要はありません。

public static int switchPlayer(int currentPlayer, ArrayList playerList) {
    // move to the next player
    currentPlayer++;

    // reset back to the first player if we reached the end player
    if(currentPlayer >= playerList)
        currentPlayer = 0;

    return currentPlayer;
}

もともと、コードの一部で、ユーザーが削除されたことを示すために値「false」を設定していると思います。しかし、私の考えは、排除されたプレーヤーを削除することです。たとえば、2番目のプレーヤーを削除する場合は、配列リストで次のように実行できます。

list.remove(2);
于 2012-11-22T02:56:28.327 に答える