문제
1.컴퓨터가 랜덤으로 영어단어를 선택합니다.
2.영어단어의 자리수를 알려줍니다.
ex ) PICTURE = 7자리 ⇒ _ _ _ _ _ _ _
3.사용자는 A 부터 Z 까지의 알파벳 중에서 하나를 입력합니다.
4.입력값이 A-Z 사이의 알파벳이 아니라면 다시 입력을 받습니다
5.입력값이 한 글자가 아니라면 다시 입력을 받습니다
6.이미 입력했던 알파벳이라면 다시 입력을 받습니다.
7.입력값이 정답에 포함된 알파벳일 경우 해당 알파벳이 들어간 자리를 전부 보여주고, 다시 입력을 받습니다.
ex ) 정답이 eyes 인 경우에 E 를 입력했을 때
._ _ _ _ → E _ E _
8.입력값이 정답에 포함되지 않은 알파벳일 경우 기회가 하나 차감되고, 다시 입력을 받습니다.
9.사용자가 9번 틀리면 게임오버됩니다.
10.게임오버 되기 전에 영어단어의 모든 자리를 알아내면 플레이어의 승리입니다.
실행화면 예시
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Random;
public class Main {
private String[] word = {
"airplane", "apple", "arm", "bakery", "banana", "bank", "bean", "belt",
"bicycle", "biography", "blackboard", "boat", "bowl", "broccoli", "bus",
"car", "carrot", "chair", "cherry", "cinema", "class", "classroom", "cloud",
"coat", "cucumber", "desk", "dictionary", "dress", "ear", "eye", "fog",
"foot", "fork", "fruits", "hail", "hand", "head", "helicopter", "hospital",
"ice", "jacket", "kettle", "knife", "leg", "lettuce", "library", "magazine",
"mango", "melon", "motorcycle", "mouth", "newspaper", "nose", "notebook",
"novel", "onion", "orange", "peach", "pharmacy", "pineapple", "plate",
"pot", "potato", "rain", "shirt", "shoe", "shop", "sink", "skateboard",
"ski", "skirt", "sky", "snow", "sock", "spinach", "spoon", "stationary",
"stomach", "strawberry", "student", "sun", "supermarket", "sweater",
"teacher", "thunderstorm", "tomato", "trousers", "truck", "vegetables",
"vehicles", "watermelon", "wind"
};
//랜덤으로 단어선정하는 함수
public String pickword() {
Random random=new Random(); ////랜덤 객체 생성
String answer=word[random.nextInt(word.length)];
return answer;
}
public static void main(String[] args) {
Main randomword=new Main();
String mainword=randomword.pickword();
int chance = 9; //기회 9번
// 사용자가 입력한 알파벳 저장리스트
ArrayList<String> check = new ArrayList<>();
// 랜덤으로 추출된 단어를 한 글자씩 쪼개서 리스트에 저장
ArrayList<Character> single = new ArrayList<>();
for (char c : mainword.toCharArray()) {
single.add(c);
}
//추출한 단어를 '_'형태로 출력
char[] wordnum= new char[mainword.length()];
for(int g=0;g<wordnum.length;g++)
{
wordnum[g]='_';
}
while(chance>0){
for(char c:wordnum) {
System.out.print(c+" ");
}
System.out.println("현재 남은기회:"+ chance);
System.out.println("a-z중 하나를 입력해주세요");
Scanner sc=new Scanner(System.in);
String alphabet=sc.nextLine();
//한글자 인지 아닌지 체크
if(alphabet.length()!=1)
{
System.out.println("한글자가 아닙니다 다시 입력하세요 기회가 1 차감됩니다");
chance -=1;
continue;
}
//이미 입력한 알파벳 확인
if(check.contains(alphabet))
{
System.out.println("이미 입력된 글자 입니다 기회가 1 차감됩니다.");
chance -=1;
continue;
}
check.add(alphabet);
//입력한 글자가 포함될 시
boolean checking=false;
for(int i=0;i<single.size();i++)
{
if(single.get(i) == alphabet.charAt(0))
{
wordnum[i]=alphabet.charAt(0);
checking=true;
}
}
//입력한 글자가 포함되지 않을시
if(!checking)
{
System.out.println("입력된 글자가 해당 단어에 포함되지 않습니다");
chance -=1;
}
//기회를 모두 소모했을 때
if(chance==0)
{
System.out.println("기회가 모두 소모되었습니다. 게임을 종료합니다");
System.exit(0);
}
//단어를 완성시켰을때
boolean allmatch =true;
//check 입력된 문자들이 single에 없다면 allmatch는 하지 못한것으로 설정
for(char c:single)
{
if(!check.contains(String.valueOf(c))) {
allmatch=false;
break;
}
}
//모두 매치될때
if(allmatch) {
System.out.println("축하합니다 단어를 모두 맞추셨습니다. 게임을 종료합니다");
System.exit(0);
}
}
}
}
✒️ 회고
- 많이 써보지 않는 ArrayList와 주요 메소드를 잘 몰라서 적용시키는데 시간이 좀 걸렸다.
- ArrayList 에도 char형,string 형,integer 형 다양하기 때문에 그에 맞는 메소드를 적용시키는 것을 자주 연습해야겠다.
'코딩테스트 > Java' 카테고리의 다른 글
[Java]자연수 뒤집어 배열로 만들기(valueOf()사용) (0) | 2025.03.04 |
---|---|
[Java]가위 바위 보 게임 (1) | 2025.02.11 |
[Java]Lv2. 스파르타 자판기 (0) | 2025.02.07 |
[Java]Lv1. 랜덤 닉네임 생성기 (0) | 2025.02.06 |
[Java]반복문 연습하기 (0) | 2025.02.06 |