교재: 명품 JAVA ESSENTIAL
페이지 121~ 연습문제
<Open Challenge 숨은 번호 맞추기 게임>
1~99 사이 랜덤한 숫자를 맞추는 게임입니다.
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
일단 임포트 할 것들 모두 선언해줍니다.
예외처리타입 InputMismatchException은 스캐너로 nextInt()를 받았을 때
문자를 입력하는 등 잘못된 입력값을 받을 경우를 처리해주기 위해 사용됩니다.
(문제에서는 예외처리 하라는 말 없었지만 배웠으면 써먹어야죠.)
랜덤은 랜덤함수를 사용하기 위해 임포트 해줍니다.
스캐너도 임포트 해주고요.
static void startgame() {
Random r = new Random();
int k = r.nextInt(100);
int input;
int count = 1;
while (true) {
System.out.print(count + ">>");
try {
input = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다. 다시 입력하세요.");
continue;
}
if (input == k) {
System.out.println("맞았습니다.");
break;
} else if (input > k) {
System.out.println("더 낮게");
} else
System.out.println("더 높게");
count++;
}
}
startgame 함수는 게임을 진행하는 함수입니다.
먼저 랜덤한 숫자 k를 결정합니다. 랜덤 객체의 메소드 nextInt 괄호 안에 원하는 범위를 넣어줍니다.
만약 nextInt(100)이라고 하면 0~99까지의 수를 랜덤하게 결정할 수 있습니다. (1~100까지로 하고싶으면 저기다 1을 더하면 될 듯 합니다.)
그리고 input으로 사용자에게 입력을 받습니다.
만약 input이 k보다 작다면 "더 높게"가 출력되고, k보다 크다면 "더 낮게"가 출력됩니다.
input과 k가 같아질 때 함수는 종료됩니다.
여기서 count는 그냥 몇 번째 입력인지 알려주는 애입니다.
public static void main(String[] args) {
while (true) {
System.out.println("Up & Down게임입니다. 숨겨진 수를 맞추어 보세요.");
startgame();
System.out.println("다시하시겠습니까?(y/n)");
if (scanner.next().equals("n"))
break;
}
}
메인은 최대한 간결하게 만들어줬습니다.
다시 시작 유무만 결정해주고 나머지는 startgame함수에게 일을 맡깁니다.
전체코드입니다.
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
public class updown {
static Scanner scanner = new Scanner(System.in);
static void startgame() {
Random r = new Random();
int k = r.nextInt(100);
int input;
int count = 1;
while (true) {
System.out.print(count + ">>");
try {
input = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다. 다시 입력하세요.");
continue;
}
if (input == k) {
System.out.println("맞았습니다.");
return;
} else if (input > k) {
System.out.println("더 낮게");
} else
System.out.println("더 높게");
count++;
}
}
public static void main(String[] args) {
while (true) {
System.out.println("Up & Down게임입니다. 숨겨진 수를 맞추어 보세요.");
startgame();
System.out.println("다시하시겠습니까?(y/n)");
if (scanner.next().equals("n"))
break;
}
}
}
랜덤함수가 뭔지 배웠으니 많이 써먹어봐야겠습니다.
갑자기 떠올라서 컴퓨터랑 가위바위보하는 게임을 만들어봤습니다.
<컴퓨터랑 가위바위보>
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
똑같이 임포트 해줍니다.
static void printresult(int num, String who) {
System.out.print(who + ": ");
switch(num) {
case 1:
System.out.println("가위");
break;
case 2:
System.out.println("바위");
break;
case 3:
System.out.println("보");
break;
}
}
저는 가위를 1, 바위를 2, 보를 3으로 설정해둬서 누가 뭘 냈는지 출력하기 위한 함수를 만들어줬습니다.
main은 간결해야하니까요.
static void match(int k, int input) {
if (input == k) {
System.out.println("비겼습니다.");
}
else if ( (input != 1 && k<input) || input == 1 && k == 3) {
System.out.println("이겼습니다.");
}
else
System.out.println("졌습니다.");
}
input기준으로 이겼는지 비겼는지 졌는지 알려주는 함수입니다.
public static void main(String[] args) {
Random r = new Random();
int k = r.nextInt(3) + 1;
int input;
String restart;
while (true) {
System.out.println("==================================");
System.out.print(">> 가위(1), 바위(2), 보(3) 입력: ");
try {
input = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("잘못된 입력입니다. 다시 입력하세요");
continue;
}
if (input >3 || input <1) {
System.out.println("잘못된 입력입니다.다시 입력하세요.");
continue;
}
printresult(k, "컴퓨터");
printresult(input, "너");
match(k, input);
System.out.print("다시 시작하시겠습니까?(y/n): ");
restart = scanner.next();
if (restart.equals("n"))
break;
}
}
main은 입력을 받아 잘못된 입력일 경우 처리해주고, 다시시작 유무를 물어보는 역할을 합니다.
뚝딱 만들어보니 재밌네요. 문제 더 풀어야겠습니다.
'프로그래밍 언어 > javastudy' 카테고리의 다른 글
명품 Java Essential 4단원 끝말잇기 게임/ scanner에서 NoSuchElementException 예외발생 대처 (0) | 2021.07.10 |
---|---|
명품 Java Essential 3단원 실습문제 (3) | 2021.07.07 |
자바 공부 #4 369게임, 커피 주문, 사칙 연산 (4) | 2021.07.05 |
자바 공부 #3 카페 주문하기 (0) | 2021.07.04 |
자바 공부 #2 지폐, 동전 개수 출력 프로그램(코드가 더러울 땐 구글링) (0) | 2021.07.04 |