데이터 정보 ClassType : None, Knight, Archer, Mage Player info : hp ,attack, ClassTypeMonsterType : None, Slime, Orc, Skeleton Monster info : hp, attack . 함수 캐릭터 직업 선택 몬스터 랜덤 생성전투
로비 접속(직업 선택)
게임 접속(필드로 간다, 로비로 간다.)
필드 접속(전투 모드, 일정 확률로 마을로 도망)
https://ansohxxn.github.io/c%20sharp/ch4/
해당 글을 읽고서 위와 같이 정리한 후, 만들고 싶은데로 만들었습니다.
using System;
namespace TextRPG1
{
class Program
{
static Random r = new Random();
enum ClassType{
None=0,
Knight=1,
Archer=2,
Mage=3
}
enum MonsterType {
None=0,
Slime,
Orc,
Skeleton
}
struct Player
{
public int hp;
public int attack;
public ClassType job;
}
struct Monster
{
public int hp;
public int attack;
public MonsterType tribe;
}
static void PrintPlayerInfo(Player player)
{
Console.WriteLine("-------------------------------------");
Console.WriteLine("플레이어 클래스 : " + player.job);
Console.WriteLine("플레이어 공격력 : " + player.attack);
Console.WriteLine("플레이어 체력 : " + player.hp);
Console.WriteLine("-------------------------------------");
}
static void CreateMonster(out Monster monster)
{
switch (r.Next(1, 4))
{
case 1:
monster.tribe = MonsterType.Orc;
monster.attack = 10 + r.Next(0,15);
monster.hp = 30 + r.Next(0,30);
break;
case 2:
monster.tribe = MonsterType.Skeleton;
monster.attack = 5 + r.Next(0,10);
monster.hp = 8 + r.Next(0,3);
break;
case 3:
monster.tribe = MonsterType.Slime;
monster.attack = 2 + r.Next(0,3);
monster.hp = 15 + r.Next(0,15);
break;
default:
monster.tribe = MonsterType.None;
monster.attack = 0;
monster.hp = 0;
break;
}
}
static void Fight(ref Player player, ref Monster monster)
{
while (true)
{
switch(r.Next(0, 2))
{
case 0:
Console.WriteLine("Player가 " + monster.tribe + "를 공격했습니다.");
monster.hp -= player.attack;
break;
case 1:
Console.WriteLine(monster.tribe + "가 Player를 공격했습니다.");
player.hp -= monster.attack;
break;
}
Console.WriteLine("Player 체력 : " + player.hp + ", Monster 체력 : " + monster.hp);
Console.ReadKey();
if(player.hp <= 0)
{
Console.WriteLine("GameOver");
Environment.Exit(0);
}
if (monster.hp <= 0)
return;
}
}
static void FieldEnter(ref Player player)
{
Console.Clear();
PrintPlayerInfo(player);
Console.WriteLine("필드에 입장했습니다.");
Monster monster;
CreateMonster(out monster);
string sel;
while (true)
{
Console.WriteLine("몬스터 " + monster.tribe + "을 만났습니다.");
Console.WriteLine("어떤 행동을 하시겠습니까?");
Console.WriteLine("[1] 몬스터와 전투");
Console.WriteLine("[2] 일정 확률로 마을로 도망");
Console.Write("선택 : ");
sel = Console.ReadLine();
switch (sel)
{
case "1":
Fight(ref player, ref monster);
return;
case "2":
if(r.Next(0, 10) <= 6) // 70%
return;
else
{
Console.Clear();
Console.WriteLine("도망에 실패했습니다.");
Console.WriteLine("몬스터에게 데미지를 입었습니다.");
player.hp -= monster.attack;
if(player.hp <= 0)
{
Console.WriteLine("GameOver");
Environment.Exit(0);
}
PrintPlayerInfo(player);
break;
}
}
}
}
static void EnterGame(ref Player player)
{
Console.WriteLine("게임에 접속했습니다.");
string sel;
while (true)
{
Console.Clear();
PrintPlayerInfo(player);
Console.WriteLine("어떤 행동을 하시겠습니까?");
Console.WriteLine("[1] 필드로 접속");
Console.WriteLine("[2] 로비로 이동");
Console.Write("선택 : ");
sel = Console.ReadLine();
switch (sel)
{
case "1":
FieldEnter(ref player);
break;
case "2":
Console.Clear();
Console.WriteLine("로비로 이동했습니다.");
return;
}
}
}
static void SelectCharacter(out Player player)
{
Console.WriteLine("직업을 선택해주세요.");
Console.WriteLine("[1] Knight");
Console.WriteLine("[2] Archer");
Console.WriteLine("[3] Mage");
string sel;
while (true)
{
Console.Write("선택 : ");
sel = Console.ReadLine();
switch (sel)
{
case "1":
player.hp = 50;
player.attack = 5;
player.job = ClassType.Knight;
return;
case "2":
player.hp = 30;
player.attack = 9;
player.job = ClassType.Archer;
return;
case "3":
player.hp = 10;
player.attack = 20;
player.job = ClassType.Mage;
return;
}
}
}
static void Main(string[] args)
{
Player player;
while (true)
{
SelectCharacter(out player);
EnterGame(ref player);
}
}
}
}