[명품 Java Programming] 4장 Open challenge
2022. 1. 5. 07:04ㆍJava/명품 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();
}
}
결과

'Java > 명품 Java' 카테고리의 다른 글
[명품 Java Programming] 5장 Open Challenge (0) | 2022.01.07 |
---|---|
[명품 Java Programming] 4장 실습문제 (0) | 2022.01.06 |
[명품 Java Programming] 7장 Open Challenge (0) | 2021.12.07 |
[명품 Java Programming] 6장 Open Challenge (0) | 2021.12.06 |