시간제한없이 자유롭게 하면된다. [던전탐험게임] 플레이어는 무기 방어구 체력 돈 운 등의 데이터가 있다. (새로운
변수 추가 가능) 플레이어와 적은 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("오류 재입력");
}
}
덤. 학원 수업 가운데서 반복문 노가다의 끝을 본 기분..
이 외에 문제를 풀긴 했으나 간단해서 백업만 하고 글 작성은 하지 않음.