https://beastit.tistory.com/60
위 링크는 배열을 배우기 전에 콘솔을 사용하여 오목판을 만들고 좌표값을 입력하면 바둑알이 표시되게 만들었다.
다른 좌표값을 입력하면 변숫값이 다른 값으로 바뀌어서 실제 게임처럼 구현을 못한다.
이번에 배열을 배워서 값을 누적시키고, 실제 게임처럼 만들기 위해 다시 만들어봤다.
✅ 코드
import java.util.Scanner;
public class Program2 {
public static void main(String[] args) {
char board[][] = new char[12][12];// 12*12 바둑판 배열
boolean chk[][] = new boolean[12][12];//중복값 판별용 배열
// ----------------------------------------------------초기 바둑판 양식 배열에 저장
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 12; y++) {
if (x == 0 && y == 0)// 왼쪽 위 모서리막기
board[x][y] = '┌';
else if (x == 11 && y == 11)// 오른쪽 아래 모서리막기
board[x][y] = '┘';
else if (x == 11 && y == 0)// 왼쪽 아래 모서리막기
board[x][y] = '└';
else if (x == 0 && y == 11)// 오른쪽 위 모서리막기
board[x][y] = '┐';
else if (x == 0)// 위에 막기
board[x][y] = '┬';
else if (x == 11)// 아래 막기
board[x][y] = '┴';
else if (y == 0)// 왼쪽 막기
board[x][y] = '├';
else if (y == 11)// 오른쪽 막기
board[x][y] = '┤';
else
board[x][y] = '┼';
chk[x][y] = false;
}
}
// ----------------------------------------------------
int ox = -1; // 돌
int oy = -1; // 돌
//이전좌표
int xBefore = -1;
int yBefore = -1;
QUIT:
while (true) {
Scanner scan = new Scanner(System.in);
System.out.println("┌───────────────────────────┐");
System.out.println("│ Omok Game │");
System.out.println("└───────────────────────────┘");
System.out.println();
System.out.println("1. 게임시작");
System.out.println("2. 도움말");
System.out.println("3. 종료");
System.out.print(">");
int option = scan.nextInt();
switch (option) {
//1. 게임시작
case 1: {
int count = 1;// 홀수일때 흰돌, 짝수일때 검돌
GAMEOVER:
while (true) {
//중복 제거 & 첫 사이클은 그냥 지나침.
//첫 사이클부터 통과하면 배열 변수 초기값 -1이여서 오류발생!
if (ox != -1 && oy != -1 && !chk[ox][oy]) {
xBefore = ox;
yBefore = oy;
if (count % 2 == 1)
board[ox][oy] = '●';
else if (count % 2 == 0)
board[ox][oy] = '○';
chk[ox][oy] = true;
count++;
System.out.printf("☆이전 좌표 : [%2d][%2d]☆\n", xBefore, yBefore);
} else if (count > 1)
System.out.println("\n☆★☆★중복 좌표입니다.☆★☆★");
// 배열 바둑판 출력 양식.
{
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
System.out.print(board[i][j]);
}
System.out.println();
}
}
//좌표 입력
do {
System.out.println("\n그만두기:-1");
if (count % 2 == 1)
System.out.println("● 백돌 차례입니다");
else
System.out.println("○ 흑돌 차례입니다");
System.out.print(" x sp y> ");
ox = scan.nextInt();
if (ox == -1) {
System.out.println("GAMEOVER~~");
break GAMEOVER;
}
oy = scan.nextInt();
//1~11 범위를 벗어나면 배열 Index오류 발생!! ☆★중요☆★ 예) 15입력시 오류발생해서 멈춤...
if (!(1 <= ox && ox <= 11) || !(1 <= oy && oy <= 11)) {
System.out.println("\n ♨경고♨ ");
System.out.println("오목 좌표의 범위(-1 or 1~11)를 벗어났습니다.");
}
} while (!(1 <= ox && ox <= 11) || !(1 <= oy && oy <= 11));
System.out.println("==================================");
}
}
break;
//2. 도움말.
case 2: {
System.out.println("좌표를 입력하면 게임을 할 수 있다");
break;
}
//3. 종료
case 3: {
System.out.println("종료");
break QUIT;
}
}
}
}
}
✅ 실행
🚨어려웠던 점🚨
- 좌표값에 초기값으로 선언한 배열의 범위가 아닌 ' -1 '을 입력하니 Index out of bounds 오류가 발생함...
- 위 문제를 해결하기 위해 초기에 작성한 코드를 다 지우고 새로운 흐름으로 만들었음.
- Index out of bounds 오류를 해결하니... 중복값을 입력하면 바둑돌의 색이 바뀜! (미쳐버림..)
- 위 문제를 해결하기 위해 다시 흐름 정리를 하였고, 이로 인해 많은 깨달음을 얻음!
'IT > 뚝딱뚝딱' 카테고리의 다른 글
[JAVA] ✏️ 로또 프로그램 만들기! (Bottom-Up) (0) | 2023.06.29 |
---|---|
[JAVA] ✏️ 오목 게임 프로그램을 만들어보자!(데이터 저장및 불러오기) (0) | 2023.06.26 |
[JAVA] ✏️ boolean형 배열을 선언하세요. (0) | 2023.06.22 |
[JAVA] ✏️ long형 배열에 크기 3인 배열을 만들어 보자. (0) | 2023.06.21 |
[JAVA] ✏️ int형 배열 numbers를 선언해보자. (0) | 2023.06.21 |