자바 틱 택 톡 게임을 수정하고 싶습니다.
글쓴이: ansdyd64 / 작성시간: 금, 2018/10/26 - 11:26오전
밑에 코드는 자바 틱 택 톡 게임 코드 입니다.
현재는 하나씩 플레이 한 뒤에 승자가 정해지면 바로
승자가 출력되는 상태입니다.
현재 상태에서 9개의 칸을 모두 채운 뒤에
승자를 출력하는 걸로 수정 하고 싶습니다.
여기서 어떻게 바꿔야 할까요?
import java.util.Scanner;
public class TicTac {
public static final int zero = 0;
public static final int CROSS = 1;
public static final int NOUGHT = 2;
public static final int PLAYING = 0;
public static final int DRAW = 1;
public static final int CWON = 2;
public static final int NWON = 3;
public static final int ROWS = 3, COLS = 3;
public static int[][] board = new int[ROWS][COLS];
public static int currentState;
public static int currentPlayer;
public static int currntRow, currentCol;
public static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
initGame();
do {
playerMove(currentPlayer);
updateGame(currentPlayer, currntRow, currentCol);
printBoard();
if (currentState == CWON) {
System.out.println("'X' won! Bye!");
} else if (currentState == NWON) {
System.out.println("'O' won! Bye!");
} else if (currentState == DRAW) {
System.out.println("It's a Draw! Bye!");
}
currentPlayer = (currentPlayer == CROSS) ? NOUGHT : CROSS;
} while (currentState == PLAYING);
}
public static void initGame() {
for (int row = 0; row < ROWS; ++row) {
for (int col = 0; col < COLS; ++col) {
board[row][col] = zero;
}
}
currentState = PLAYING;
currentPlayer = CROSS;
}
public static void playerMove(int theSeed) {
boolean validInput = false;
do {
if (theSeed == CROSS) {
System.out.print("Player 'X', enter your move (row[1-3] column[1-3]): ");
} else {
System.out.print("Player 'O', enter your move (row[1-3] column[1-3]): ");
}
int row = in.nextInt() - 1;
int col = in.nextInt() - 1;
if (row >= 0 && row < ROWS && col >= 0 && col < COLS && board[row][col] == zero) {
currntRow = row;
currentCol = col;
board[currntRow][currentCol] = theSeed;
validInput = true;
} else {
System.out.println("This move at (" + (row + 1) + "," + (col + 1)
+ ") is not valid. Try again...");
}
} while (!validInput);
}
public static void updateGame(int theSeed, int currentRow, int currentCol) {
if (hasWon(theSeed, currentRow, currentCol)) { // check if winning move
currentState = (theSeed == CROSS) ? CWON : NWON;
} else if (isDraw()) {
currentState = DRAW;
}
}
public static boolean isDraw() {
for (int row = 0; row < ROWS; ++row) {
for (int col = 0; col < COLS; ++col) {
if (board[row][col] == zero) {
return false;
}
}
}
return true;
}
public static boolean hasWon(int theSeed, int currentRow, int currentCol) {
return (board[currentRow][0] == theSeed
&& board[currentRow][1] == theSeed
&& board[currentRow][2] == theSeed
|| board[0][currentCol] == theSeed
&& board[1][currentCol] == theSeed
&& board[2][currentCol] == theSeed
|| currentRow == currentCol
&& board[0][0] == theSeed
&& board[1][1] == theSeed
&& board[2][2] == theSeed
|| currentRow + currentCol == 2
&& board[0][2] == theSeed
&& board[1][1] == theSeed
&& board[2][0] == theSeed);
}
public static void printBoard() {
for (int row = 0; row < ROWS; ++row) {
for (int col = 0; col < COLS; ++col) {
printCell(board[row][col]);
if (col != COLS - 1) {
System.out.print("|");
}
}
System.out.println();
if (row != ROWS - 1) {
System.out.println("-----------");
}
}
System.out.println();
}
public static void printCell(int content) {
switch (content) {
case zero: System.out.print(" "); break;
case NOUGHT: System.out.print(" O "); break;
case CROSS: System.out.print(" X "); break;
}
}
}현재는 밑에 사진처럼 출력되고 있습니다.
File attachments:
| 첨부 | 파일 크기 |
|---|---|
| 77.04 KB |
Forums:


승패가 결정나도 계속?
승패가 결정나도 계속 하려는 까닭을 모르겠습니다만...
위 코드에서
이 부분을 고쳐야 할 거 같은데요.
어떻게 고칠 지는 저도 모르겠...
세벌 https://sebuls.blogspot.kr/
댓글 달기