ホームページ > Java > Java処理における三目並べ

Java処理における三目並べ

PHPz
リリース: 2024-02-22 12:52:06
転載
842 人が閲覧しました

php editor Strawberry は、最新の Java の質問と回答のコラムを提供します。この号では、Java で三目並べ (三目並べ) ゲームを処理する際の関連問題について説明します。初心者でも経験豊富な開発者でも、ここでは Java で三目並べゲームを処理するための実用的なヒントとソリューションを見つけることができます。この興味深いトピックについてさらに学び、Java プログラミングの分野でのスキルを向上させましょう。

質問の内容

現在、単純な三目並べゲームに取り組んでいますが、次の 2 つの領域で問題が発生しています。

配置の問題: x と o の記号がグリッド上に正しく配置されていません。場所はランダムのようですが、理由はわかりません。ボックスをクリックしても、そのボックスが調整されたボックスに配置されないようです。

マウスクリックの問題: 左クリックで x を配置し、右クリックで o を配置するように設定しましたが、期待どおりに機能していないようです。

これは私の現在のコードです:

// Declare a 3x3 grid of TicTacToeBox objects
TicTacToeBox[][] grid = new TicTacToeBox[3][3];

// gameStatus:
// 0 - Display Home screen
// 1 - Display Tic Tac Toe grid
// 2 - Display Game over screen
int gameStatus = 0;

// Determine which player's turn it is 
int currentPlayer = 1;

void setup() {
  size(600, 600);
  displayHomeScreen();
}

void draw() {
  // Draw the appropriate screen based on gameStatus
  if (gameStatus == 1) {
    background(255);
    displayGrid();
  } else if (gameStatus == 2) {
    background(0);
    displayGameOver();
  }
}

void mousePressed() {
  // Check the gameStatus and respond to mouse clicks accordingly
  if (gameStatus == 1) {
    float boxSize = width / 3.0;
    int col = floor(mouseX / boxSize);
    int row = floor(mouseY / boxSize);

    // Check if the box is valid and empty
    if (isValidBox(row, col) && grid[row][col].symbol == ' ') {
      // Place X or O based on the mouse button and currentPlayer
      if (mouseButton == LEFT && currentPlayer == 1) {
        grid[row][col].symbol = 'X';
        currentPlayer = 2;
      } else if (mouseButton == RIGHT && currentPlayer == 2) {
        grid[row][col].symbol = 'O';
        currentPlayer = 1;
      }
    }
  } else if (gameStatus == 0 && mouseX > 250 && mouseX < 350 && mouseY > 250 && mouseY < 300) {
    // Transition to the game screen when PLAY is clicked
    gameStatus = 1;
  }
}

void displayGrid() {
  float boxSize = width / 3.0;

  // Loop through the grid and draw each TicTacToeBox
  for (int row = 0; row < 3; row++) {
    for (int col = 0; col < 3; col++) {
      if (grid[row][col] == null) {
        grid[row][col] = new TicTacToeBox(row, col, boxSize, ' ');
      }
      grid[row][col].draw();
    }
  }
}

// Check if the row and column are clear to place
boolean isValidBox(int row, int col) {
  return row >= 0 && row < 3 && col >= 0 && col < 3;
}

void displayHomeScreen() {
  // Display the home screen with instructions
  background(255);
  fill(0);
  textAlign(CENTER, TOP);
  textSize(50);
  text("Tic-Tac-Toe", width/2, 100);
  textSize(25);
  fill(0);
  text("Click PLAY to start", width/2, 200);
  noFill();
  rect(250, 250, 100, 50);
  textSize(20);
  fill(0);
  text("PLAY", width/2, 265);
}

void displayGameOver() {
  // Display the game over screen with a prompt to play again
  fill(255, 0, 0);
  textAlign(CENTER, TOP);
  textSize(50);
  text("GAME OVER!", width/2, 100);
  textSize(25);
  fill(0, 0, 255);
  text("CLICK TO PLAY AGAIN", width/2, 200);
}

class TicTacToeBox {
  float x;
  float y;
  float boxSize;
  char symbol = ' ';

  TicTacToeBox(float x, float y, float boxSize, char symbol) {
    this.x = x;
    this.y = y;
    this.boxSize = boxSize;
    this.symbol = symbol;
  }

  void draw() {
    stroke(0);
    noFill();
    rect(x * boxSize, y * boxSize, boxSize, boxSize);
    textAlign(CENTER, CENTER);
    textSize(32);
    fill(0);
    float symbolX = x * boxSize + boxSize/2;
    float symbolY = y * boxSize + boxSize/2;
    text(symbol, symbolX, symbolY);
  }
}
ログイン後にコピー

Solution

次のソース コードは、rect クラス配列を使用して、マウスの押下を追跡する 3x3 グリッドを作成する方法を示しています。もしかしたら、あなたのゲームでも同様のテクニックが使えるかもしれません。

リーリー ######提案:### グリッドには 2D 配列は必要ありません。1D 配列は問題なく機能し、それほど複雑ではありません。 2 つのブール値 (左押しと右押し) をグリッド クラスに追加し、シンボリック パラメーターを削除します。混乱を避けるために、「draw」は処理中のキーワードであるため、グリッド クラスの「draw()」メソッドはおそらく「display()」のような名前に変更される必要があります。メソッド displaygrid() および isvalidbox() は、以下に示す手法を使用して安全に削除できます。正しく動作しないため、主なコード変更はmousepressed()内にある必要があります。グリッド内の各ボックスをループすると、マウス ボタンのクリックが正しくキャプチャされ、その時点でマウスの右ボタンまたは左ボタンがクリックされたかどうかを確認でき、対応するブール値を「true」に設定できます。メインの「draw()」はこの情報を使用して「x」または「o」を描画します。大変そうに聞こえるかもしれませんが、これらの変更は問題を解決する 1 つの方法です。変更したソース コードは次のようになります:

リーリー

以上がJava処理における三目並べの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート