오늘은 오전 9시부터 알고리즘에 대한 세션이 있었다.

더보기

알고리즘에 대한 정리

 

알고리즘은 문제해결능력이다.
1) Short Term Memory : 정보의 부족
청킹(chunking)하기
주석 남기기
코드 컨벤션 잘  작성하기
2) long Term Memory : 지식의 부족
플래시 카드 작성 - 토글(접은 글)
인출 강도 높이기
정교화 연습하기
3) Working Memory : 처리능력의 부족
내재적 부하 : 특정 알고리즘의 내부적 원리를 이해하고 있으면 줄어드는 부하
외재적 부하 : 문제 외적이거나 코드의 우발적 복잡성에 기인하는 부하
본유적 부하 : 내재적 부하와 외재적 부하가 가득 차서 LTM(long Term Memory)으로 지식이 저장되는 로드에 걸리는 부하


정신 모델 만들기 : 생각나는 대로 구조를 만들기 (구체적으로 만들수록 좋음)
상태표 만들기 : 변수의 값에 중점을 둔다.

대충 이 정도... 정신없이 작성하니 10시 정도 되어서,

 오후 2시에 예정인 팀프로젝트 발제까지 남는 시간에 4주 차 과제였던 TextRpg를 만들어봤다.

더보기

using System.Numerics;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;
using System.Threading;
namespace Text_Rpg
{
    internal class Program
    {
        public static Warrior player;
        public static Goblin goblin;
        public static Dragon dragon;
        public static HealthPotion hppotion;
        public static StrengthPotion stpotion;
        public bool IsDead = false;
        static void Main(string[] args)
        {
             Stage.StartStage1();
            //클리어 보상
             Stage.StartStage2();
            //클리어 보상
        }
        public interface ICharacter
        {
            string Name { get; set; }
            int Health { get; set; }
            int Attack { get; set; }
            bool IsDead { get; set; }
        }
        public class Warrior : ICharacter
        {
            public string Name { get; set; }
            public int Health { get; set; }
            public int Attack { get; set; }
            public bool IsDead { get; set; }
            public Warrior(string name, int health, int atk)
            {
                Name = name;
                Health = health;
                Attack = atk;
            }
        }
        public class Monster : ICharacter
        {
            public string Name { get; set; }
            public int Health { get; set; }
            public int Attack { get; set; }
            public bool IsDead { get; set; }
        }
        public class Goblin : Monster
        {
            public string Name { get; set; }
            public int Health { get; set; }
            public int Attack { get; set; }
            public Goblin(string name, int health, int atk)
            {
                Name = name;
                Health = health;
                Attack = atk;
            }
        }
        public class Dragon : Monster
        {
            public string Name { get; set; }
            public int Health { get; set; }
            public int Attack { get; set; }
            public Dragon(string name, int health, int atk)
            {
                Name = name;
                Health = health;
                Attack = atk;
            }
        }
        public interface IItem
        {
            string Name { get; set; }
            public void Use(Warrior warrior);
        }
        public class HealthPotion : IItem
        {
            public string Name { get; set; }
            public HealthPotion(string name)
            {
                Name = name;
            }
            public void Use(Warrior warrior)
            {
                Console.WriteLine("힐 포션 사용!");
                warrior.Health += 10;
                if (warrior.Health > 40)
                {
                    warrior.Health = 50;
                }
            }
        }
        // 공격력 포션 클래스
        public class StrengthPotion : IItem
        {
            public string Name { get; set; }
            public StrengthPotion (string name)
                {
                    Name = name;
                }
            public void Use(Warrior warrior)
            {
                Console.WriteLine("힘 포션 사용!");
                warrior.Attack += 5;
            }
        }
        public class Stage
        {
            static public void StartStage1()
            {
                Console.Clear();
                player = new Warrior("워리어", 50, 5);
                goblin = new Goblin("고블린", 10, 3);
                stpotion = new StrengthPotion("힘 포션");
                hppotion = new HealthPotion("힐 포션");
                Console.WriteLine("게임이 시작됩니다!");
                Console.WriteLine(" 1단계 스테이지 (vs 고블린)\n");
                Console.WriteLine(" 플레이어 ");
                Console.WriteLine( $"이름 : {player.Name} ");
                Console.WriteLine( $"공격력 : {player.Attack}, 체력 : {player.Health}\n ");
                Console.WriteLine( " 고블린 ");
                Console.WriteLine($"이름 : {goblin.Name} ");
                Console.WriteLine($"공격력 : {goblin.Attack}, 체력 : {goblin.Health}\n ");
                do
                {
                    Console.WriteLine("플레이어의 턴!!");
                    Console.WriteLine("원하는 행동을 골라 보세요!");
                    Console.WriteLine("1.공격");
                    Console.WriteLine("2.힘 포션 먹기");
                    Console.WriteLine("3.힐 포션 먹기");
                    int playerinput = int.Parse(Console.ReadLine());
                    switch (playerinput)
                    {
                        case 1:
                            Console.WriteLine("몬스터를 공격합니다.");
                            goblin.Health -= player.Attack;
                            Console.WriteLine($"{player.Attack}에 피해를 주었습니다");
                            Console.WriteLine($"고블린의 남은 체력 : {goblin.Health}\n");
                            break;
                        case 2:
                            Console.WriteLine("힘 포션을 먹었습니다.");
                            stpotion.Use(player);
                            Console.WriteLine($"현재 공격력 : {player.Attack}");
                            break;
                        case 3:
                            Console.WriteLine("힐 포션을 먹었습니다.");
                            hppotion.Use(player);
                            Console.WriteLine($"현재 공격력 : {player.Health}");
                            break;
                        default:
                            Console.WriteLine("잘못된 입력입니다.");
                            Thread.Sleep(1000);
                            StartStage1();
                            break;
                    }
                    Thread.Sleep(1000);
                    if (goblin.Health <= 0)
                    {
                        goblin.IsDead = true;
                        Console.WriteLine("고블린을 무찔렀습니다!");
                    }
                    else
                    {
                        Console.WriteLine("고블린의 턴!!");
                        player.Health -= goblin.Attack;
                        Console.WriteLine($"{goblin.Attack}에 피해를 입었습니다");
                        Console.WriteLine($"플레이어의 남은 체력 : {player.Health}");
                        if (player.Health <= 0)
                        {
                            player.IsDead = true;
                            Console.WriteLine("플레이어가 사망하였습니다.");
                        }
                    }
                    Thread.Sleep(1000);
                    Console.Clear();
                }
                while (!player.IsDead && !goblin.IsDead);
            }//startStage1()
            static public void StartStage2()
            {
                Console.Clear();
                player = new Warrior("워리어", 50, 5);
                dragon = new Dragon("드래곤", 50, 10);
                stpotion = new StrengthPotion("힘 포션");
                hppotion = new HealthPotion("힐 포션");
                Console.WriteLine("게임이 시작됩니다!");
                Console.WriteLine(" 2단계 스테이지 (vs 드래곤)\n");
                Console.WriteLine(" 플레이어 ");
                Console.WriteLine($"이름 : {player.Name} ");
                Console.WriteLine($"공격력 : {player.Attack}, 체력 : {player.Health}\n ");
                Console.WriteLine(" 드래곤 ");
                Console.WriteLine($"이름 : {dragon.Name} ");
                Console.WriteLine($"공격력 : {dragon.Attack}, 체력 : {dragon.Health}\n ");
                do
                {
                    Console.WriteLine("플레이어의 턴!!");
                    Console.WriteLine("원하는 행동을 골라 보세요!");
                    Console.WriteLine("1.공격");
                    Console.WriteLine("2.힘 포션 먹기");
                    Console.WriteLine("3.힐 포션 먹기");
                    int playerinput = int.Parse(Console.ReadLine());
                    switch (playerinput)
                    {
                        case 1:
                            Console.WriteLine("몬스터를 공격합니다.");
                            dragon.Health -= player.Attack;
                            Console.WriteLine($"{player.Attack}에 피해를 주었습니다");
                            Console.WriteLine($"드래곤의 남은 체력 : {dragon.Health}\n");
                            break;
                        case 2:
                            Console.WriteLine("힘 포션을 먹었습니다.");
                            stpotion.Use(player);
                            Console.WriteLine($"현재 공격력 : {player.Attack}");
                            break;
                        case 3:
                            Console.WriteLine("힐 포션을 먹었습니다.");
                            hppotion.Use(player);
                            Console.WriteLine($"현재 공격력 : {player.Health}");
                            break;
                        default:
                            Console.WriteLine("잘못된 입력입니다.");
                            Thread.Sleep(1000);
                            StartStage2();
                            break;
                    }
                    Thread.Sleep(1000);
                    if (dragon.Health <= 0)
                    {
                        dragon.IsDead = true;
                        Console.WriteLine("드래곤을 무찔렀습니다!");
                    }
                    else
                    {
                        Console.WriteLine("드래곤의 턴!!");
                        player.Health -= dragon.Attack;
                        Console.WriteLine($"{dragon.Attack}에 피해를 입었습니다");
                        Console.WriteLine($"플레이어의 남은 체력 : {player.Health}");
                        if (player.Health <= 0)
                        {
                            player.IsDead = true;
                            Console.WriteLine("플레이어가 사망하였습니다.");
                        }
                    }
                    Thread.Sleep(1000);
                    Console.Clear();
                }
                while (!player.IsDead && !dragon.IsDead);
            }//startStage2()
        }// class stage
    }//~
}//~

정확하게 과제에서 요구하던 게임은 아니지만, 뭔가 코드 작성의 속도가 늘었다는 걸 체감 해버렸다.

이게 반복학습의 결과인가?라고 느끼던 찰나 2시 5분이 되어 서둘러 zoom에 접속해 팀프로젝트 관련 발제를 지켜보았다.

내용은 그간 진행해 온 개인프로젝트 TextDungeon 그리고 지금껏 만들던 TextGame의  합 + 발전이었다.

발제가 끝난 뒤 서둘러 팀원들과  회의를 하고 와이어프레임까지 나아갔다.(시간이 촉박해!)

 

8조 와이어프레임

 

와이어프레임은 글로만 설명하는 것보다 눈으로 구성을 볼 수 있기 때문에 훨씬 단계 별 진행하는데 도움이 된다.

그리고 이어서 발전 단계에 들어가기 전인 기본이 되는 코드를 내가 작성하기로 했다.

이미 작성해 둔 코드를 합치는 일이라 어려울 것이 없다고 당시 생각했는데, 팀적으로 코드컨벤션이나,

팀원들이 보기에 내가 작성한 코드가 지저분해 보이고 가독성이 떨어진다고 느낄까 봐 먼가? 먼가다.

베이스를 만드는 것이기 때문에 평소보다 깔끔하게 만들어 줘야 한다는 생각이 지배적이어서 회의가 더 필요할 거

같다고 느껴졌다.

 

P.S 회의는 정말 아무리 해도 부족해..

 

 

반응형