0

私は、各プレーヤーの名前と一緒にプレーヤーの数を入力できるメソッド (以下に示す) を使用しています。この配列を使用してアクティブ プレイヤーを決定する方法はありますか? (ターンベースの推測ゲーム)。正しい方向に私を向けることができれば。

public class Program {
     String[] playerList;
     int playersAmount = 0;

      public void inputPlayers() {
          playersAmount = Input.readInt();
          playerList= new String[playersAmount];
          for (int g = 0; g < playersAmount; g++) {
              String namePlayer = "player " + (g+1);
              playerList [g] = namePlayer;
          }
      }
 }
4

5 に答える 5

2

プレイヤー番号の変更についての質問を確認してください。これはまさにあなたが探しているもの(または同様のもの)だと思います:Java:プレイヤー番号の変更

基本的に、ブール配列を使用して、配列インデックスがプレイヤー番号 a[0] = プレイヤー 0、a[1] = プレイヤー 1 などに対応する場所で、誰がまだプレイしているかを追跡します。プレイヤーが排除された場合は、対応するインデックスをマークしますfalse の場合:a[i] = false;次に、次の方法 (私の質問から取得) を使用して、プレーヤー番号をまだプレイしている次のプレーヤーに切り替えることができます。

public static int switchPlayer(int currentPlayer, boolean[] playerList) {
    // if the current player + 1 = length (size) of array,
    // start back at the beginning and find the first player still playing
    if(currentPlayer + 1 == playerList.length) {
        for(int i = 0; i < playerList.length; i++) {
            if(playerList[i] == true) {    // if player is still in the game
                currentPlayer = i;         // currentPlayer = current index of array
                break;
            }
        }
    }
    // otherwise the current player number + 1 is not at the end of the array
    // i.e. it is less than the length (size) of the array, so find the next player
    // still playing
    else {
        for(int i = (currentPlayer+1); i < playerList.length; i++) {
            if(playerList[i] == true) {
                currentPlayer = i;
                break;
            }
        }
    }
    return currentPlayer;
}

私のコードなどについて質問がある場合はお知らせください。

于 2013-01-07T05:45:20.877 に答える
0

私のJavaは少し錆びていますが、次のようなものが機能するはずです。

i = 0
while (playing == True)
{
    player = playerList[i]
    i = (i + 1) % playerList.length

    [Do something]
}
于 2013-01-07T04:17:56.057 に答える
0

私の意見では、あなたには2つの異なる選択肢があります。

  1. 彼の名前としてのインスタンス変数と、彼がアクティブかどうかを示すブール値を持つ Player オブジェクトを作成します。
  2. プレーヤーがアクティブかどうかを示すプレーヤー配列と同期するブール配列を作成できます。

ex for 2

boolean[] activeStatus= new boolean[1];
String[] players = new String[1];
activeStatus[0]=true;
players[0]="Joe Smith";
于 2013-01-07T04:14:54.267 に答える
0

さて、現在のプレーヤーを表すには、int を使用できます

int curplayer = 0;

ラウンドが完了するたびに、次のプレーヤーのインデックスを取得するために 1 つ追加できます。

curplayer++;

最後のプレーヤーの後に最初のプレーヤーに戻ることについては、% (モジュロ) 演算子を調べることをお勧めします。

于 2013-01-07T04:14:55.903 に答える
0

インスタンス変数を使用してターン数を追跡します。

private int turn;

毎ターンそれを増やします:

turn++;

現在のターンのプレーヤーのインデックスは、ターンをプレーヤーの数で割った余りを使用して計算できます。

int playerIndex = turn % playersAmount;

これらの部分をコードに組み込むのは、あなたに任せます。

于 2013-01-07T04:17:22.187 に答える