스파르탄캠프/본격적인 캠프

노베이스의 게임개발(본 캠프) Text RPG 팀 협업 진행 3탄

SP_1217 2024. 5. 3. 21:12

 


스킬을 만들기 위한 방법들

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

namespace Adventure
{
    internal class SKill
    {

        public string Name { get; set; }
        public int Str { get; set; }
        public int Mp { get; set; }

        public SKill(string name, int str, int mp)

        { //생성자 < 

            Name = name;
            //이름
            Str = str;
            //공격력
            Mp = mp;
            //마력
        }
    }

}

이번에 스킬에 대한 의견이 난무해서 제가 먼저 나서서 해보겠다 의견을 표출했습니다. 그래서 만들어진게 위에 내용이며 저건 프로퍼티화를 시켜 불러오게 하기 위한 기본 셋팅만 진행하며,

            sKill = new List<SKill>();
            //스킬 목록

            if (Job == "전사")
            {
                sKill.Add(new SKill("전사스킬1", 10, 10));
                sKill.Add(new SKill("전사스킬2", 10, 10));
                sKill.Add(new SKill("전사스킬3", 10, 10));
            }
            else if(Job == "마법사")
            {
                sKill.Add(new SKill("마법사스킬1", 10, 10));
                sKill.Add(new SKill("마법사스킬2", 10, 10));
                sKill.Add(new SKill("마법사스킬3", 10, 10));
            }
            else
            {
                sKill.Add(new SKill("도적스킬1", 10, 10));
                sKill.Add(new SKill("도적스킬2", 10, 10));
                sKill.Add(new SKill("도적스킬3", 10, 10));
            }
        }

다른 조의 팀원에게 요청하여 skill 이라는 것들을 List로 만들어서 목록을 표현하기 위해 if문으로 나누어 Job이라는 코드에직업이 들어간다면 그에 맞는 스킬명들이 표현이 되었습니다.

                for (int i = 0; i < sKill.Count; i++)
                {
                    Console.WriteLine($"스킬이름: {sKill[i].Name} 스킬공격력: {sKill[i].Str} 스킬소모값: {sKill[i].Mp} ");
                }

while이나for문 같은것으로 배열에 저장된 0,1,2의 카운트를 차례로 늘려가며 콘솔창에 띄우는 작업을 진행했습니다.

 

배틀을 구현하는 사람이 다르다면 그 사람 의견에 맞춰보는것도 중요합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;

namespace Adventure.Charter.Skill
{
    public class SKill
    {
        PlayerInfo player;
        private int baseDamage = 10; // 기본 공격력

        public void warriorSkill1()
        {
            if (player.Mp >= 30) 
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 2); // 레벨에 따른 공격력 증가
                Console.WriteLine($"전사가 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }

        }
        public void warriorSkill2()
        {
            if (player.Mp >= 30)
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 2); // 레벨에 따른 공격력 증가
                Console.WriteLine($"전사가 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }

        }
        public void wizardSkill1()
        {
            if (player.Mp >= 30)
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 3); // 레벨에 따른 공격력 증가
                Console.WriteLine($"마법사가 마법을 시전하여 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }
        }
        public void wizardSkill2()
        {
            if (player.Mp >= 30)
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 3); // 레벨에 따른 공격력 증가
                Console.WriteLine($"마법사가 마법을 시전하여 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }
        }
        public void banditSkill1()
        {
            if(player.Mp >= 30)
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 4); // 레벨과 민첩성에 따른 공격력 증가
                Console.WriteLine($"도적이 뒷통수를 치며 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }
        }
        public void banditSkill2()
        {
            if (player.Mp >= 30)
            {
                player.Mp -= 30;
                int totalDamage = baseDamage + (player.Str * 4); // 레벨과 민첩성에 따른 공격력 증가
                Console.WriteLine($"도적이 뒷통수를 치며 {totalDamage}의 데미지를 입힙니다.");
            }
            else
            {
                Console.WriteLine("마나가 부족합니다.");
            }
        }
    }

}

불러온 List에 조건을 붙여 광역 데미지를 넣는다 던가보다 차라리 class를 만들어 객체를 생성하고 하나하나 불러오는 쪽이 더 편할것 같다는 의견에 기존에 다른 팀원이 만들었던 것으로 리팩토링을 진행하였습니다. 이런식으로 팀원과 협업할때 여러가지를 생성하고 조율하면서 삭제하는것도 꽤나 중요하다고 느낀 점이었습니다.


 

마무리

조만간 팀프로젝트가 마무리 될 예정이기 때문에 그에 관한 PPT같은것도 만들려면 시간이 참 많이 걸리겠네요, 그래도 매일매일 할일이 늘어나지만 또한편으로는 기쁜 기분도 듭니다.