반응형
👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
이번 주 미션을 마무리하며
어제 만들었던 작은 미션을 좀더 확장해보고자 하였다
기본 게임에서 확장된 암기 퀴즈 게임도 만들었는데
같이 작업한 동생이 너무 잘해주었다
(뿌듯)
수월하게 마무리 한 것 같아 정말 맘에든다.
그리고 사용한 클래스 , 메서드, 생성자 등등
그런 기능들을 써보면서 정리하고 어떻게 하면 더 잘 하는 건지
고민을 더 해볼 수 있는 기회가 된 것 같았다
소스코드
package block;
public class Main {
public static void main(String[] args) {
new Exe();
}
}
package block;
import java.util.Scanner;
public class Exe {
Scanner in = new Scanner(System.in);
// 생성자
public Exe() {
boolean flag = true;
while (flag) {
String choice = info();
if (choice.equals("1")) new MemoryTest();
else if (choice.equals("2")) new InfiniteGame();
else {
flag = false;
System.out.println("프로그램을 종료합니다.");
break;
}
}
}
// 시작 멘트
public String info () {
System.out.println(" ▉▉▉▉ ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉ ▉" + "ニ|∧,,∧\n" +
"▉ ▉ ▉ ▉▉ ▉▉ ▉ ▉▉ ▉▉ ▉ ▉▉ ▉ ▉ ▉" + "ニ(・ω・;)\n" +
"▉ ▉▉ ▉▉▉▉▉ ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉ ▉ ▉" + "ニと )\n"+
"▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉ ▉▉ ▉ ▉"+"ニと_ノ\n"+
" ▉▉▉ ▉ ▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉▉▉▉▉ ▉ ▉ ▉▉▉"+"ニ|\n");
System.out.println("\t⓵ 게임은 총 2개 입니다\n\t\t☞ 1. 단기기억력 TEST영단어 게임\t☞ 2. 무한 영단어 깨기 ");
System.out.println("\t⓶ MENU 화면에서 프로그램 종료 시 [ 3 ] 입력해 주세요");
System.out.println("\t⓷ 게임 플레이 중 종료 희망시 [ Q ] 입력해 주세요 ");
System.out.println("════════════════════════════════════════════════════════════════════════════════════════════════════════════\n");
System.out.print(" Player ⌦ ⌦ ");
String userRetrun = in.nextLine();
return userRetrun;
}
}
package block;
import java.util.Scanner;
// 단기기억력 테스트 게임
public class MemoryTest {
String[] engArr = {"January", "February", "March", "April", "May", "June", "July", "August", "September",
"October", "November", "December"};
String[] userArr = new String[engArr.length]; // 사용자의 답안지
boolean[] X = new boolean[engArr.length]; // 정답인 것들 체크 ( true 일때 정답 )
int cnt = 0; // 정답카운트
int hint = 0; // 틀릴때마다 나오는 힌트문자의수
boolean chk = false; // 정답, 오답 체크
boolean flag = false; // 루프문 조건
long startTime = System.currentTimeMillis(); // game Init Time
long t1 = 0; // start
long t2 = 0; // end
String tmp = "";
String userIn = "";
Scanner in = new Scanner(System.in);
public MemoryTest() {
System.out.println();
Opening(); // 외워야할 단어 출력 , 엔터 대기상태
GamePlaying(); // 게임 진행
ElapsedTime(); // 전체 소요 시간 계산 및 출력
}
public void GamePlaying() {
while (cnt < 12 && flag == false) {
Display(); // 콘솔창에 출력
Input(); // 단어입력
Answer(); // 정답 판별
}
}
public void Opening() {
Init_Display();
System.out.println("\n");
System.out.println("\t\t⚐ 암기 테스트 준비가 되셨으면 Enter를 누르세요 . \n");
in.nextLine();
}
public void Init_Display() { // 초기 배열(단어)값 대입후 출력
ArrLoop(0);
ArrLoop(1);
}
public void Display() { // 현재 배열상태를 콘솔에 출력
ArrLoop(2);
}
public void Input() { // 사용자 단어입력
t1 = System.currentTimeMillis(); // 타이머측정시작 시점
System.out.print(" Player ⌦ ⌦ ");
// System.out.println("\n" + "단어를 입력하고 엔터를 누르세요. (" + (cnt + 1) + "/ 12)");
String strInput = in.nextLine();
userIn = strInput; // 입력받은 단어를 userIn에 저장
}
public void Answer() {
if (userIn.equals("q")) { // q일때 루프문 종료 ( 게임 종료 )
System.out.println("\t\t\t\t⚐ G A M E O V E R ⚐");
System.out.println("\t\t⚐ 암기 문제 정답 갯수 : " + cnt);
flag = true;
cnt = 12;
}
if (flag == false) { // 바깥 while문 조건 ( 게임 종료 상태가 아닐때 )
ArrLoop(3);
if (chk == false) { // 오답일때
ArrLoop(4);
hint++;
System.out.println("\t\t⚐ 오답이거나 이미 입력한 단어입니다 . 다시 입력 하세요\n");
} else {
t2 = System.currentTimeMillis(); // 시간측정 종료
System.out.println("\t\t⚐ 정답 " + userIn + " 소요시간 : " + ((t2 - t1) / 1000) + " 초\n");
chk = false; // reset
if (cnt == 12) { // 모두맞췄을때
System.out.println("\t\t⚐ G A M E C L E A R ⚐");
}
}
}
}
public void ArrLoop(int cond) { // 루프 제어
for (int i = 0; i < engArr.length; i++) {
if (cond == 0) { // 암기할 단어 출력
for (int j = 0; j < engArr[i].length(); j++) {
tmp += " ▨";
}
userArr[i] = tmp;
tmp = "";
} else if (cond == 1) {
System.out.print(String.format("✧ %-30s", engArr[i]));
if ((i + 1) % 4 == 0) { // 4의 배수마다 줄바꿈
System.out.println();
}
} else if (cond == 2) { // 현재 배열의 상태 출력
System.out.print(String.format("✧ %-30s", userArr[i]));
if ((i + 1) % 4 == 0) { // 4의 배수마다 줄바꿈
System.out.println();
}
} else if (cond == 3) { // 정답체크
if (userIn.equals(engArr[i])) {
if (X[i] == false) {
chk = true;
userArr[i] = userIn + " ✔";
X[i] = true; // 정답처리
cnt++; // 정답횟수
}
}
} else if (cond == 4) { // 오답일때 힌트주는 단락
if (X[i] == false) { // 정답을 맞추지않은 문제일때
for (int j = 0; j < engArr[i].length(); j++) {
if (j <= hint) { // hint변수 값에 따라서 힌트문자 대입
tmp += engArr[i].charAt(j);
} else {
tmp += " ▨";
}
}
userArr[i] = tmp;
tmp = "";
}
}
}
}
public void ElapsedTime() { // 소요시간 계산 및 출력
t2 = System.currentTimeMillis(); // 측정후 단위 밀리세컨드
System.out.println("\t\t⚐ 소요 시간 : " + ((t2 - startTime) / 1000 / 60) + " 분 " + (((t2 - startTime) / 1000) % 60) + " 초\n");
}
}
package block;
import java.util.Random;
import java.util.Scanner;
// 무한 단어깨기 게임
public class InfiniteGame {
// 전역변수
String[] engArr = {"January", "February", "March", "April", "May", "June", "July", "Aug", "September", "October", "November", "December"};
Scanner in = new Scanner(System.in);
Random r = new Random();
String[][] border = new String[4][5];
int cnt = 0;
long startTime = System.currentTimeMillis();
public InfiniteGame() {
CreateBorder();
while (true) {
printBoders();
cnt += play();
if (cnt > 0) System.out.println("\t⚐ 현재 스코어 : " + cnt);
else {
System.out.println("\t\t⚐ 사용자 요청으로 종료합니다 ");
System.out.println("════════════════════════════════════════════════════════════════════════════════════════════════════════════\n");
break;
}
long stopTime = System.currentTimeMillis();
System.out.println("\t⚐ 플레이 시간 : " + (stopTime - startTime) / 1000 + "초");
System.out.println("════════════════════════════════════════════════════════════════════════════════════════════════════════════\n");
}
}
// 사용자 입력후 일치되는 문자 확인후 반환 메서드
private int play() {
System.out.println("════════════════════════════════════════════════════════════════════════════════════════════════════════════\n");
System.out.print(" ☞ ☞ Player : ");
String userIn = in.nextLine().toLowerCase();
int cnt = 0;
if (userIn.equals("q")) cnt = -100;
else {
for (int i = 4 - 1; i >= 0; i--) {
for (int j = 0; j < 5; j++) {
if (border[i][j].toLowerCase().equals(userIn)) {
cnt++;
border[i][j] = "null";
}
}
}
}
for (int k = 0; k < 5; k++) {
for (int i = 3; i >= 1; i--) {
for (int j = 0; j < 5; j++) {
if (border[i][j].equals("null")) {
border[i][j] = border[i - 1][j];
border[i - 1][j] = "null";
}
}
}
}
return cnt;
}
// 보드판 출력 및 수정 메서드
public void printBoders() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
if (border[i][j].equals("null")) {
border[i][j] = engArr[r.nextInt(engArr.length - 1)];
String tmp = String.format("✧ %-20s", border[i][j]);
System.out.print(tmp);
} else {
String tmp = String.format("✧ %-20s", border[i][j]);
System.out.print(tmp);
}
}
System.out.println();
}
}
// Boder판 생성
public void CreateBorder() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
border[i][j] = engArr[r.nextInt(engArr.length - 1)];
}
}
}
}
반응형
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/10/24 😍 클래스 실습 과제 (1) | 2023.10.31 |
---|---|
2023/10/23✨ 클래스 (0) | 2023.10.31 |
2023/10/19💌 조별 미션 / 영단어 깨기 (1) | 2023.10.19 |
2023/10/18👋 클래스/메소드/생성자/변수 (1) | 2023.10.18 |
2023/10/17✅ 2차원배열 문제 (0) | 2023.10.18 |