명품 자바 프로그래밍
명품 자바 프로그래밍 4장 오픈챌린지 끝말잇기 게임 만들기
렛쓰기릿
2023. 10. 21. 17:05
import java.util.*;
public class WordGameApp {
public static Scanner s = new Scanner(System.in);
// 생성자 WordGameApp()
public WordGameApp() {}
public static void run() {
System.out.print("게임에 참가하는 인원은 몇명입니까 >> ");
int players = s.nextInt();
// players수만큼 객체배열 생성 및 객체마다 이름 입력해서 할당해줌.
Player p [] = new Player[players];
for (int i = 0; i<players; i++) {
System.out.print("참가자의 이름을 입력하세요 >> ");
String name = s.next();
p[i]= new Player(name);
}
// 끝말잇기 시작
System.out.println("시작하는 단어는 아버지입니다.");
String pre_input = "아버지";
int i = 0;
while (true) {
p[i].getWordFromUser(s);
if (p[i].checkSuccess(pre_input) == false) {
System.out.println(p[i].name + "의 패배입니다.");
break;
}
pre_input = p[i].word; // 이번에 입력한 단어를 pre_input으로 바꿈
i++; // 다음순서로 넘어감
if (i==players) // i가 플레이어 순서를 넘어가면 다시 첫번째 순서로 돌아감
i =0;
}
}
public static void main(String[] args) {
System.out.println("끝말잇기 게임을 시작합니다. . .");
while (true) {
run(); // 일단 게임 한번 실행
System.out.print("게임을 다시 시작하시겠습니까? ( YES=1 / NO=0 ) : ");
int choose = s.nextInt();
if (choose == 0) {
System.out.println("끝말잇기 게임을 완전 종료합니다. . .");
break;
}
else
System.out.println("게임을 다시 시작합니다. . .");
}
}
}
// 게임 참가자 이름 필드, 단어 입력받는 getWordFromUser() 메소드,
// 끝말잇기 성공여부 및 게임 계속할건지 판별하는 checkSuccess() 메소드
class Player {
String name;
String word;
public Player(String name) {
this.name = name;
}
// 단어를 입력받는 메소드
void getWordFromUser(Scanner s) {
System.out.print(name + " >> ");
String word = s.next();
this.word = word;
}
// 끝말잇기 성공여부 및 게임 계속 여부 판별하는 메소드
public boolean checkSuccess(String pre_word) {
int lastIndex = pre_word.length() - 1; // 이전 단어의 마지막 문자에 대한 인덱스
char lastChar = pre_word.charAt(lastIndex); // 이전 단어의 마지막 문자
char firstChar = word.charAt(0); // 이번 입력한 단어의 첫번째 문자
// 이전 단어의 마지막 문자와 이번 단어의 첫번째 문자가 일치하면 => true를 리턴, 아니라면 => false 리턴
if (lastChar == firstChar)
return true;
else
return false;
}
}