목차
질문 내용
Solution
Java Java 처리의 tic tac toe

Java 처리의 tic tac toe

Feb 22, 2024 pm 12:52 PM

php 편집기 Strawberry는 최신 Java 질문 및 답변 칼럼을 제공합니다. 이번 호에서는 Java에서 틱택토(tic-tac-toe) 게임을 처리하는 데 관련된 문제를 살펴봅니다. 초보자이든 숙련된 개발자이든 여기서는 Java에서 Tic-Tac-Toe 게임을 처리하기 위한 실용적인 팁과 솔루션을 찾을 수 있습니다. 이 흥미로운 주제에 대해 자세히 알아보고 Java 프로그래밍 분야의 기술을 향상시켜 보세요!

질문 내용

현재 간단한 tic-tac-toe 게임을 개발 중인데 두 가지 영역에서 문제가 발생했습니다.

배치 문제: 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

다음 소스 코드는 마우스 누르기를 추적하는 3x3 그리드를 생성하기 위해 직사각형 클래스 배열을 사용하는 방법을 보여줍니다. 어쩌면 비슷한 기술이 게임에 사용될 수도 있습니다.

으아악

추천: 그리드에는 2D 배열이 필요하지 않습니다. 1D 배열은 잘 작동하고 너무 복잡하지 않습니다. 그리드 클래스에 두 개의 부울(왼쪽 누르기 및 오른쪽 누르기)을 추가하고 기호 매개변수를 제거하겠습니다. 그리드 클래스의 "draw()" 메소드는 "display()"와 같은 이름으로 변경되어야 할 것입니다. "draw"는 혼동을 피하기 위한 처리의 키워드이기 때문입니다. displaygrid() 및 isvalidbox() 메서드는 아래 표시된 기술을 사용하여 안전하게 제거할 수 있습니다. 주요 코드 변경은 제대로 작동하지 않으므로 mousepressed()에서 이루어져야 합니다. 그리드의 각 상자를 반복하면 마우스 버튼 클릭이 올바르게 캡처됩니다. 이 시점에서 마우스 오른쪽 버튼을 클릭했는지 왼쪽 버튼을 클릭했는지 확인할 수 있으며 해당 부울을 "true"로 설정할 수 있습니다. 그러면 메인 "draw()"는 이 정보를 사용하여 "x" 또는 "o"를 그립니다. 많은 내용처럼 들리겠지만 이러한 변경 사항은 문제를 해결하는 한 가지 방법입니다. 수정된 소스 코드는 다음과 같습니다.

으아악

위 내용은 Java 처리의 tic tac toe의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)