자바로 가위바위보게임을 구현해 보았다.
가위바위보 게임은 검색해보면 많은 소스들이 있었고 어렵지 않게 만들 수 있지만, 자바스크립트와 달리 데이터 타입의 규제가 엄격했기 때문에 예외처리 하는데 있어 막힌 부분이 많았다.
아직은 try~catch문은 안배웠기 때문에 if~else if 로만 예외처리를 했다.
TEST CASE1 :숫자 대신 한글을 입력했을 경우.
while (!input.hasNextInt()) { //값이 숫자인지 판별,입력값이 숫자가 아니라면 while문 실행
input.next();//값이 숫자가 아니면 버린다.
System.out.println("숫자를 입력해주세요.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
}
coin = input.next();//숫자라면, 게임횟수 값 저장
입력 값을 int 변수로 받으면 만약 유저가 숫자 대신 문자를 입력했을 때 예외처리가 되지 않고 프로그램이 튕겨버린다.
때문에 String으로 변수를 받고 hasNextInt()를 사용하여 값이 숫지인지 판별했다.
만약 숫자라면 while문을 빠져나와 coin변수값에 저장된다.
TEST CASE2: 게임 최대,최소 횟수 지정
int coinInt = Integer.valueOf(coin);//int로 형변환
//예외인 경우 게임실행 x
if(coinInt > 10) {//최대10
System.out.println("10회 이상 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}else if(coinInt == 0) {//코인을 넣지않았을 경우
System.out.println("0은 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}else if(coinInt <0){//음수값일 경우
System.out.println("음수는 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}
//이상없으면 게임 정상적으로 실행
가위바위보게임은 한번에 10회까지로 규정했을 경우 10회 이상의 숫자를 누른다면? 0을 눌른다면? 음수값을 넣을수는 없지만 만일 음수값이라면?을 가정해서 if~else if 문으로 예외처리를 했다. 지금 생각해보니 단순히 게임을 종료시키는게 아니라 location을 사용하여 재시작기능을 넣는 것도 좋을 것 같다.
TEST CASE3: 가위 바위 보 입력
System.out.println("===============GAME START================");
System.out.println("어떤걸 내시겠습니까? 가위[1] 바위[2] 보[3]");
for(int i=0;i<coinInt;i++) {
String npc="", user=""; //컴퓨터와 사용자의 가위,바위,보 선택 변수
int computer = (int) Math.ceil(Math.random()*3);//컴퓨터 값
while (!input.hasNextInt()) { //값이 숫자인지 판별,입력값이 숫자가 아니라면 while문 실행
input.next();//값이 숫자가 아니면 버린다.
System.out.println("숫자를 입력해주세요.");
System.out.println("=========================================");
}
String userInput = input.next();//사용자의 입력값
int userInputInt=Integer.parseInt(userInput);
//유저의 가위바위보
switch(userInputInt) {
case 1:
user = "가위";
break;
case 2:
user = "바위";
break;
case 3:
user = "보";
break;
default:
user="손가락 오류";
}
//컴퓨터의 가위바위보
switch(computer) {
case 1:
npc = "가위";
break;
case 2:
npc = "바위";
break;
case 3:
npc = "보";
break;
default:
npc="시스템 오류";
}
마찬가지고 가위바위보를 선택하는 와중에 문자를 입력했을 경우 같은 예외처리를 하였고 숫자임에도 불구하고 1,2,3 값을 벗어난다면 '가위','바위','보'에 해당하는 값을 가지지 않기 때문에 switch문을 사용하여 예외인 경우 default 값으로 처리했다.( "손가락 오류"는 학원 예제에서 그렇게 했기 때문에...😅)
TEST CASE4: 가위 바위 보 승패
//가위바위보 승패 설정
if(userInputInt >= 1 && userInputInt <= 3) {//유저의 가위바위보 입력값이 1~3일 때만
//가위=1,바위=2,보=3
if((computer == 1 && userInputInt == 2) || (computer == 2 && userInputInt == 3) || (computer == 3 && userInputInt ==1)) {//유저가 이긴경우
win++;
System.out.println("[승리]");
}else if(computer == userInputInt) {//무승부인경우
draw++;
System.out.println("[무승부]");
}else {
lose++;
System.out.println("[패배]");
}
}else {//오류상황
fail++;
System.out.println("값을 잘못 입력 하였습니다.");
}
<전체소스코드>
import java.util.Scanner;
import java.util.Random;
//가위바위보게임만들기
public class JavaExam {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int win=0,lose=0,draw=0,fail=0; //게임결과값 변수
String coin;//게임횟수 변수
System.out.print("코인을 집어 넣으세요.(최대 10):");
while (!input.hasNextInt()) { //값이 숫자인지 판별,입력값이 숫자가 아니라면 while문 실행
input.next();//값이 숫자가 아니면 버린다.
System.out.println("숫자를 입력해주세요.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
}
coin = input.next();//숫자라면, 게임횟수 값 저장
int coinInt = Integer.valueOf(coin);//int로 형변환
//예외인 경우 게임실행 x
if(coinInt > 10) {//최대10
System.out.println("10회 이상 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}else if(coinInt == 0) {//코인을 넣지않았을 경우
System.out.println("0은 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}else if(coinInt <0){//음수값일 경우
System.out.println("음수는 사용할 수 없습니다.");
System.out.println("다시 실행해 주세요.");
System.out.println("================GAME END=================");
return;
}
//이상없으면 게임 정상적으로 실행
//GAME START
System.out.println("===============GAME START================");
System.out.println("어떤걸 내시겠습니까? 가위[1] 바위[2] 보[3]");
for(int i=0;i<coinInt;i++) {
String npc="", user=""; //컴퓨터와 사용자의 가위,바위,보 선택 변수
int computer = (int) Math.ceil(Math.random()*3);//컴퓨터 값
while (!input.hasNextInt()) { //값이 숫자인지 판별,입력값이 숫자가 아니라면 while문 실행
input.next();//값이 숫자가 아니면 버린다.
System.out.println("숫자를 입력해주세요.");
System.out.println("=========================================");
}
String userInput = input.next();//사용자의 입력값
int userInputInt=Integer.parseInt(userInput);
//유저의 가위바위보
switch(userInputInt) {
case 1:
user = "가위";
break;
case 2:
user = "바위";
break;
case 3:
user = "보";
break;
default:
user="손가락 오류";
}
//컴퓨터의 가위바위보
switch(computer) {
case 1:
npc = "가위";
break;
case 2:
npc = "바위";
break;
case 3:
npc = "보";
break;
default:
npc="시스템 오류";
}
System.out.println("[유저] "+user+" =VS= "+npc+" [컴퓨터]");
//가위바위보 승패 설정
if(userInputInt >= 1 && userInputInt <= 3) {//유저의 가위바위보 입력값이 1~3일 때만
//가위=1,바위=2,보=3
if((computer == 1 && userInputInt == 2) || (computer == 2 && userInputInt == 3) || (computer == 3 && userInputInt ==1)) {//유저가 이긴경우
win++;
System.out.println("[승리]");
}else if(computer == userInputInt) {//무승부인경우
draw++;
System.out.println("[무승부]");
}else {
lose++;
System.out.println("[패배]");
}
}else {//오류상황
fail++;
System.out.println("값을 잘못 입력 하였습니다.");
}
System.out.println("=========================================");
}
float wins = ((float)win/(float)(coinInt))*100; // 승률변수 =(이긴횟수/총 경기)x100
System.out.println("[결과] 게임 횟수 : " +coin);
System.out.println("[전적] win:"+win+"번, lose:"+lose+"번, draw:"+draw+"번, 무효:"+fail+"번");
System.out.printf("[승률] %.2f%% \n",wins);
System.out.println("================GAME END=================");
input.close();
}
}
<결과화면>
'Language > JAVA' 카테고리의 다른 글
advenced for문 (0) | 2020.05.12 |
---|---|
[JAVA]다차원 배열-학사관리시스템 실습(1) (0) | 2020.05.11 |
[JAVA]수열 합계 알고리즘(do~while문 + if문)3:플러그변수 (0) | 2020.05.06 |
[JAVA]수열합계 구하기 알고리즘(do~while문)2 (0) | 2020.05.06 |
[JAVA]수열합계 구하기 알고리즘(do~while문) (0) | 2020.05.06 |
댓글