[240112]TIL

응징·2024년 1월 12일
0

TIL

목록 보기
15/36
post-thumbnail

오늘 한거

(상위)직업 클래스

(하위)
광전사 생성자
용기사 생성자
원소 마법사 생성자

직업별 스테이터스 설정

기사가 공격력, HP, 방어력 가장 높음/ 치확,치피 보통/mp,마나회복율 낮음
전사는 치피, 치확 높음, 회피율 /공격력,HP보통, 방어력, 마나회복율 보통/ mp낮음
마법사는 치피,치확 ,Mp , 마나회복율 높음/ - / 공격력, HP , 회피율, 방어력 낮음

추가한 스테이터스

MP
MP회복율
치명타확률
치명타 피해
회피율

하위 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;

namespace TextRPG_18
{
    public class Job
    {

        public string name;
        public int hp;
        public int mp;
        public int atk;
        public int def;
        public float criticalChance;
        public float criticalDamage;
        public int turn =0;
        public bool turnfalse = false;

        public string Skill_name1;
        public string Skill_name2;


        //회피율 (공통) , 기본 공격력 업 (전사) 치명타 확률(기사), 치명타 피해량(마법사) 

        public Job(string name,  int hp, int mp, int atk, int def, float criticalChance, float criticalDamage)
        {
            this.name = name;
            this.hp = hp;
            this.mp = mp;
            this.atk = atk;
            this.def = def;
            this.criticalChance = criticalChance;
            this.criticalDamage = criticalDamage;   
        }

        public void Pick(Player player) // 직업선택시 스택 적용
        {
            playermax.maxHp = hp;
            playermax.maxmp = mp;
            playermax.atk = atk;
            playermax.dfs = def;
            player.hp = this.hp;
            player.mp = this.mp;
            player.atk = this.atk;
            player.def = this.def;    
            player.criticalChance = this.criticalChance;
            player.criticalDamage = this.criticalDamage;
            //player.type = type();
        }

        public virtual int type()
        {
            return 0;
        }


        public virtual void skill_1(List<Monster> mon, Player player) //범위계
        {
            
        }

        public virtual void Skill_2(Player player) //서포터
        {

        }

        public virtual string GetName1()
        {
            return "DefaultName1";
        }
        public virtual string GetName2()
        {
            return "DefaultName1";
        }

        public virtual bool Initialization(Player player)//초기화
        {
            return false;
            
        }

    }

    public class Warrior : Job
    {
        public string Skill_name1 = "광 : 마나 10을 사용해 모든 몬스터에게 참격을 가합니다";
        public string Skill_name2 = "굶주림 :자신의 전체 피에서 20% 깎고 기본 공격력을 30%증가시킵니다 (3턴동안)";

        public Warrior(string name, int hp, int mp, int atk, int def, float criticalChance, float criticalDamage) : base(name, hp, mp, atk, def, criticalChance, criticalDamage)
        {

            
        }

        public override int type()
        {
            return 1;
        }

        public override void skill_1(List<Monster> mon, Player player)
        {
            player.mp -= 10;
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("\n마나 10이 소비되었습니다.");
            Console.WriteLine(player.name + " (이)가 거대한 참격을 준비합니다!");
            Console.ResetColor();
            Thread.Sleep(500);
            Console.WriteLine($"=====================================================");
            foreach (var item in mon) 
            {
                item.hp -= player.PlayerDamage();

                Console.WriteLine($"\n{player.name} (이)가 {item.name}을(를) 공격!");
                Console.WriteLine($"{item.name}은(는) -{player.atk}의 데미지를 입었다!\n");
                Thread.Sleep(600);

                if (item.hp <= 0)
                {
                    item.hp = 0;
                    item.live = "dead";
                }


            }
            Console.WriteLine($"=====================================================");
        }

        public override void Skill_2(Player player)
        {
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("\n 전체 HP에서 20%이 감소되었습니다.");
            Console.WriteLine($" {player.name} (이)가 피에 굶주림니다. 공격력이 30%증가합니다");
            Console.ResetColor();

            turnfalse = true;
            player.hp -= (int)(playermax.maxHp * 0.2); //20% 빠짐
            player.atk += (int)(atk * 0.3); //30% 증가
        }

        public override string GetName1()
        {
            return Skill_name1;
        }
        public override string GetName2()
        {
            return Skill_name2;
        }

        public override bool Initialization(Player player)//초기화
        {
            if (turnfalse)
            {
                if (turn >= 3)
                {
                    turnfalse = false;
                    turn = 0;
                    player.atk = playermax.atk; //다시 돌려놓기
                    return true;
                }
                else return false;
            }
            else return false;
        }


    }
    public class Kinght : Job  
    {
        public string Skill_name1 = "격 : 마나 10을 이용해 모든 몬스터에게 용의 힘을 발산합니다 ";
        public string Skill_name2 = "용기: 마나 10을 이용해 자신의 방어력을 30% 증가시킵니다";
        public Kinght(string name, int hp, int mp, int atk, int def, float criticalChance, float criticalDamage) : base(name, hp, mp, atk, def, criticalChance, criticalDamage)
        {
        }

        public override int type()
        {
            return 2;
        }
        public override void skill_1(List<Monster> mon, Player player)
        {

        }

        public override void Skill_2(Player player)
        {

        }
        public override string GetName1()
        {
            return Skill_name1;
        }
        public override string GetName2()
        {
            return Skill_name2;
        }
    }

    public class Mage : Job 
    {
        public string Skill_name1 = "화 : 마나 15를 이용해 적 모두에게 파이어 볼을";
        public string Skill_name2 = "욕망: 마나 15를 이용해 자신의 치명타 피해를 30% 증가합니다";
        public Mage(string name, int hp, int mp, int atk, int def, float criticalChance, float criticalDamage) : base(name, hp, mp, atk, def, criticalChance, criticalDamage)
        {
        }

        public override int type()
        {
            return 3;
        }

        public override void skill_1(List<Monster> mon, Player player)
        {
            foreach (var item in mon) 
            {
                //
            }
        }

        public override void Skill_2(Player player)
        {

        }
        public override string GetName1()
        {
            return Skill_name1;
        }
        public override string GetName2()
        {
            return Skill_name2;
        }
    }


}
  • 상속을 받아서 Job 데이터에 하위클래스 데이터를 초기화
  • 각 직업마다 스테이터스 다르게
  • 각 직업마다 스킬 다르게
  • 각 직업마다 스킬 2개씩
  • 가상화 사용
  • 던전매니저에서 오류 없음

구현한 로직

광전사 스킬 1 구현
광전사 스킬 2 구현
광전사 스킬 턴 횟수 초기화 구현

&

해야 할거

직업(2) 스킬1, 2
회복율 변수 추가
마나 회복 추가
일반 공격, 스킬 공격 치명타 적용
몬스터 피격 방어 적용
회피율 적용
상태보기에 변수 업데이트

확인해 볼거

장비추가할때 스테이터스 어떻게 증가하는지 확인
팀원 회복 아이템 어떤 구조로 증가하는지 확인
아이템 꼈을때 스킬로 버프 주면 제대로 돌아오는지 확인
몬스터 피격 받을때 방어력 적용 되는지 확인

튜터님&팀원 조언

case안에 있는것은 함수로 빼주기
enum: 구조체는 가능
region, endregion 로 열고 닫기 가능

메인업데이트 된거 브런치에 가져오기 : brunch -> Update From Main
깃 데스크탑 잘 모르겠으면 주석으로 테스트 하기 (근데 이건 현재 브런치 다하고 해야함)

profile
Unity 개발 위주로 정리합니다

0개의 댓글