-> 블로그 이전

[명품 Java] Open Challenge-4 (끝말잇기 게임)

2021. 11. 22. 15:04Solution`/Java

n명이 참가하는 끝말잇기 게임을 만들어보자. 처음 단어는 “아버지”이다. n명의 참가자들은 순서대로 자신의 단어를 입력하면 된다. 끝말잇기에서 끝말이 틀린 경우 게임을 끝내고 게임에서 진 참가자를 화면에 출력한다. 프로그램에서는 시간 지연을 구현하지 않아도 된다. 그렇지만 참가자들이 스스로 시간을 제어보는 것도 좋겠다. 이 문제의 핵심은 여러 개의 객체와 배열 사용을 연습하기 위한 것으로, main()을 포함하는 WordGameApp 클래스와 각 선수를 나타내는 Player 클래스를 작성하고, 실행 중에는 WordGameApp 객체 하나와 선수 숫자만큼의 Player 객체를 생성하는데 있다. 문제에 충실하게 프로그램을 작성하여야 실력이 늘게 됨을 알기 바란다.

끝말잇기 게임을 시작합니다...
게임에 참가하는 인원은 몇명입니까? >> 3
참가자의 이름을 입력하세요 >> 황기태
참가자의 이름을 입력하세요 >> 이재문
참가자의 이름을 입력하세요 >> 한원선
시작하는 단어는 아버지입니다.
황기태 >> 지구
이재문 >> 구더기
한원선 >> 기지개
황기태 >> 개나리
이재문 >> 레몬
이재문이 졌습니다.

package OpenChallenge;
import java.util.Scanner;

class Player{
    String name;
    public Player(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
}

public class WordGameApp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("끝말잇기 게임을 시작합니다...");

        String word = "아버지";
        int lastIndex = word.length() - 1; // 마지막 문자 인덱스
        char lastChar = word.charAt(lastIndex); // 마지막 문자
        char firstChar = word.charAt(0); // 첫 번째 문자

        System.out.print("게임에 참가하는 인원은 몇명입니까? >> ");
        int num = sc.nextInt();

        Player [] p = new Player[num];

        for(int i=0; i<num; i++){
            System.out.print("참가자의 이름을 입력하세요>>");
            p[i] = new Player(sc.next());
        }

        System.out.print("### 참가자 명단 ###\n>> ");
        for(int i=0; i<num; i++){
            System.out.print(p[i].getName() + " ");
        }
        System.out.println("\n");

        System.out.println("시작하는 단어는 '" + word + "' 입니다.");

        int cnt=0;
        while(true){
            System.out.print(p[cnt].getName() + ">>");
            String nextword = sc.next();
            firstChar = nextword.charAt(0);

            if(firstChar != lastChar){
                System.out.println(p[cnt].getName() + " Lose!!");
                System.out.println("게임 종료!!");
                break;
            }
            lastIndex = nextword.length() - 1;
            lastChar = nextword.charAt(lastIndex);
            cnt++;

            if(cnt > num-1)
                cnt = 0;
        }
    }
}
-------------------------------------
끝말잇기 게임을 시작합니다...
게임에 참가하는 인원은 몇명입니까? >> 3
참가자의 이름을 입력하세요>>황기태
참가자의 이름을 입력하세요>>이재문
참가자의 이름을 입력하세요>>한원선
### 참가자 명단 ###
>> 황기태 이재문 한원선 

시작하는 단어는 '아버지' 입니다.
황기태>>지구
이재문>>구단
한원선>>단무지
황기태>>지우개
이재문>>게딱지
이재문 Lose!!
게임 종료!!