단어를 주어진 기회 안에 맞추는 게임을 만들어 보자!
이런 느낌의 이미지가 있었는데, 먼저 든 생각은 콘솔로 만들기 어려울 것 같았다(로직보단 ui가....)
최대한 저 이미지 처럼 비슷하게 표현하려고 노력했다.
조건은 이러하다.
1. 컴퓨터가 랜덤으로 영어단어를 선택한다.
2. 사용자는 A부터 Z까지의 알파벳 중에서 하나를 입력한다.
3. 사용자가 9번 틀리면 게임오버된다.
4. 게임오버 되기 전에 영어단어의 모든 자리를 알아내면 플레이어의 승리다.
영어단어는 간단하게 gpt에 부탁해서 7개를 뽑아왔다.
배열, 리스트, 셋을 사용해서 구현했다.
구현
import java.text.MessageFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] randomWords = {"Serendipity", "Melancholy", "Quixotic", "Ephemeral","Luminous","Tranquil","Perplex"};
List<Character> alphabet = new ArrayList<>();
Set<Character> inputList = new HashSet<>();
for(int i = 'A'; i <= 'Z'; i++) {
alphabet.add((char)i);
}
for (int i = 0; i < randomWords.length; i++) {
randomWords[i] = randomWords[i].toUpperCase();
}
var chance = 9;
var scanner = new Scanner(System.in);
var randomWord = randomWords[new Random().nextInt(0, randomWords.length)];
var rightWords = new Character[randomWord.length()];
for (int i = 0; i < rightWords.length; i++) {
rightWords[i] = '_';
}
while(chance > 0){
// 콘솔 클리어용
for(int i = 0; i < 30; ++i){
System.out.println();
}
// ui
System.out.println(MessageFormat.format("남은 기회: {0}", chance));
for (Character c : rightWords) {
System.out.print(c);
System.out.print(' ');
}
System.out.println();
for (Character c : alphabet) {
if(inputList.contains(c)){
System.out.print('■');
}
else{
System.out.print(c);
}
System.out.print(' ');
}
System.out.println();
System.out.println();
// input
String input = "";
while (true){
System.out.print("단어를 입력하세요: ");
input = scanner.next();
if(input.length() > 1 ||
!('A' <= input.charAt(0) && input.charAt(0) <= 'Z') ||
inputList.contains(input.charAt(0))) {
System.out.println();
continue;
}
break;
}
// logic
inputList.add(input.charAt(0));
for (int i = 0; i < randomWord.length(); i++) {
if(input.charAt(0) == randomWord.charAt(i)){
rightWords[i] = randomWord.charAt(i);
}
}
// 결과 검사
boolean clear = true;
for (Character c : rightWords) {
if(c == '_'){
clear = false;
break;
}
}
if(clear){
System.out.println(MessageFormat.format("정답은 {0}였습니다.", randomWord));
System.out.println("승리하셨습니다.");
return;
}
else chance--;
}
System.out.println(MessageFormat.format("정답은 {0}였습니다.", randomWord));
System.out.println("게임 오버");
}
}
'부트캠프 > 데일리 미션' 카테고리의 다른 글
단어 맞추기 게임을 웹페이지로 만들어 보자! (0) | 2024.07.03 |
---|---|
보너스 문제 (0) | 2024.07.01 |
Lv2. 스파르타 자판기 (0) | 2024.06.30 |
Lv1. 랜덤 닉네임 생성기 (0) | 2024.06.30 |