본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 4장 Open Challenge

by 푸고배 2017. 8. 10.

<끝말잇기 게임 만들기>

 

n명이 참가하는 끝말잇기 게임을 프로그램으로 만들어보자. 여러 개의 객체와 배열을 사용하는 연습을 위한 것이다. 처음 단어는 '아버지'이다. n명의 참가자들은 순서대로 자신의 단어를 입력하면 된다. 끝말잇기에서 끝말이 틀린 경우 게임을 끝내고 게임에서 진 참가자를 화면에 출력한다. 프로그램에서는 시간 지연을 구현하지 않아도 된다. 그렇지만 참가자들이 스스로 시간을 재어보는 것도 좋겠다.

이클립스에서 프로그래을 실행하면 한글 입력이 제대로 되지 않는 문제점이 있음을 꼭 기억하라. 아마도 한글 입력을 원활히 못하는 버그인 듯하다. 그래서 저자도 아래와 같이 명령창에서 프로그램을 실행하였다.

 

<소스코드> WordGameApp.java

import java.util.ArrayList;
import java.util.Scanner;

class Player{
	String name;
	String word;
	void sayWord(){
		System.out.print(name+">>");
		Scanner sc = new Scanner(System.in);
		word = sc.next(); // 사용자로부터 단어를 입력받는다.
	}
	void setName(String name){
		this.name = name;
	}
	void setWord(String word){
		this.word = word;
	}
	String getWord(){
		return word;
	}
	String getName(){
		return name;
	}
	boolean succeed(char lastChar){
		return (this.word.charAt(0) == lastChar);
		// 전 플레이어의 마지막 글자와 다음 플레이어의 첫 번째 글자가 같으면 true 반환
	}
}
public class WordGameApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Player> player = new ArrayList<Player>();
		Scanner sc = new Scanner(System.in);
		Player p;
		System.out.print("게임에 참가하는 인원은 몇명입니까>>");
		int playerNum = sc.nextInt();
		for(int i=0;i<playerNum;i++){
			System.out.print("참가자의 이름을 입력하세요>>");
			p=new Player();
			p.setName(sc.next());
			player.add(p); // 사용자가 입력한 단어를 이름으로 설정
		}
		System.out.println("시작하는 단어는 아버지입니다.");
		int i = 0;
		int j, k;
		int lastIndex;
		while(true){
			j=i%playerNum;
			System.out.print(player.get(j).getName()+">>");
			player.get(j).setWord(sc.next());// 사용자가 입력한 단어를 플레이어 단어로 설정
			if(i==0){ 
				if(!player.get(j).succeed('지')){
					System.out.println(player.get(j).getName()+"이 졌습니다.");
					break; // 지로 시작하는 단어인지 확인
				}
			} 
			else{
				k=(i-1)%playerNum; // 플레이어 수에 따른 게임 횟수
				lastIndex = player.get(k).getWord().length()-1; // 마지막 문자에 대한 인덱스
				if(!player.get(j).succeed(player.get(k).getWord().charAt(lastIndex))){
					System.out.println(player.get(j).getName()+"이 졌습니다.");
					break;				
				}
			}
			i++;
		}
	}

}

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/First_Step/tree/master/Chapter4/Open_Challenge

 
반응형

댓글