2022. 3. 17. 11:08ㆍJAVA
문제 : n명이 참가하는 끝말잇기 게임을 프로그램을 만들어보기. 처음 단어는 '오징어'이고, n명의 참가자들이 수서대로 자신의 단어를 입력하면 된다. 끝말잇기에서 틀린 경우 게임을 끝내고 틀린 참가자를 화면에 출력한다.
class Player {
String name;
public String getWordfromUser() {
Scanner scan = new Scanner(System.in);
String word = scan.nextLine();
return word;
}
public boolean checkSuccess(String w1,String w2) { // 처음,다음거
String word1 = w1;
String word2 = w2;
int lastIndex = word1.length()-1;
char lastChar = word1.charAt(lastIndex);
char fistChar = word2.charAt(0);
if(lastChar == fistChar) {
return true;
}else {
return false;
}
}
}
public class WordGameApp {
static Scanner scan = new Scanner(System.in);
public static void run(int playersu) {
System.out.println("참가자의 이름을 입력하세요: ");
Player[] player = new Player[playersu];
for(int i=0;i<player.length;i++) {
player[i] = new Player();
player[i].name = scan.nextLine(); // 참가자들 이름 입력
}
System.out.println("시작하는 단어는 오징어 입니다.");
System.out.println(player[0].name + ">>");
String word = player[0].getWordfromUser();
if(player[0].checkSuccess("오징어",word)) {
int j=0;
while(true) {
int i;
j++;
i = j % playersu;
System.out.println(player[i].name + ">>");
String word2 = player[i].getWordfromUser();
if(player[i].checkSuccess(word,word2)) {
word = word2;
}else {
System.out.println(player[i].name + "님 탈락");
return;
}
}
}else {
System.out.println(player[0].name + "님 탈락");
}
}
public static void main (String[] args) {
System.out.println("끝말잇기 게임을 시작합니다.");
System.out.println("게임에 참가하는 인원이 몇 명입니까?");
Scanner scan = new Scanner(System.in);
int playersu = scan.nextInt();
run(playersu);
}
}
일단 main메소드의 Scanner scan = new Scanner(System.in)는 없어도 된다.
WordGameApp class의 필드에 Scanner scan = new Scanner(System.in)가 있기 때문이다.
여기서 main함수의 Scanner scan = new Scanner(System.in)만 지우면 안 된다.
player[i].name = scan.nextLine()을 scan.next()로 바꿔야한다.
왜냐하면 main 메소드에서 playersu를 scan.nextInt() 로 받을 때 enter키가 scan 값에 남아있다.
따라서, scan에 있는 enter 값을 없애주던가 아니면 scan.nextInt()함수를 사용해야한다.
내 코드를 보고 내가 한 피드백 : 일단 코드가 너무 지저분하고, 무작정 코딩하려하지말고 구상을 하고 코드를 작성하는 게 좋을 것 같다.
가장 문제가 되는 부분은 run() 메소드부분(시작 단어는 오징어 입니다. 이후부터)인데 이 부분을 수정해야한다.
package game;
import java.util.Scanner;
class Player {
String name;
public String getWordfromUser() {
Scanner scan = new Scanner(System.in);
String word = scan.nextLine();
return word;
}
public boolean checkSuccess(String w1,String w2) {// 오징어(처음) -> 어묵(다음)
String word1 = w1;
String word2 = w2;
int lastIndex = word1.length()-1;
char lastChar = word1.charAt(lastIndex);
char fistChar = word2.charAt(0);
if(lastChar == fistChar) {
return true;
}else {
return false;
}
}
}
public class WordGameApp {
static Scanner scan = new Scanner(System.in);
public static void run(int playersu) {
String lastWord;
String inputWord;
System.out.println("참가자의 이름을 입력하세요: ");
Player[] player = new Player[playersu];
for(int i=0;i<player.length;i++) {
player[i] = new Player();
player[i].name = scan.next(); // 참가자들 이름 입력
}
System.out.println("시작하는 단어는 오징어 입니다.");
lastWord = "오징어";
while(true){
for(int i=0; i<playersu ; i++) {
System.out.println(player[i].name + ">>");
inputWord = player[i].getWordfromUser();
if(player[i].checkSuccess(lastWord,inputWord)) {
lastWord = inputWord;
}else {
System.out.println(player[i].name + "님 탈락");
System.exit(0);
}
}
}
}
public static void main (String[] args) {
System.out.println("끝말잇기 게임을 시작합니다.");
System.out.println("게임에 참가하는 인원이 몇 명입니까?");
int playersu = scan.nextInt();
run(playersu);
}
}
lastWord라는 변수와 while - for - if 순으로 구조를 만드니 더 간단하게 코드가 완성됬다.
얻었던 점: 구조를 그리고 코드를 작성하자!
이상입니다.
나중에 제대로된 끝말잇기 게임 만들어보기! 일단 명품 자바 끝내고..
추가해야할 것:
시간제한 + 실제로 존재하는 단어인 지 확인 + 'ㄹ' -> 'ㅇ'로 바꾸기 !
'JAVA' 카테고리의 다른 글
java- 간단한 스케줄러 만들어보기 (0) | 2022.03.18 |
---|---|
java 공부 - 간단한 예약 시스템 만들기 (0) | 2022.03.18 |
java공부 - 회원관리 프로그램 만들기 (0) | 2022.03.11 |
java 공부 - 문자를 유니코드 변환하는 방법 (0) | 2022.03.09 |
java공부 - 객체와 클래스를 이용하여 계산기 만들기 (0) | 2022.02.23 |