> Java> 본문

Java 처리의 tic tac toe

PHPz
풀어 주다: 2024-02-22 12:52:06
앞으로
719명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!