본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 9일차 -18

by oncerun 2020. 3. 9.
반응형

오목 게임을 만들어 보겠다. 

내가 짠 순서도는

오목판

1번째
중복된 값이 있나 확인.
바둑돌 배열에서 중복된 좌표값이 있으면 경고창 출력
2번째
순서대로 오목 알 출력   ------여기까지 완성
3번째
5개 연속적으로 그어졌을 때
그 돌의 주인이 승리.
4번째
게임 재시작 여부 묻기
5번째
아니요 - 종료
예 - 다시 오목판 출력

 

package javaExample1;

import java.util.Random;
import java.util.Scanner;

public class Ex13omokProgram2 {

	public static void main(String[] args) {

		int height = 0;
		int width = 0;
		int[] xs;
		int[] ys;
		int menu;
		Scanner scan = new Scanner(System.in);

		while (true) {
			// 메뉴판 부분.
			System.out.println("어떤 바둑판 크기를 원하십니까?");
			System.out.println("1. (20x20)");
			System.out.println("2. (40x20)");
			System.out.println("3. (60x30)");
			System.out.print(">");

			String menu_ = scan.nextLine();
			menu = Integer.parseInt(menu_);
			if (menu < 1 || menu > 3)
				System.out.println("1~3사이의 값을 입력하세요");
			else
				break;
		} // while

		switch (menu) {

		case 2:
			height = 40;
			width = 20;
			break;
		case 3:
			height = 60;
			width = 30;
			break;
		case 1:
		default:
			height = 20;
			width = 20;
		}// swich
		char[][] board = new char[height][width];
		// 바둑돌 배열크기정함
		xs = new int[width * height];
		ys = new int[width * height];

		// 바둑판 출력
		for (int y = 1; y <= height; y++) {
			for (int x = 1; x <= width; x++) {
				board[y - 1][x - 1] = '┼';
			}
		}
		// 상판
		for (int x = 1; x < width; x++)
			board[0][x - 1] = '┬';

		// 우측벽
		for (int y = 1; y <= height; y++)
			board[y - 1][width - 1] = '┤';

		// 밑판
		for (int x = 1; x <= width; x++)
			board[height - 1][x - 1] = '┴';

		// 좌측벽
		for (int y = 1; y <= height; y++)
			board[y - 1][width - 20] = '├';

		// 4개의 꼭지점.
		board[0][0] = '┌'; // 왼쪽상단모서리
		board[0][width - 1] = '┐'; // 오른쪽상단모서리
		board[height - 1][width - 1] = '┘'; // 오른쪽하단 모서리
		board[height - 1][0] = '└'; // 왼쪽하단모서리
		int index = 0;

//반복적으로 바둑돌 출력하기위한 while문
		while (true) {
			int k = 0;
			EXIT:while (k == 0) {
				System.out.println("x좌표입력,y좌표입력");
				int ox = scan.nextInt();
				int oy = scan.nextInt();
				System.out.println();
				// 입력받은 값을 인덱스에 넣고
				xs[index] = ox;
				ys[index] = oy;
				index++;
				for (int i = 0; i < index; i++) {
					for (int j = 0; j < i; j++) {
						if (xs[i] == xs[j] && ys[i] == ys[j]) {
							System.out.println("값이 중복됬습니다.");
							i--;
							index--;
							continue EXIT;
						}
					}
				}
				k++;
			}

			// 인덱스값에 해당되는 배열에 값을 넣음(0,0)을기준
			for (int i = 0; i < index; i++) {
				int x = xs[i];
				int y = ys[i];

				if (i % 2 == 0) {
					board[x][y] = '○'; // 홀수
				} else if (i % 2 == 1)
					board[x][y] = '●'; // 짝수
			}

			// 출력부분
			for (int y = 1; y <= height; y++) {
				for (int x = 1; x <= width; x++) {
					System.out.printf("%c", board[y - 1][x - 1]);
				}
				System.out.println();
			} // for

		} // while

	}// main
}// class

3번째 고민

바둑돌이

왼쪽 상단 모서리에 있을 때

오른쪽 상단 모서리 벽에 있을 때

왼쪽 하단 모서리에 있을 때

오른쪽 상단 모서리에 있을 때

왼쪽 벽에 있을 때

오른쪽 벽에 있을 때

상단 벽에 있을 때

하단 벽에 있을 때

중복되는 조건이 있는데 그럴땐 각 모서리가 우선순위가 되어야하므로 절차를 작성할때 상단에 작성해 먼저 출력되도록 하는방법이있다

반응형

댓글