[명품 Java Programming] 4장 Open challenge

2022. 1. 5. 07:04Java/명품 Java

**모든 소스코드는 해당 문제가 수록된 장까지의 교재 내용만을 이용하여 작성하였습니다** 

 

[Open challenge] n명이 참가하는 끝말잇기 게임을 만들어보자. 처음 단어는 "아버지"이며 n명의 참가자들은 순서대로 자신의 단어를 입력. 끝말이 틀린 경우 게임을 끝내고 진 참가자를 출력. main()을 포함하는 WordGameApp 클래스와 각 선수를 나타내는 Player 클래스를 작성, 실행 중에는 WordGameApp 객체 하나와 선수 숫자만큼의 Player 객체를 생성.

 

 

힌트 참고 없이 작성한 소스코드(WordGameApp 클래스 => Main으로 변경하여 작성함)

import java.util.*;

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

public class Main{
	public Main(){
		Scanner sc = new Scanner(System.in);
		System.out.println("끝말잇기 게임을 시작합니다...");
		System.out.print("게임에 참가하는 인원은 몇명입니까>>");
		
		int n = sc.nextInt();
		Player[] players = new Player[n];
		
		for(int i = 0; i<n; i++) {
			System.out.print("참가자의 이름을 입력하세요>>");
			String name = sc.next();
			players[i] = new Player(name);
		}
		
		System.out.println("시작하는 단어는 아버지입니다");
		
		String before, after;
		Character endchar = '지';
		
		while(true) {
			for(int i =0; i<n; i++) {
				System.out.print(players[i].name + ">>");
				after = sc.next();
				
				if(after.charAt(0) == endchar) {
					int index = after.length()-1;
					endchar = after.charAt(index);
				}else {
					System.out.println(players[i].name + "이 졌습니다.");
					return;
				}
			}
		}
	}
    public static void main(String[] args){
    	new Main();
     }
}

 

 

 

 

 

 

 

힌트 조건 참고한 소스코드

<조건>

1.Main 클래스에 생성자, main(), 게임을 진행하는 run( ) 메소드 두기(run( )메소드는 선수 숫자 만큼  Player 객체 배열로 생성)

2.Player 클래스에 참가자 이름 필드, 단어 입력받는 getWordFromUser( ) 메소드, 끝말잇기 성공여부와 게임 지속 여부 판별하는 checkSuccess( ) 메소드

import java.util.*;

class Player{
	Scanner scanner = new Scanner(System.in);
	String name;
	String input;
	
	public Player() {}
	public Player(String name) {this.name = name;}
	
	public void getWordFromUser() {
		Scanner scanner = new Scanner(System.in);
		System.out.print(this.name + ">>");
		this.input = scanner.next();
	}
	
	
	public boolean checkSuccess(String word) {
		int index = word.length()-1;
		if(this.input.charAt(0) == word.charAt(index)) {
			return true;
		}else {
			return false;
		}
	}
	
}

public class Main{
	public Main(){
		this.run();
	}
	
	public void run() {
		Scanner sc = new Scanner(System.in);
		System.out.println("끝말잇기 게임을 시작합니다...");
		System.out.print("게임에 참가하는 인원은 몇명입니까>>");
		
		int n = sc.nextInt();
		Player[] players = new Player[n];
		
		for(int i = 0; i<n; i++) {
			System.out.print("참가자의 이름을 입력하세요>>");
			String name = sc.next();
			players[i] = new Player(name);
		}
		
		System.out.println("시작하는 단어는 아버지입니다");
		String word = "아버지";
		
		while(true) {
			for(int i =0; i<n; i++) {
				players[i].getWordFromUser();
				
				if(players[i].checkSuccess(word) == false) {
					System.out.println(players[i].name + "이 졌습니다.");
					return;
				}else {
					word = players[i].input;
				}
			}
		}
	}
    public static void main(String[] args){
    	new Main();
     }
}

 

 

 

 

 

 

결과