[Java]Lv3. 단어 맞추기 게임

2025. 2. 10. 20:01·코딩테스트/Java

문제

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
'코딩테스트/Java' 카테고리의 다른 글
  • [Java]자연수 뒤집어 배열로 만들기(valueOf()사용)
  • [Java]가위 바위 보 게임
  • [Java]Lv2. 스파르타 자판기
  • [Java]Lv1. 랜덤 닉네임 생성기
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (152)
      • JavaScript (8)
      • SQL (11)
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (30)
        • 트러블슈팅 (10)
        • 프로젝트 회고 (18)
      • git,Github (2)
      • TIL (38)
      • Spring (20)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스파르타 코딩 #부트캠프 #첫ot
    java #arraylist #list #배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[Java]Lv3. 단어 맞추기 게임
상단으로

티스토리툴바