VR/AR 콘텐츠 개발 Unity 프로젝트 기반 메타버스 게임 개발자 양성 수업 5일 차 정리

윤승민
∙∙조회 23
csharp
using System;
using System.Collections.Generic;
using System.Text;

namespace TextRpg
{
    internal class ProceduralVersion
    {
        //캐릭터 스탯 변수화: 플레이어와 몬스터의 정보를 각각 독립된 변수로 선언해야 합니다(예 : int playerHp, int monsterHp, string monsterName 등)

        // Player 스탯
        string playerName = "용사";
        int playerHp = 100;
        int playerAttack = 20;

        // Monster 스탯
        string monsterName = "슬라임";
        int monsterHp = 100;
        int monsterAttack = 20;

        // 전투 진행 상태
        bool isRun = false;
        int turnCount = 0;

            // 전투 루프

            while(true) //(playerHp > 0 && monsterHp > 0 && isRun == false) 아래줄로 만들면 true로 작성 가능함 - while 문은 처음부터 true로 만들고 아래에 루프가 탈출하는 조건을 걸어라
            {
                turnCount++;
                // 아래는 게임이 종료 되는 경우
                // (예외처리)
                if (playerHp <= 0) break;  // 플레이어가 사망했을경우
                if (monsterHp <= 0) break; // 몬스터가 사망했을경우
                if (isRun) break; // 플레이가 도망쳤을 경우

                Console.WriteLine("");
                Console.WriteLine($"====={turnCount}====");
                Console.WriteLine($"[{playerName}] hp : {playerHp}");
                Console.WriteLine($"[{monsterName}] hp : {monsterHp}");
                Console.WriteLine("");

                // 입력 받을 준비
                Console.WriteLine($"[{playerName}] 의 턴! 무엇을 하시겠습니까?");
                Console.WriteLine($" 1. 공격");
                Console.WriteLine($" 2. 연속 공격");
                Console.WriteLine($" 3. 도망가기");

                int playerChoice = 0;
        bool isValidinput = false; // 유효한 입력인 여부를 결정하는 변수


                // 입력 검증 단계
                do
                {
                    Console.Write("선택 : ");
                    string input = Console.ReadLine();

                    if (int.TryParse(input, out playerChoice) && // input을 int로 바꾸는것 검사
                        (0 < playerChoice && playerChoice< 4)) // int로 바뀐 값이 유효한 범위인지 검사
                    {
                        isValidinput = true;
                    }
                    else
                    {
                        Console.WriteLine($"잘못된 입력입니다 1,2,3 중 하나를 선택하세요");
                    }

                
                } while (isValidinput == false) ;

Console.WriteLine();


// 플레이어 선택에 따른 분기 처리
switch (playerChoice)
{
    case 1:
        // 일반공격
        monsterHp -= playerAttack;
        Console.WriteLine("");
        Console.WriteLine($"[일반 공격] : {playerName}의 공격" + $"{monsterName} 에게 {playerAttack}의 데미지!");
        break;
    case 2:
        // 연속공격
        Random random = new Random(); // 임의의 수를 만드는 random 객체를 생성해줘!
        int attackCount = random.Next(1, 4); //random이라는 객체에게 (1,3) 사이의 하나 값을 반환해줘!

        Console.WriteLine("");
        Console.WriteLine($"[연속 공격] {playerName} 이(가) 연속 공격을 {attackCount} 만큼 시도!");

        for (int i = 0; i < attackCount; ++i)
        {
            monsterHp -= playerAttack;
            Console.WriteLine("");
            Console.WriteLine($"[연속 공격] : {playerName}의 공격" + $"{monsterName} 에게 {playerAttack}의 데미지!");

        }


        break;
    case 3:
        // 도망가기
        isRun = true;
        Console.WriteLine($"[도망가기] : {playerName} 은(는) 전투에서 도망쳤다!");
        Console.WriteLine();
        break;
}
// 몬스터의 턴
if (monsterHp > 0) // 몬스터가 살아있다면
{
    playerHp -= monsterAttack;
    Console.WriteLine($"[반격] {monsterName}의 반격! {playerName}에게" + $"{monsterAttack}의 데미지!");
}
else // 몬스터가 죽었다면
{
    Console.WriteLine($"[처치] {monsterName}이(가) 쓰러졌다!");
}
            }

            Console.WriteLine("================");
Console.WriteLine("====전투종료====");
Console.WriteLine("================");


if (isRun)
{
    Console.WriteLine($"[결과] {playerName}은(는) 무사히 도망쳤습니다.");

}
else if (playerHp <= 0) // 플레이어가 사망했을 경우
{
    Console.WriteLine($"[결과] {playerName}은(는) {monsterName}에게 패배했습니다.");

}
else // 몬스터가 사망했을 경우
{
    Console.WriteLine($"[결과] {playerName}은(는) {monsterName}에게 승리했습니다.");
}