2022-01-06 [java] 간단한 게임

GGAE99·2022년 1월 6일
0

진도

목록 보기
2/43

오늘은 랜덤함수를 이용한 간단한 게임을 3개 만들었다.

Up & Dowm

BR31

Dice Game

이 세가지 게임을 만들었다.

오늘은 첫 포스팅에다 시간이 없는 관계로 공부한 코드만 올릴건데...
내일부터는 공부하고 복습하면서 내용정리도 하고싶다..
게임 내용이라도 간단하게 적어야지

Up & Down
랜덤함수를 이용해 1~100까지의 임의의 숫자를 변수에 지정해놓고 입력한 숫자보다 지정된 숫자가 크면 Up을 반대의 경우에는 Down을 출력한다. 지정된 숫자의 범위를 좁혀가며 맞추는 게임이다.

public void que1() {
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		int time = 0;
		while (true) {

			System.out.println("====== Up & Down Game ======");
			System.out.println("1. Game Start");
			System.out.println("2. Game Score");
			System.out.println("3. End Game");
			System.out.print("> ");
			int select = sc.nextInt();
			int newTime;
			switch (select) {
			case 1:
				newTime = 0;
				int comnum = r.nextInt(99) + 1;
				while (true) {
					int pernum;
					System.out.print((newTime + 1) + "회차 번호 입력 : ");
					while (true) {
						pernum = sc.nextInt();
						if (pernum > 100 || pernum < 0) {
							System.out.println("입력값을 확인하세요");
							continue;
						} else {
							break;
						}
					} // while done
					if (pernum < 1 || pernum > 99) {
						System.out.println("입력값을 확인하세요");
						continue;
					} else if (comnum > pernum) {
						System.out.println("<<Up>>");
						newTime++;
						continue;
					} else if (comnum < pernum) {
						System.out.println("<<Down>>");
						newTime++;
						continue;
					} else if (comnum == pernum) {
						System.out.println("<<정답>>");
						newTime++;
					}
					if (newTime < time) {
						time = newTime;
					}
					break;
				}
				break;
			// case 1 done
			case 2:
				if (time == 10000000) {
					System.out.println("아직 최고 기록이 없습니다.");
				} else {
					System.out.println("현재 최고 기록은 " + time + "회 입니다.");
					break;
				}
				// case 2 done
			case 3:
				break;
			// case 3 done
			default:
				System.out.println("잘못입력하셨습니다.");
			}// switch done
			if (select == 3) {
				System.out.println("게임을 종료합니다.");
				break;
			}
		} // while dine
	}// que1 done

BR31
컴퓨터와 1대1로 베스킨라빈스31게임을 하는 프로그램이다. 한번에 최대 3개의 숫자를 말할 수 있고, 31을 외치는쪽이 진다.
근데 이 게임 사실 1대1로하면 선공이 무조건 이긴다. 처음에 1,2 말하고 상대가 다음에 몇개를 말하든 상대가 말한 횟수와 내가 다음에 말할 횟수의 합이 4가되면 무조건 상대턴에 31이 나온다. X망겜.

public void que2() {
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		int win = 0;
		int lose = 0;
		while (true) {
			System.out.println("====== Baskin Robbins31 Game ======");
			System.out.println("1. Game Start");
			System.out.println("2. Game Score");
			System.out.println("3. End Game");
			System.out.print("선택 > ");
			int select = sc.nextInt();
			int usernum = 0;
			int comnum = 0;
			int sum = usernum + comnum;
			int newsum = 0;
			switch (select) {
			case 1:
				System.out.println("<< Game Start >>");
				while (true) {
					while (newsum <= 31) {
						System.out.println("<< Your Turn >>");

						while (true) {
							System.out.print("Input Number : ");
							usernum = sc.nextInt();
							if (usernum > 3 || usernum < 1) {
								System.out.println("1~3사이값을 입력해주세요");
								continue;
							} else {
								break;
							}
						} // while done
						comnum = r.nextInt(3) + 1;
						sum = usernum + comnum;
						newsum = newsum + sum;
						for (int i = newsum - usernum - comnum + 1; i <= newsum - comnum; i++) {
							System.out.println(i + "!");
							if (i == 31) {
								System.out.println("패배!");
								lose++;
								break;
							}
						}
						if (newsum - comnum < 31) {
							System.out.println("<< Computer Turn >>");
							for (int j = newsum - comnum + 1; j <= newsum; j++) {
								System.out.println(j + "!");

								if (j == 31) {
									System.out.println("승리!");
									win++;
									break;
								}
							}
						} else if (newsum - comnum > 31) {
							break;
						}
						System.out.println(sum);
						System.out.println(newsum);
						break;
					}
					if (newsum < 31) {
						continue;
					} else {
						break;
					}
					// while done
				}
				break;// case 1 done
			case 2:
				System.out.println("<< 당신의 전적 >>");
				System.out.println("Win : " + win);
				System.out.println("Lose : " + lose);
				break;// case 2 done
			case 3:
				break;// case 3 done
			default:
				System.out.println("잘못입력하셨습니다.");
			}// switch done
			if (select == 3) {
				System.out.println("게임을 종료합니다.");
				break;
			} // if done
		} // while done
	}// que2 done

Dice Game
3개의 주사위를 굴려서 합이 더 높은 사람이 이기는 게임이다. 게임머니를 배팅할 수 있다. 돈이 없으면 쫓겨나는 코드도 넣어놨다.
위의 게임 2개를 만들면서 엄청 헷갈려서 이 코드부터는 주석을 넣기 시작했다. 주석 진짜 중요하다..

public void que3() {
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		int money = 10000; // 소지금
		int win = 0; // 이긴 횟수
		int lose = 0; // 진 횟수
		int draw = 0; // 비긴 횟수
		boolean gameEnd = false;

		while (true) {
			System.out.println("====== Dice Game ======");
			System.out.println("1. Game Start");
			System.out.println("2. Game Score");
			System.out.println("3. End Game");
			System.out.print("선택 > ");
			int select = sc.nextInt(); // 게임 메뉴 선택
			int userdice1, userdice2, userdice3; // 플레이어의 주사위 값 3개
			int comdice1, comdice2, comdice3; // 컴퓨터의 주사위 값 3개
			char choice1; // 배팅 선택
			char choice2; // 재도전 여부

			switch (select) { // swtich start
			case 1:
				if (money <= 0) { // 게임을 하려했지만 돈이 없는 경우
					System.out.println("잔액이 없습니다. bye~");
					break;
				}
				while (true) {
					System.out.println("<< Game Start >>");
					userdice1 = r.nextInt(6) + 1;
					userdice2 = r.nextInt(6) + 1;
					userdice3 = r.nextInt(6) + 1; // 플레이어 주사위 값 변수에 랜덤 값 부여
					comdice1 = r.nextInt(6) + 1;
					comdice2 = r.nextInt(6) + 1;
					comdice3 = r.nextInt(6) + 1; // 컴퓨터 주사위 값 변수에 랜덤 값 부여
					System.out.println("1번째 주사위 값 : " + userdice1);
					System.out.println("2번째 주사위 값 : " + userdice2);
					System.out.println("3번째 주사위 값 : " + userdice3);
					int usersum = userdice1 + userdice2 + userdice3; // 내 주사위 총 합 변수
					System.out.println("내 주사위 총 합 :" + usersum);
					System.out.println("배팅 하시겠습니까?[y/n]"); // 배팅 여부 선택
					int bat;
					choice1 = sc.next().charAt(0);
					if (choice1 == 'y') { // 배팅을 한다고 했을 경우
						System.out.print("얼마를 배팅하시겠습니까(현재 내 소지금 " + money + "원) :");
						while (true) {
							bat = sc.nextInt();
							if (money < bat) { // 배팅하려는 금액이 소유한 돈보다 큰 경우
								System.out.println("금액이 부족합니다. 다시 입력해주세요.");
								continue;
							}
							break;
						}
						System.out.println("컴퓨터 1번째 주사위 값 : " + comdice1);
						System.out.println("컴퓨터 2번째 주사위 값 : " + comdice2);
						System.out.println("컴퓨터 3번째 주사위 값 : " + comdice3);
						int comsum = comdice1 + comdice2 + comdice3;// 컴퓨터 주사위 총 합 변수
						System.out.println("컴퓨터 주사위 총 합 : " + comsum);
						System.out.println("<< 결과 >>");
						if (usersum > comsum) { // 승리시 결과
							System.out.println("승리!");
							System.out.println("+" + bat + "원!"); // 얻은 금액 표시
							money += bat; // 총액에 배팅금액을 추가
							win++;
						} else if (usersum < comsum) {// 패배시 결과
							System.out.println("패배!");
							System.out.println("-" + bat + "원!"); // 잃은 금액 표시
							money -= bat;
							lose++;
							if (money <= 0) { // 돈이 0원 밑으로 떨어졌을 경우;
								System.out.println("거지는 안받아요~");
								break;
							}
						} else { // 비겼을시 결과
							System.out.println("아니 자꾸 안비겨서 어떻게 쓸지는 모르겠는데 대충 비겼다고 뜨겠죠??");
							draw++;
						}
						System.out.println("한번 더 하시겠습니까[y/n]"); // 재도전 묻기
						choice2 = sc.next().charAt(0);
						if (choice2 == 'y') { // 재도전에 동의했을 경우
							continue;
						} else if (choice2 == 'n') { // 재도전에 동의하지 않았을 경우
							break;
						} else { // 'y', 'n' 이외의 다른 char를 입력했을 경우
							break;
						}
					} else if (choice1 == 'n') { // 배팅을 안한다고 했을 경우
						break;
					} else if (choice1 != 'y' || choice1 != 'n') { // 배팅 여부에 이상한 char값을 넣은 경우
						continue;
					}
					break;
				} // while done
				break;// case 1 done
			case 2:
				System.out.println("<< 당신의 전적 >>");
				System.out.println("Win : " + win);
				System.out.println("Lose : " + lose);
				System.out.println("내 소지금 : " + money + "원");
				break;// case 2 done
			case 3:
				gameEnd = true;
				break;// case 3 done
			default:
				System.out.println("잘못입력하셨습니다.");
				break;// default done
			}// switch done
			if (gameEnd == true) {
				System.out.println("게임을 종료합니다.");
				break;
			}

		}
	}

오늘은 이렇게 포스팅을 마치지만 다음부터는 더 좋은 퀄리티의 포스팅을 하려구 마음먹구 있..습니다..
열심히 해야지!

0개의 댓글