Skip to content
Open
11 changes: 10 additions & 1 deletion src/main/java/leets/land/UpdownApplication.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
package leets.land;

import leets.land.controller.GameController;
import leets.land.model.GameAlphabetModel;
import leets.land.model.GameNumericModel;
import leets.land.view.GameView;

public class UpdownApplication {

public static void main(String[] args) {
System.out.print("hihi :D");
GameView view = new GameView();
GameNumericModel numericModel = new GameNumericModel();
GameAlphabetModel alphabetModel = new GameAlphabetModel();
GameController controller = new GameController(view, numericModel, alphabetModel);
controller.play();
}
}
67 changes: 67 additions & 0 deletions src/main/java/leets/land/controller/GameController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package leets.land.controller;

import leets.land.model.GameAlphabetModel;
import leets.land.model.GameNumericModel;
import leets.land.view.GameView;

public class GameController {

private final GameView view;
private final GameNumericModel numericModel;
private final GameAlphabetModel alphabetModel;

public GameController(GameView view, GameNumericModel numericModel,
GameAlphabetModel alphabetModel) {
this.view = view;
this.numericModel = numericModel;
this.alphabetModel = alphabetModel;
}

public void play() {
int version = view.getVersionInput();

if (version == 1) {
numericPlay();
} else if (version == 2) {
alphabetPlay();
} else {
System.out.println("[ERROR] ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.");
play();
}
}

public void numericPlay() {

int input = view.getNumericInput();
while (true) {

if (numericModel.up(input)) {
input = numericModel.changeLimitForUp(input);
} else if (numericModel.down(input)) {
input = numericModel.changeLimitForDown(input);
} else if (numericModel.isCorrect(input)) {
System.out.println("์ •๋‹ต !");
break;
}
}

System.out.println("์‹œ๋„ํ•œ ํšŸ์ˆ˜ : " + (GameNumericModel.getCount() + 1));
}

public void alphabetPlay() {
int input = view.getAlphabetInput();
while (true) {

if (alphabetModel.up(input)) {
input = alphabetModel.changeLimitForUp(input);
} else if (alphabetModel.down(input)) {
input = alphabetModel.changeLimitForDown(input);
} else if (alphabetModel.isCorrect(input)) {
System.out.println("์ •๋‹ต !");
break;
}
}

System.out.println("์‹œ๋„ํ•œ ํšŸ์ˆ˜ : " + (GameAlphabetModel.getCount() + 1));
}
}
70 changes: 70 additions & 0 deletions src/main/java/leets/land/model/GameAlphabetModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package leets.land.model;

import java.util.Random;
import java.util.Scanner;

public class GameAlphabetModel {

private final char answer;
private static int count;
private char min = 'A';
private char max = 'z';

public GameAlphabetModel() {
Random random = new Random();
this.answer = (char) (random.nextInt(26) + (random.nextBoolean() ? 'A' : 'a'));
}

public boolean up(int input) {
return input < answer;
}

public char changeLimitForUp(int input) {
System.out.println("UP");
count++;

min = (char) (input + 1);

return isValidAlphabetRange();
}

public boolean down(int input) {
return input > answer;
}

public char changeLimitForDown(int input) {
System.out.println("DOWN");
count++;

if (input == 'a') {
max = 'Z';
} else {
max = (char) (input - 1);
}

return isValidAlphabetRange();
}

public boolean isCorrect(int input) {
return input == answer;
}

public static int getCount() {
return count;
}

private char isValidAlphabetRange() {
Scanner sc = new Scanner(System.in);

while (true) {
System.out.print("์˜์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”(" + min + " ~ " + max + ") : ");
char newInput = sc.next().charAt(0);

if (newInput < min || newInput > max) {
System.out.println("[ERROR] ๋ฒ”์œ„ ๋‚ด์˜ ์•ŒํŒŒ๋ฒณ์„ ์ž…๋ ฅํ•˜์„ธ์š”.");
} else {
return newInput;
}
}
}
}
60 changes: 60 additions & 0 deletions src/main/java/leets/land/model/GameNumericModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package leets.land.model;

import java.util.Scanner;

public class GameNumericModel {

private final int answer = (int) (Math.random() * 100) + 1;
private static int count;
private int min = 1;
private int max = 100;

public boolean up(int input) {
return input < answer;
}

public int changeLimitForUp(int input) {
System.out.println("UP");
count++;

min = input + 1;

return isValidNumericRange();
}

public boolean down(int input) {
return input > answer;
}

public int changeLimitForDown(int input) {
System.out.println("DOWN");
count++;

max = input - 1;

return isValidNumericRange();
}

public boolean isCorrect(int input) {
return input == answer;
}

public static int getCount() {
return count;
}

private int isValidNumericRange() {
Scanner sc = new Scanner(System.in);

while (true) {
System.out.print("์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”(" + min + " ~ " + max + ") : ");
int newInput = sc.nextInt();

if (newInput < min || newInput > max) {
System.out.println("[ERROR] ๋ฒ”์œ„ ๋‚ด์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.");
} else {
return newInput;
}
}
}
}
24 changes: 24 additions & 0 deletions src/main/java/leets/land/view/GameView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package leets.land.view;

import java.util.Scanner;

public class GameView {

public int getVersionInput() {
Scanner sc = new Scanner(System.in);
System.out.print("๋ฒ„์ „์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” (์ˆซ์ž ๋ฒ„์ „: 1, ์˜์–ด ๋ฒ„์ „: 2) : ");
return sc.nextInt();
}

public int getNumericInput() {
Scanner sc = new Scanner(System.in);
System.out.print("์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”(1 ~ 100) : ");
return sc.nextInt();
}

public char getAlphabetInput() {
Scanner sc = new Scanner(System.in);
System.out.print("์˜์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”(A ~ z) : ");
return sc.next().charAt(0);
}
}