14-java - 반복문을 이용하여 rpg 게임 만들기

jin·2022년 5월 11일
0

반복문 최종프로젝트

시간제한없이 자유롭게 하면된다. [던전탐험게임] 플레이어는 무기 방어구 체력 돈 운 등의 데이터가 있다. (새로운
변수 추가 가능) 플레이어와 적은 1명으로 하고 2명이상은 추후 배열에서 가능하다.

1) 메인메뉴 ==> [1.여관][2.대장간] [3.던전][0.종료]

2) [1.여관] 은 소지금을 소모해 체력과 스킬회복 또는 아이템구입을 한다.
==> [1.숙박(체력,스킬회복)][2.물약구입][0.뒤로가기]
3) [2.대장간] 은 소지금을 소모해 랜덤으로 무기와 방어구 업그레이드
시켜준다.
==> [1.무기업][2.방어구업][0.뒤로가기]
4) [3.던전] 은 몬스터를 만나 전투를한다.
==> [1.공격][2.스킬][3.물약먹기]
스킬은 2번 공격을 한다. 물약을 먹으면 체력이 회복한다. 승리하면 돈을 획득한다.
[0.뒤로가기]

Scanner sc = new Scanner(System.in);
Random rnd = new Random();

int maxHp = 0; // 최대 체력
int nowHp = 0; // 현재 체력
int attack = 0; // 무기(가정)공격력
int depensive = 0; // 방어
int nowMedicine = 0; // 현재 물약갯수
int recovery = 30; // 물약 회복
int totalPrice = 0; // 계산가격
int maxSkill = 0; // 최대 스킬갯수
int nowSkill = 0; // 현재스킬갯수
int luck = 2; // 운 - 던전에서 사용
int money = 0; // 소지금
boolean combo = false; // 스킬연속 사용 판별 --> 공격시 사용 가능

int monsterMaxHp = 100; // 몬스터 최대 체력
int monsterNowHp = monsterMaxHp; // 몬스터 현재 체력
int monsterAttack = 10; // 몬스터 공격력
int monsterMoney = 0; // 몬스터 소지금, 던전 내에서 10~100 랜덤하게

System.out.println("난이도 선택 \n[1]쉬움 [2]보통 ");
int difficulty = sc.nextInt();
if (difficulty == 1) { // 쉬움
	maxHp = 1000;
	nowHp = maxHp;
	attack = 100;
	depensive = 50;
	nowMedicine = 10;
	maxSkill = 100;
	nowSkill = maxSkill;
	money = 10000;
	System.out.println("난이도 : 쉬움");
} else if (difficulty == 2) { // 보통
	maxHp = 100;
	nowHp = maxHp;
	attack = 10;
	depensive = 5;
	nowMedicine = 3;
	maxSkill = 2;
	nowSkill = maxSkill;
	money = 500;
	System.out.println("난이도 : 보통");
}
int select1 = 0;
int select2 = 0;
int ea = 0; // 갯수
int forgeSelect = 0; // 대장간 선택
int battle = 0; // 전투 선택
int rNum = 0; // 확률반반
int cost = 100; // 숙박, 물약, 무기&방어 업글비용 동일
boolean run = true;
while (run) {
	System.out.println("[1.여관] [2.대장간] [3.던전] [0.종료] \n");
	System.out.print("행동 선택 : ");
	select1 = sc.nextInt();
	System.out.println();
	if (select1 == 1) {// [1.여관] 은 소지금을 소모해 체력과 스킬회복 또는 아이템구입을 한다.
		while (true) {
			System.out.println("[1]숙박(체력,스킬회복) [2]물약구입 [0]뒤로가기");
			System.out.print("행동 선택 : ");
			select2 = sc.nextInt();
			System.out.println();
			if (select2 == 1) {
				System.out.println("여관 휴식 100골드");
				System.out.println("현재 소지금 : " + money);
				System.out.println("휴식 전 체력 : " + nowHp + "휴식 전 스킬 갯수 " + nowSkill + "\n");
				if (money < cost) {
					System.out.println("돈을 벌어오십시오.\n");
				} else if (difficulty == 1) {
					System.out.println("난이도 쉬움 = 전체 회복");
					nowHp = maxHp;
					nowSkill = maxSkill;
					System.out.println("휴식 후 체력 : " + nowHp + "휴식 후 스킬 갯수 " + nowSkill + "\n");
					System.out.println("소지금 : " + (money - cost));
				} else if (difficulty == 2) {
					System.out.println("난이도 보통 = 절반 이하의 경우 현재체력 + 최대체력 절반 / 그 이상 전체회복");
					if (nowHp > maxHp / 2) {
						nowHp = maxHp;
						nowSkill = maxSkill;
					} else {
						nowHp += maxHp / 2;
					}
					if (nowSkill > maxSkill / 2) {
						nowSkill = maxSkill;
					} else {
						nowSkill = maxSkill;
					}
					System.out.println("휴식 후 체력 : " + nowHp + "휴식 후 스킬 갯수 " + nowSkill + "\n");
					System.out.println("소지금 : " + (money - cost));
				}
			} else if (select2 == 2) {
				System.out.println("[2] 물약구매 - 들어오면 취소못하는 낙장불입 여관 ");
				System.out.println("현재 물약 갯수 : " + nowMedicine + "\n");
				if (money == cost) {
					System.out.println("최대 구매갯수 1개");
					nowMedicine += 1;
					money = money - totalPrice;
				} else if (money < cost) {
					System.out.println("소지금 부족 ");
				} else {
					System.out.print("구매 갯수 입력 : ");
					ea = sc.nextInt();
					totalPrice = ea * cost;
					if (money < totalPrice) {
						System.out.println("갯수 재확인");
					} else if (money >= totalPrice) {
						nowMedicine = nowMedicine + ea;
						money = money - totalPrice;
					}
				}
				System.out.println("소지금 : " + money + " / 물약 갯수 : " + nowMedicine + "\n");
			} else if (select2 == 0) {
				System.out.println("[0] 뒤로가기");
				totalPrice = 0;
				break;
			}
		}
	} else if (select1 == 2) { // [2.대장간] 은 소지금을 소모해 랜덤으로 무기와 방어구 업그레이드 시켜준다.
		while (true) {
			if (money < cost) {
				System.out.println("돈을 더 벌어오도록");
				break;
			}
			System.out.println("[1]무기업 [2]방어구업 [0]뒤로가기");
			System.out.println("업그레이드 확률 반반 / 비용 100 ");
			System.out.println("현재 소지금 : " + money);
			System.out.print("행동 선택 : ");
			forgeSelect = sc.nextInt();
			if (forgeSelect == 1) {
				System.out.println("현재 공격력 : " + attack);
				System.out.println("돈 100 지불 ");
				money -= cost;
				rNum = rnd.nextInt(2);
				System.out.println("[무기강화] 주사위 1 성공 / 0 실패 \n주사위 : " + rNum);
				if (rNum == 0) {
					System.out.println("강화 실패!");
				} else if (rNum == 1) {
					System.out.println("강화 성공!");
					attack += 3;
					System.out.println("강화 성공 후 공격력 : " + attack);
				}
				System.out.println("강화 후 소지금 : " + money + "\n");
			} else if (forgeSelect == 2) {
				System.out.println("현재 방어력 : " + depensive);
				System.out.println("돈 " + cost + " 지불 ");
				money -= cost;
				rNum = rnd.nextInt(2);
				System.out.println("[방어구 강화] 주사위 1 성공 / 0 실패 \n주사위 : " + rNum);
				if (rNum == 0) {
					System.out.println("강화 실패!");
				} else if (rNum == 1) {
					System.out.println("강화 성공!");
					depensive += 3;
					System.out.println("강화 성공 후 방어력 : " + depensive);
				}
				System.out.println("강화 후 소지금 : " + money + "\n");
			} else if (forgeSelect == 0) {
				System.out.println("0. 뒤로가기");
				break;
			}
		}
	} else if (select1 == 3) {
		System.out.println("3. 던전 진입");
		System.out.println("주사위 1 - 몬스터 조우 /  2 -  보물상자 발견");
		rNum = rnd.nextInt(2) + 1;
		System.out.println("주사위 결과 : " + rNum);
		monsterMoney = rnd.nextInt(25) + 5;
		if (rNum == 1) {
			System.out.println("몬스터를 만났다!\n");
			while (true) { // [1.공격][2.스킬][3.물약먹기]
				if (monsterNowHp <= 0) {
					System.out.println("몬스터를 쓰러뜨렸다! \n몬스터가 드랍한 돈 : " + monsterMoney);
					money += monsterMoney;
					System.out.println("현재 소지금 " + money + "\n");
					break;
				} else if (nowHp <= 0) {
					System.out.println("대답이 없다 그냥 시체인 것 같다 \n");
					break;
				}
				System.out.println("[1] 공격 [2] 스킬 [3]물약먹기");
				System.out.print("행동 선택 : ");
				int monsterLuck = rnd.nextInt(4) + 1;
				battle = sc.nextInt();
				if (battle == 1) {
					System.out.println("플레이어 운 : " + luck + " 몬스터 운 : " + monsterLuck);
					if (luck < monsterLuck) {
						System.out.println("몬스터 선공");
						if (monsterAttack < depensive) {
							System.out.println("몬스터가 공격했으나 방어력이 높아 아무일도 일어나지 않았다.");
							System.out.println("플레이어 공격!");
							System.out.println("몬스터에 " + attack + " 만큼 피해를 입혔다");
							monsterNowHp -= attack;
							if (monsterNowHp < 0) {
								monsterNowHp = 0;
							}
							System.out.println("몬스터 남은 체력 " + monsterNowHp + "\n");

						} else if (monsterAttack > depensive) {
							System.out.println("몬스터의 공격!");
							System.out.println("플레이어가 받은 피해량 : " + (monsterAttack - depensive));
							nowHp += (depensive - monsterAttack);
							if (nowHp < 0) {
								nowHp = 0;
							}

							System.out.println("플레이어 공격!");
							System.out.println("몬스터에 " + attack + " 만큼 피해를 입혔다");
							monsterNowHp -= attack;
							if (monsterNowHp < 0) {
								monsterNowHp = 0;
							}
							System.out.println("몬스터 남은 체력 " + monsterNowHp + "\n");
						}
						System.out.println("플레이어 체력 : " + nowHp + "\n");
					} else {
						System.out.println("플레이어 선공");
						System.out.println("플레이어 공격!");
						System.out.println("몬스터에 " + attack + " 만큼 피해를 입혔다");
						monsterNowHp -= attack;
						if (monsterNowHp < 0) {
							monsterNowHp = 0;
						}
						System.out.println("몬스터 남은 체력 " + monsterNowHp + "\n");

						System.out.println("몬스터의 공격!");
						System.out.println("플레이어가 받은 피해량 : " + (monsterAttack - depensive));
						nowHp += (depensive - monsterAttack);
						System.out.println("플레이어 체력 : " + nowHp + "\n");
						if (nowHp < 0) {
							nowHp = 0;
						}
					}
					combo = false;
				} else if (battle == 2) {
					if (monsterNowHp < 0) {
						monsterNowHp = 0;
					}
					System.out.println("2. 스킬 사용");
					if (nowSkill < 0) {
						System.out.println("스킬 횟수 부족");
					} else if (nowSkill > 0 && combo == false) {
						System.out.println("몬스터에 " + (attack * 2) + " 만큼 피해를 입혔다");
						nowSkill -= 1;
						combo = true;
						System.out.println("남은 스킬 횟수 : " + nowSkill);
						monsterNowHp -= (attack * 2);
						if (monsterNowHp < 0) {
							monsterNowHp = 0;
						}
						System.out.println("몬스터 남은 체력 " + monsterNowHp + "\n");
					} else if (combo == true) {
						System.out.println("스킬 연속사용 불가!\n");
					} else if (nowSkill <= 0) {
						System.out.println("스킬 횟수 소진! 사용불가!\n");
					}
				} else if (battle == 3) { // 물약
					if (nowMedicine <= 0) {
						System.out.println("물약이 없다!\n");
					} else {
						System.out.println("현재 물약 갯수 : " + nowMedicine);
						System.out.println("물약 1개 사용");
						nowHp += recovery;
						nowMedicine -= 1;
						if (nowHp > maxHp) {
							nowHp = maxHp;
						}
						System.out.println("회복 후 체력 : " + nowHp + "회복 후 물약 갯수 : " + nowMedicine + "\n");
					}
				}
			}
		} else if (rNum == 2) {
			System.out.println("보물상자 발견!");
			System.out.println("보너스 금액! " + monsterMoney);
			money += monsterMoney;
			System.out.println("소지금 : " + money + "\n");
		}

	} else if (select1 == 0) {
		System.out.println("종료");
		run = false;
	} else {
		System.out.println("오류 재입력");
	}
}

덤. 학원 수업 가운데서 반복문 노가다의 끝을 본 기분..
이 외에 문제를 풀긴 했으나 간단해서 백업만 하고 글 작성은 하지 않음.

0개의 댓글