본문 바로가기
→ My Meta+IT/JAVA Source

Java Hangman Game 소스 코드 분석 풀이

by DigitalJobs 2021. 12. 14.

Java Hangman Game 소스 코드 분석 풀이

 

전 세계에서 현재 기준 가장 많이 사용하는 언어는 JAVA 일듯 합니다.

저의 경우 수강생들분들께 언어를 수업하는 입장이며, 저 역시 가장 선호하는 언어는 JAVA입니다. JAVA의 활용도는 다른 언어에 비교해봐도 다양하게 사용되고 있습니다.

지금은 코틀린으로 전향한 앱 개발부터, 애플리케이션 개발, 백앤드 등의 대명사로 사용되고 있습니다.

물론 python 같은 언어에 비교하면 좀 무겁고 다소 불편한 부분도 있지만 지원되는 API가 많기에 어느 정도 보완될 수 있다고 생각합니다. 

 

오늘은 몇 개의 개인 공부를 위해 완성된 몇개의 소스를 올려드리려고 합니다.

코드 분석 또한 공부에 중요한 부분이 되리라 생각됩니다.


This is an example for developers starting java. Hope this helps you.


 

import java.util.*;
import java.io.*;

public class hangman {
 public static void main(String[] args) {
    
  System.out.println("========================================================");
  System.out.println("================ H A N G M A N  G A M E ================");
  System.out.println("========================================================");
  System.out.println();
  
  setGame set = new setGame();
  set.ran = (int)(Math.random() * 33);
  set.Start();
 }
}

 

import java.util.*;

import java.io.*;

코딩을 하시다 보면, 자바와 유사한 객체지향 언어에서는 import구문을 접할 수 있을 듯합니다. 이 구분은 C언어의 #include와 유사한 구문이며, JKD내의 패키지중 클래스를 가져와서 사용하기 위함입니다.

메인이 되는 클래스 hangman에서는 setGame클래스의 객체를 생성하고 그 객체 set를 통해 ran변숫값에 랜덤의 숫자를 대입 후. Start() 메서드를 호출하고 있습니다.

 

class setGame{
 Scanner al = new Scanner(System.in);
 Scanner word = new Scanner(System.in);
 int ran, count = 1;
 String input;
 char alpa;
 private char temp[] = {'_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_'};
 String ans;
 char answer[] = new char[12];
 String arr[] = { "melon", "textpad", "document", "biology", "bag", "door", "same", "different",
  "dictionary", "computer", "orange", "encyclopedia", "cell", "apple", "skeleton", "new",
  "height", "letter", "paper", "tofle", "banana", "watermelon", "printer", "photograph",
  "biology", "democracy", "math", "lecture", "smile", "middle", "puzzle", "interesing", "hi"
 };
 
 public void Start(){
  Setting();  
 }
 
 public void Setting(){
  System.out.println("★게임 시작!!! (기회는 6번)");
  System.out.println("★단어길이 : " + arr[ran].length());
  System.out.print("★단어 : ");
  //단어길이만큼 _ 긋기
  for(int i = 1; i <= arr[ran].length(); i++)
   System.out.print("_ ");
  System.out.println("\n");
  //char ans에 정해진 단어 넣고 ans에 들어간 단어를 answer배열로 입력
  ans = arr[ran];
  ans.getChars(0,  arr[ran].length(), answer, 0);
  Check();
 }

메인클래스(hangman)에서. Start() 메서드를 호출하면서 프로그램은 시작되게 됩니다.

프로그램이 시작될 때 setGame클래스 안에서는 행맨 게임 중 랜덤으로 등장하게 될 문자열들을 초기화하고 사용자에게 콘솔에서 입력받을 수 있도록  Scanner al = new Scanner(System.in);  Scanner word = new Scanner(System.in); Scanner의 인스턴즈(객체)를 생성해줍니다.

 

실제로, setGame 클래서의. Start() 메서드는 바로 setting() 메서드를 호출하여 행맨 게임을 시작하게 만들어줍니다.

setting() 메서드에서는 arr [ran]. length()를 사용하여 단어의 길이를 구할 수 있고 그 단어의 길이만큼 _(언더바)를 반복문 안에서 콘솔에 출력합니다.

※ 참고
JAVA에서는
System.out.print(), System.out.println(), System.out.printf() 메서드를 모두 사용이 가능합니다.
System.out.println()의 경우 개행을 기본적으로 포함하고 있으며, System.out.printf()의 경우 C언어의 printf 함수와 동일하게 서식 문자를 활용하여 화면 구성을 하실 수 있습니다.

  ans.getChars(0,  arr [ran]. length(), answer, 0);

랜덤으로 받은 문자열을 ans이 되어있고,. getChars() 메서드를 사용하여 answer배열의 0번지부터 복사해둡니다.

그리고 Check();메서드를 호출하여 사용자로부터 한 글자씩 입력받고 answer배열에 그 글자가 있는지 체크합니다.

public void getChars(복사할 문자 시작 색인 번호, 복사할 문자 끝 색인번호, 붙여넣을 문자열배열, 붙여넣을 위치 색인번호

 

 public void Check(){
  
   System.out.print("알파벳 한글자를 입력하세요 : ");
   input = al.nextLine();
   alpa = input.charAt(0);
   
  
  for(int i = 0; i < arr[ran].length(); i++){
   if(answer[i] == alpa){
    temp[i] = alpa;
   }
  }
  
  for(int i = 0; i < arr[ran].length(); i++)
   System.out.print(temp[i] + " ");
  System.out.println();
  System.out.println();
  WordCheck();
 }

 

check() 메서드에서 wordCheck() 메서드를 호출하면서 게임은 몇 번의 횟수만큼 반복하면서 Art() 메서드를 출력해가면서 진행됩니다.

public void WordCheck(){
  System.out.print("단어를 입력하세요(" + count + "/6) : ");
  String wd = word.nextLine();
  System.out.println();
  if(count >= 6) System.exit(0);
  if(wd.equals(ans)){
   System.out.println("정답!!! 축하합니다.");
   System.out.println(count + "번 만에 맞추셨습니다.");
  }
  else{
   Art();
   count++;
   Check();
  }
 }
 
 public void Art(){
  switch(count){
  case 1:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥              Ι");
   System.out.println("▥           ▣▣");
   System.out.println("▥           ▣▣");
   System.out.println("▥             △");
   System.out.println("▥ ☜=◁◈▷=☞");
   System.out.println("▥              ▣");
   System.out.println("▥           ↙");
   System.out.println("▥      ↙          ");
   System.out.println("▥\n");
   break;
  case 2:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥              Ι");
   System.out.println("▥           ▣▣");
   System.out.println("▥           ▣▣");
   System.out.println("▥             △");
   System.out.println("▥ ☜=◁◈▷=☞");
   System.out.println("▥              ▣");
   System.out.println("▥");
   System.out.println("▥ ");
   System.out.println("▥\n");
   break;
  case 3:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥              Ι");
   System.out.println("▥           ▣▣");
   System.out.println("▥           ▣▣");
   System.out.println("▥             △");
   System.out.println("▥ ☜=◁◈▷");
   System.out.println("▥              ▣");
   System.out.println("▥");
   System.out.println("▥ ");
   System.out.println("▥\n");
   break;
  case 4:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥              Ι");
   System.out.println("▥           ▣▣");
   System.out.println("▥           ▣▣");
   System.out.println("▥             △");
   System.out.println("▥        ◁◈▷");
   System.out.println("▥              ▣");
   System.out.println("▥");
   System.out.println("▥ ");
   System.out.println("▥\n");
   break;
  case 5:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥              Ι");
   System.out.println("▥           ▣▣");
   System.out.println("▥           ▣▣");
   System.out.println("▥");
   System.out.println("▥");
   System.out.println("▥");
   System.out.println("▥");
   System.out.println("▥ ");
   System.out.println("▥\n");
   break;
  case 6:
   System.out.println("▥▥▥▥▥");
   System.out.println("▥             ▥");
   System.out.println("▥      YOU DIE ~ !");
   System.out.println("▥  GAME OVER ~ !");
   System.out.println("▥");
   System.out.println("▥             G");
   System.out.println("▥             A");
   System.out.println("▥             M");
   System.out.println("▥             E ");
   System.out.println("▥        OVER ~ !");
   System.out.println("▥           D I E ~ !");
   break;
   }
  }
}

여기까지 행맨 게임에 대한 소스코드를 설명해보았습니다.

JAVA를 배우신 분들이라면 이해하는데 큰 어려움이 없으리라 생각됩니다만, 클래스가 이동하거나, 메서드가 호출되면서 제어권이 이동되면서 프로그램이 흘러가는 순서에 익숙하지 않으신 분들께 도움이 되고자 프로그램의 순서대로 설명을 드려봤습니다.

댓글