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를 배우신 분들이라면 이해하는데 큰 어려움이 없으리라 생각됩니다만, 클래스가 이동하거나, 메서드가 호출되면서 제어권이 이동되면서 프로그램이 흘러가는 순서에 익숙하지 않으신 분들께 도움이 되고자 프로그램의 순서대로 설명을 드려봤습니다.
'→ My Meta+IT > JAVA Source' 카테고리의 다른 글
Java JDBC Connector j / 이클립스에서 자바 MariaDB 연결 (0) | 2021.12.21 |
---|---|
JDBC 연동을 위한 Connector J 다운로드 (0) | 2021.12.21 |
Swing table에 combo box 설정 (0) | 2021.12.15 |
JButton image 넣고 background 투명하게 설정 (0) | 2021.12.14 |
Java Bingo 소스 코드 분석 풀이 (0) | 2021.12.14 |
댓글