반응형
자 이제 그동안 배운걸 총동원해서 Program.cs 에서 게임의 흐름을 작성해 봅시다.
먼저 기존에 작성했던 코드 맨 아래에 Dungeon() 함수를 추가해 줍니다.
static void Main(string[] args)
{
Init();
player.Name = GetUserName();
Hello(player.Name);
Dungeon();
}
던전함수는 플레이어가 던전에 입장하면 하게될 전체 로직이 작성될 곳입니다.
최초에 등장할 좀비를 포함하여 총 20마리의 몹을 처치하고, 모두 제거하고 나면 보스인 뱀파이어를 만나야 합니다.
static void Dungeon()
{
IMonsterAction monster = null; //현재 상대할 몬스터입니다.
Random random = new Random(); //랜덤함수를 선언합니다.
for(int i = 0; i < 20; i++) //총 20번을 반복 수행하기 위해 for문을 이용해 0에서 19까지 수행합니다.
{
if (i == 0) //현재 i 가 0, 즉 최초의 몹이라면
{
Guide(); //Guide 함수를 호출하여 게임 방법을 알려줍니다.
monster = new Zombie(); //현재 상대할 몬스터에 좀비를 대입합니다.
}
else //현재 i가 0보다 크다면
{
switch (random.Next(3)) //랜덤 난수를 생성합니다.
{
case 0: //0 이라면 좀비가 대입됩니다.
monster = new Zombie();
break;
case 1: //1 이라면 스켈레톤이 대입됩니다.
monster = new Skeleton();
break;
case 2: //2 라면 미이라가 대입됩니다.
monster = new Mummy();
break;
}
}
Battle(monster); //Battle 함수를 호출해 싸웁니다.
if (player.IsDead) //싸움이 끝난 뒤에 플레이어가 죽었다면
{
Fail(); //실패함수를 호출하고
break; //현재 반복문을 중단합니다.
}
else //플레이어가 살아있다면
{
player.LevelUp(); //레벨업을 합니다.
}
}
monster = new Vampire(); //모든 몹이 다 죽어서 반복문이 끝나면 상대할 몬스터에 보스인 뱀파이어를 대입합니다.
Battle(monster); //싸웁니다
if (player.IsDead) //플레이어가 죽었다면
{
Fail(); //실패함수를 호출합니다.
}
else //플레이어가 살아있다면
{
Success(); //성공함수를 호출합니다.
}
//던전함수가 종료되고 게임이 끝납니다.
}
이제 전체 코드를 한번 보겠습니다.
using ConsoleExample.Game01.Abstracts;
using ConsoleExample.Game01.Entities;
using System;
namespace ConsoleExample.Game01
{
internal class Program
{
static User player;
static void Main(string[] args)
{
Init();
player.Name = GetUserName();
Hello(player.Name);
Dungeon();
}
static void Init()
{
Console.WriteLine("=========================================================");
Console.WriteLine(" 던전탐험에 오신 것을 환영합니다.");
Console.WriteLine("=========================================================");
Console.WriteLine("");
Console.WriteLine("모험을 떠난 용사여, 그대가 도착한 이곳은 으슥하고 적막한 마을입니다.");
Console.WriteLine("마을 사람들은 두려운 시선으로 당신을 바라보고 있습니다.");
Console.WriteLine("그때 마을 이장이 다가와 당신에게 묻습니다.");
Console.WriteLine("\"당신은 누구요?\"");
player = new User();
}
static string GetUserName()
{
string name;
do
{
Console.WriteLine("이제 당신의 이름을 알려주세요.");
name = Console.ReadLine();
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("이름을 입력하세요.");
}
} while (string.IsNullOrWhiteSpace(name));
return name;
}
static void Hello(string name)
{
Console.WriteLine($"\"어서오시오, {name}...\"");
Console.WriteLine("\"하지만 당신은 잘못 왔소. 이곳은 죽음의 저주가 내려진 곳이오. 어서 떠나시오.\"");
Console.WriteLine("이장의 말을 들은 당신은 놀란 표정이 되어 그들에게 왜 그런지 물었습니다.");
Console.WriteLine("자초지정을 들어보니 마을에 괴물들이 나타나고 있었습니다.");
Console.WriteLine("괴물들을 물리치기로 결심한 당신은 괴물들의 근거지를 물었고, 그곳은 멀지 않은 곳에 있는 동굴이었습니다.");
Console.WriteLine("이제 당신은 동굴로 향합니다.");
}
static void Guide()
{
Console.WriteLine("=========================================================");
Console.WriteLine(" 공격명령은 다음과 같습니다.");
Console.WriteLine(" 0:파이어볼(10%) 1:매직애로우(60%) 2:스턴공격(40%) 3:일반공격(100%)");
Console.WriteLine("=========================================================");
}
static void Dungeon()
{
IMonsterAction monster = null; //현재 상대할 몬스터입니다.
Random random = new Random(); //랜덤함수를 선언합니다.
for(int i = 0; i < 20; i++) //총 20번을 반복 수행하기 위해 for문을 이용해 0에서 19까지 수행합니다.
{
if (i == 0) //현재 i 가 0, 즉 최초의 몹이라면
{
Guide(); //Guide 함수를 호출하여 게임 방법을 알려줍니다.
monster = new Zombie(); //현재 상대할 몬스터에 좀비를 대입합니다.
}
else //현재 i가 0보다 크다면
{
switch (random.Next(3)) //랜덤 난수를 생성합니다.
{
case 0: //0 이라면 좀비가 대입됩니다.
monster = new Zombie();
break;
case 1: //1 이라면 스켈레톤이 대입됩니다.
monster = new Skeleton();
break;
case 2: //2 라면 미이라가 대입됩니다.
monster = new Mummy();
break;
}
}
Battle(monster); //Battle 함수를 호출해 싸웁니다.
if (player.IsDead) //싸움이 끝난 뒤에 플레이어가 죽었다면
{
Fail(); //실패함수를 호출하고
break; //현재 반복문을 중단합니다.
}
else //플레이어가 살아있다면
{
player.LevelUp(); //레벨업을 합니다.
}
}
monster = new Vampire(); //모든 몹이 다 죽어서 반복문이 끝나면 상대할 몬스터에 보스인 뱀파이어를 대입합니다.
Battle(monster); //싸웁니다
if (player.IsDead) //플레이어가 죽었다면
{
Fail(); //실패함수를 호출합니다.
}
else //플레이어가 살아있다면
{
Success(); //성공함수를 호출합니다.
}
//던전함수가 종료되고 게임이 끝납니다.
}
static void Battle(IMonsterAction monster)
{
Console.WriteLine($"앗, 몬스터가 나타났다. {monster.GetName()}!!");
string attack = string.Empty;
bool isProc = true;
do
{
do
{
Console.Write("공격방식을 선택하세요.");
attack = Console.ReadLine();
if (string.IsNullOrWhiteSpace(attack))
{
Console.Write("공격방식을 선택하세요.");
}
} while (string.IsNullOrWhiteSpace(attack));
Damage attackSkill = player.GetDamage(attack);
monster.SetDamage(attackSkill);
if (monster.IsStatus())
{
isProc = false;
}
else
{
Console.WriteLine("몬스터가 공격해온다!");
player.SetDamage(monster.GetDamage());
if (player.IsDead)
{
isProc = false;
}
}
if (isProc)
{
Console.WriteLine("=========================================================");
Console.WriteLine($" 당신의 체력 : {player.Health}");
Console.WriteLine($" 몬스터의 체력 : {monster.GetHealth()}");
Console.WriteLine("=========================================================");
}
} while (isProc);
}
static void Fail()
{
Console.WriteLine("\"크읔... 내가 지다니...\"");
Console.WriteLine("당신은 죽었습니다.");
Console.WriteLine("게임이 종료됩니다.");
}
static void Success()
{
Console.WriteLine("성공입니다. 당신은 마을을 구했습니다.");
Console.WriteLine("모두가 당신을 보며 기뻐하고 있습니다. 당신은 이제 이 마을의 영웅입니다.");
Console.WriteLine("게임이 종료됩니다.");
}
}
}
여기까지 왔으니 이제 게임을 한번 실행해 봐야겠죠?
다음과 같이 게임의 진행상황을 볼 수 있습니다.
플레이어의 체력이 0이 되기전에 몬스터의 체력이 0 이 되면 이기면서 레벨업을 하게 됩니다.
확률 싸움임으로 모든 것이 운이지요.
게임을 끝까지 진행해 보세요.
게임이 정상 종료된다면, 된 겁니다.
이제 텍스트게임을 완성하였습니다.
어떠신가요? 재밌으신가요? C#이 조금 이해되셨나요?
이제 프로그램의 세계에 한걸음 더 다가가신 것을 축하드립니다.
반응형
'프로그래밍공부 > C#기초' 카테고리의 다른 글
[공지] 샘플 코드를 온라인에서 공유드립니다. (0) | 2024.01.16 |
---|---|
C# 프로그램 예제연습 - 텍스트게임만들기 - 07 (0) | 2024.01.15 |
C# 프로그램 예제연습 - 텍스트게임만들기 - 06 (0) | 2024.01.15 |
C# 프로그램 예제연습 - 텍스트게임만들기 - 05 (0) | 2024.01.15 |
C# 프로그램 예제연습 - 텍스트게임만들기 - 04 (2) | 2024.01.15 |