import java.util.Scanner;
//UP & Down Game
//1~99까지 범위의 랜덤한 숫자를 맞추는 게임
//게임점수 -> 현재까지의 최고기록은 n회입니다.(가장 빨리 맞췄을때)
//플레이한적이 없을때 게임점수는-> 현재까지의 최고기록은 100회입니다 혹은 플레이한적 없습니다 출력
//컴퓨터enemy가 참여하여 함께 게임경쟁
//player와 enemy가 각자의 정보를 이용하여 경쟁
public class Quiz_01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int com; //컴퓨터의 패
int player; //플레이어의 패
int enemy; //경쟁자 Enemy의 패
//int score=100; //게임최고기록
//int player_score=0; //플레이어의 맞출때까지의 cnt기록
//int enemy_score=0; //enemy의 맞출때까지의 cnt기록
int player_win=0; //플레이어 승리기록
int enemy_win=0; //Enemy승리기록
int cnt=0; //현재게임기록
int menu; //메뉴선택
int min=1; //enemy의 난수 최소값
int max=99; //enemy의 난수 최대값
//Up&Down Game 시작
while(true) {
//메뉴 입력 시작
while(true) {
System.out.println("=== Up & Down Game ===");
System.out.println();
System.out.println("1. Game Start");
System.out.println("2. Game Score");
System.out.println("3. End Game");
System.out.println();
System.out.print("> ");
try { //메뉴입력
menu= Integer.parseInt(sc.nextLine());
if(!(menu==1 || menu==2 ||menu==3)){
System.out.println("메뉴를 다시 입력해주세요");
continue;
}
break;
}catch(Exception e) { //메뉴입력 예외처리
System.out.println("숫자를 입력해주세요.");
continue;
}
}
//메뉴 입력 끝
//게임기능
while(true) {
if(menu==1) {//1.Game Start
cnt=0; //현재게임기록 초기화
System.out.println("<< Game Start >>");
com = (int)(Math.random()*(99-1+1)+1); //현재게임의 맞춰야 할 수 생성(com의 난수 생성)
while(true) {
System.out.print("Input Number : "); //플레이어의 예측숫자 입력
try {
player=Integer.parseInt(sc.nextLine());
if(player>=100 || player<=0) { //1~99 외 숫자 입력 받았을 경우 재입력
System.out.println("입력범위를 초과하였습니다.");
continue;
}
//player_score+=1;
cnt+=1; //현재게임기록 횟수 추가
if(player==com) { //숫자를 맞췄을 경우
System.out.println("<< 플레이어 정 답 >>");
player_win+=1;
break;
}else if(player>com) { //플레이어가 입력한 숫자가 맞출 숫자보다 높을 경우
System.out.println("<< D O W N >>");
if(max>player) {
max=player-1;
}
}else { //플레이어가 입력한 숫자가 맞출 숫자보다 낮은 경우
System.out.println("<< U P >>");
if(min<player) {
min=player+1;
}
}
}catch(Exception e) { //플레이어가 숫자 외의 입력을 넣었을 경우
System.out.println("숫자를 입력해주세요.");
continue;
}
enemy=(int)(Math.random()*(max-min+1)+min); //enemy의 난수 생성
System.out.println("enemy 선택한 수 " + enemy); //enemy의 난수 출력
//enemy_score+=1;
if(enemy==com) { //숫자를 맞췄을 경우
System.out.println("<< Enemy 정 답 >>");
enemy_win+=1;
break;
}else if(enemy>com) { //enemy의 숫자가 맞출 숫자보다 높을 경우
max=enemy-1;
System.out.println("<< D O W N >>");
}else { //enemy의 숫자가 맞출 숫자보다 낮은 경우
min=enemy+1;
System.out.println("<< U P >>");
}
}
break;
}else if(menu==2) {//2.Game Score
/*
if(score>cnt) //게임최고기록보다 현재기록이 횟수가 더 낮으면
{
score=cnt; //현재기록을 게임최고기록으로 갱신(대입)
}
System.out.println("<< Game Score >>");
System.out.println("현재까지의 최고 기록은" + score + "회입니다"); //게임최고기록 출력
*/
System.out.println("플레이어 : " +player_win +"승" + enemy_win + "패");
System.out.println("Enemy : " +enemy_win + "승" + player_win+"패");
System.out.println();
break;
}else if(menu==3){ //3.End Game
System.out.println("프로그램을 종료합니다");
System.exit(0);
}
}
} //Up&Down Game 종료
}
}
/*
<필요변수>
1.Enemy의 난수
2.Enemy의 난수 생성을 위한 최소값
3.Enemy의 난수 생성을 위한 최대값
4.플레이어 승리
5.Enemy의 승리
(Level2)
1. 사람이 숫자를 선택한다.
2. 사람이 선택한 숫자를 맞출 숫자와 비교한다.
(사람이 맞췄을경우)-> 사람의 승리를 카운트한다. 게임이 종료된다,
(못맞췄을경우)->
3.Enemy가 숫자를 선택한다.(=난수를 생성한다.)
4.Enemy의 숫자를 맞출 숫자와 비교한다.
5.Enemy 자신이 만든 숫자의 Up&Down에 따라서 최소값,최대값을 수정한다
(Enemy가 맞췄을 경우)->Enemy의 승리를 카운트한다.게임이 종료된다.
(Level3)
유저가 up&down과 무관한 엉뚱한 숫자를 넣었을 경우에
min값과 max값을 fix하는 방법....
50에서 up이 나왔는데
40을 썼을 경우...
50>40
max>player
break;
50에서 down이 나왔는데
60을 썼을 경우...
50<60
min<player
break;
*/
Comment