📝24.01.10
오늘은 어제에 이어서 튜터님의 알고리즘 수업이 있었다. 어제 배운 연결리스트에 이어서 스택과 큐, 그리고 정렬 알고리즘 등에 대해 배웠는데 이 중 정렬 알고리즘은 지난 정리글을 쓰면서 확실히 숙지되었다는 느낌이 들 정도로 귀에 잘들어왔다. 그래서 시간이 되면 연결리스트와 스택, 큐에 대해서도 정리글을 한번 써야할 것 같다.
오늘 한 것을 나열해보겠다.
사소한 것이지만 벨로그에 들어왔을 때 왼쪽 메뉴바가 전체보기
로만 표시되어 있는 것이 아쉽다는 생각이 들었다. 그래서 5n여개의 포스트에 모두 태그 입력 작업을 해주었다. 더 늦어지기전에 진행해서 뿌듯했다.
그리고 포스트 태그 뿐만 아니라 포스트안에서도 header에 대해서는 하이퍼링크를 자동으로 분리해주길래 앞으로는 꼬박꼬박 헤더 메뉴를 작성해보겠다.
TextRPG 팀 과제에서 캐릭터 생성 부분을 만든 것은 물론이고 캐릭터의 스킬까지 포함해서 맡게 되었다.
그런데 아직 던전 배틀 시스템이 어떤 식으로 구현될지 확실하지 않아 일단 구현해놓고 핵심적인 기능들은 주석처리 해두었다.
다른 클래스들도 완성했지만, 전사 클래스만 첨부하겠다.
class Warrior : Character
{
public Warrior()
{
atk = 10;
def = 5;
hp = 100;
mp = 50;
job = "전사";
f_atk = atk;
f_def = def;
f_hp = hp;
f_mp = mp;
}
public override int Skill_1(Monster monster)
{
//단일기
int damage = f_atk * 2;
mp -= 10;
//monster.hp -= damage;
//Console.WriteLine($"알파 스트라이크!\n{monster.name}에게 {damage}만큼의 대미지를 입혔습니다.");
return damage;
}
public virtual int Skill_2(Monster[] monster)
{
//몬스터 무리 중 2마리 랜덤 공격
int damage = (int) Math.Round(f_atk * 1.2);
mp -= 15;
/* 공격 여기서 실행할 경우
if(monster.Length < 2) //남은 몬스터가 1마리일때
{
monster[0].hp -= damage;
Console.WriteLine($"{monster[0].name}에게 {damage}의 데미지를 입혔습니다.");
} else
{
int first, second;
Random rand = new Random();
first = rand.Next(0, monster.Length - 1);
while(true)
{
int b = rand.Next(0, monster.Length - 1);
if (first == b) continue;
else
{
second = b;
break;
}
}
}
*/
return damage;
}
}
Monster
를 매개변수로 받아와 함수를 실행하게 될 경우에는 주석 안의 프로그램을 실행하게 될 것 같고, 단순하게 캐릭터 스킬의 공격력만 받아서 던전 시스템에서 사용한다면 상황에 맞는 damage
값만 받아 사용할 것 같다.
참고로 Skill_1은 단일기, Skill_2는 광역기라는 설정으로 구현하기 시작했다.
전사의 경우에는 단일기는 단순하게 강타라는 느낌으로 데미지가 두배고, 광역기는 구현 목록에 제시된대로 몬스터 무리 중 2마리에만 공격을 가하는 설정으로 구현했다. 궁수는 궁수답게 단일기에 더 재미있는 요소를 넣어두었다. 급소, 기타 몸통, 빗나감 등을 랜덤으로 설정하여 데미지값이 달라지는 형태로 구현하는 등 캐릭터 직업에 따라 재밌는 요소를 추가할 수 있도록 노력했다.
위의 부분을 구현하면서 배운 것이 있는데 바로 Random
클래스이다.
Random rand = new Random();
int a = rand.Next(min, max); //min 이상 max 이하의 랜덤한 숫자 생성
C#에선 랜덤 클래스를 통해 난수를 생성할 수 있다.
위의 용법으로 사용하면 되는데, 가장 중요한 점은 min
와 max
모두 int 값만 사용 가능하다는 것이다. 만약 double이나 float 형태로 바꾸고 싶다면 *
을 활용하면 되는 것 같다.
어제 팀원과의 깃허브 작업을 하면서 배운 것이 있다. 바로 Issue 등록이다.
깃허브의 Issue에 내가 해야 할 것을 등록해두고 이를 하나하나 해결하는 것을 쉽게 기록할 수 있다.
그래서 오늘 GameManager의 TodayVisited 변수를 함수로 수정하면서 생긴 수정 사안들을 1차적으로 주석 처리해두고, 이를 깃허브의 이슈에 모두 정리해두었다. 이를 보면서 때에 맞게 수정하면 될 것 같다.
BTB 리뉴얼 작업의 경우 지속적으로 블로그 포스팅하면서 진행하고 싶은데, 생각보다 그게 쉽지가 않다. 그래서 일단 Issue를 적극적으로 활용해볼까 한다.
그리고 오늘도 알고리즘 문제 풀이를 두개 해결했다.
📕
1) [프로그래머스] 가위 바위 보