M

4장 Open Challenge 본문

Java/명품 Java Programming

4장 Open Challenge

M_master 2022. 2. 6. 23:07

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

import java.util.Scanner;

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

	public void setWordFromUser(String word) {
		this.word = word;
	}
	
	public boolean checkSuccess(char lastWord) {
		char firstWord = this.word.charAt(0);
		
		if(firstWord != lastWord) return false;
		
		return true;
	}
}

public class WordGameApp {
	
	public static void run() {
		String word = "아버지";
		Scanner sc = new Scanner(System.in);
		
		System.out.println("끝말잇기 게임을 시작합니다...");
		System.out.print("게임에 참가하는 인원은 몇명입니까>>");
		int players = sc.nextInt();
		
		Player[] player = new Player[players];
		
		sc.nextLine();
		
		for(int i = 0; i < player.length; i++) {
			System.out.print("참가자의 이름을 입력하세요>>");
			String name = sc.nextLine();
			player[i] = new Player(name);
		}
		
		System.out.println("시작하는 단어는 "+ word +"입니다");
		
		int  i = 0;
		while(true) {
			i %= players;
			
			int lastIndex = word.length() - 1;
			char lastWord = word.charAt(lastIndex);
			
			System.out.print(player[i].getName() +">>");
			word = sc.nextLine();
			player[i].setWordFromUser(word);
			
			if(player[i].checkSuccess(lastWord) == false) {
				System.out.println(player[i].getName() +"이 졌습니다.");
				break;
			}
			
			i++;
		}
		
		sc.close();
	}
	
	public static void main(String[] args) {
		WordGameApp.run();
	}

}
728x90

'Java > 명품 Java Programming' 카테고리의 다른 글

4장 실습문제  (0) 2022.02.07
4장 연습문제  (0) 2022.02.07
3장 실습문제  (0) 2022.01.29
3장 연습문제  (0) 2022.01.26
3장 Open Challenge  (0) 2022.01.26