본문 바로가기
자바

[자바] 3x3 빙고 게임을 실행하는 프로그램을 작성하시오 tictactoe

by 이얏호이야호 2022. 12. 31.

공부하시는대에 도움이 됐으면 좋겠습니다.

답안코드 확인해주세요!

입출력예시

빙고게임 결과
빙고게임결과1
빙고게임결과2
빙고게임결과2

 

 

 

 

답안코드

더보기
import java.util.*;

public class Main
{


    private static char[][] board = new char[3][3];
    private static char turn;
    private static int row;             
    private static int col;             
    private static int turnRow;         
    private static int turnCol;        
    private static boolean entryError;
    private static boolean anotherGame = true;
    private static char repeat;        
    private static int entryCount = 0; 
                                        

    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);

        while(anotherGame)
        {
            newGame();

            while(!winner())
            {
                writeBoard();
                getMove();
            }

            System.out.println("y나 Y를 입력하면 게임은 다시 시작됩니다.");
            repeat = keyboard.next().charAt(0);
            if(repeat == 'y' || repeat == 'Y')		//y라면 게임을 계속한다
                anotherGame = true;
            else
                anotherGame = false;
        }
    }

    private static void writeBoard()		//표지만들기
    {
        System.out.println("-----------------");
        System.out.println("|R\\C| 1 | 2 | 3 |");
        System.out.println("-----------------");
        for(row = 0; row < 3; ++row)
        {
            System.out.println("| " + (row + 1)
                            + " | " + board[row][0]
                            + " | " + board[row][1]
                            + " | " + board[row][2]
                            + " |");
            System.out.println("-----------------");
        }
    }

    private static void getMove()
    {
        entryError = true;                             
        Scanner keyboard = new Scanner(System.in);

        while(entryError)
        {
            System.out.println();
            System.out.println(turn + "의 차례");
            System.out.println("어디에 두고 " + turn + " 싶습니까?");
            System.out.println("행과 열을 띄워서 입력해주세요 ");
            System.out.println();

            turnRow = keyboard.nextInt();
            turnCol = keyboard.nextInt();
            System.out.println("당신은 행" + turnRow+"을 선택");
            System.out.println("당신은 열" + turnCol+"을 선택");

            

            if (turnRow < 1 || turnRow > 3 || turnCol < 1 || turnCol > 3)
            {
                System.out.println("다시 입력하세요 유효한 값이 아닙니다.");
                System.out.println(
                       "행렬은 1,2,3안에 있는 숫자로 입력해야합니다.");
            }

            
            else if (board[turnRow - 1][turnCol - 1] == 'X'
                        || board[turnRow - 1][turnCol - 1] == 'O')
            {
                System.out.println("이미 차있는 자리입니다.");
                System.out.println("다시 선택해주세요.");
            }

            else 
            {
                entryError = false;
                System.out.println("당신의 선택.");
                board[turnRow - 1][turnCol - 1] = turn;
                ++entryCount;
            }
        }
    }

    private static boolean winner()
    {
        // 행에서 승리한 경우

        for(row = 0; row < 3; ++row)
        {
            if(board[row][0] == turn)
            {
                if(board[row][1] == turn)
                {
                    if(board[row][2] == turn)
                    {
                        System.out.println();
                        System.out.println (turn + " 가 승리했습니다!");
                        writeBoard();
                        return true;
                    }
                }
            }
        }

        // 열에서 승리한 경우

        for(col = 0; col < 3; ++col)
        {
            if(board[0][col] == turn)
            {
                if(board[1][col] == turn)
                {
                    if(board[2][col] == turn)
                    {
                        System.out.println();
                        System.out.println (turn + " 가 승리했습니다.");
                        writeBoard();
                        return true;
                    }
                }
            }
        }

        // 대각선 승리한 경우

        if(board[0][0] == turn)
        {
            if(board[1][1] == turn)
            {
                if(board[2][2] == turn)
                {
                    System.out.println();
                    System.out.println (turn + " 가 승리했습니다.");
                    writeBoard();
                    return true;
                }
            }
        }

        if(board[0][2] == turn)
        {
            if(board[1][1] == turn)
            {
                if(board[2][0] == turn)
                {
                    System.out.println();
                    System.out.println (turn + "  가 승리했습니다.");
                    writeBoard();
                    return true;
                }
            }
        }

     //비기는 경우

        if(entryCount >= 9)
        {
            System.out.println();
            System.out.println("비겼습니다.");
            writeBoard();
            return true;
        }

        else  // 다음 턴
        {
            if(turn == 'X')
                turn = 'O';
            else
                turn = 'X';
            return false;
        }
    }

    private static void newGame()
    {
        System.out.println();
        System.out.println("새로운 게임입니다 X먼저!");
        turn = 'O';        

        for(row = 0; row < 3; ++row)
        {
            for(col = 0; col < 3; ++col)
                board[row][col] = ' ';
        }
        entryCount = 0;
        System.out.println();
    }
}

 

 

 

더 많은 자바코드가 보고 싶다면?

 

 

https://chuinggun.tistory.com/category/%EC%9E%90%EB%B0%94/%EC%9E%90%EB%B0%94

 

댓글