Player Class
// 레벨업 메서드 public void LevelUp() { // 레벨업시 체력10, 공격력5, 방어력1 증가 this.Level++; this.Health += 10; this.AttackDamage += 5; this.Defense += 1; }
LowClass(하급던전) 메서드
else if (Ork.Health <= 0) { // 보스 체력이 0보다 적어질경우 대비 0으로 고정 Ork.Health = 0; Console.WriteLine("{0}을 잡았습니다!", Ork.Name); // Player에게 Gold 추가 player.Gold += 500; Console.WriteLine("500Gold를 얻었습니다."); Console.WriteLine(""); // 플레이어 체력 회복 player.Health = firstHealth; // Player Level Up player.LevelUp(); Console.WriteLine("Level UP !!! Level : {0} -> Level : {1} ", player.Level - 1, player.Level); // 대기시간 Thread.Sleep(2000); // 몬스터 사망처리 isMonster = false; // 메인화면으로 이동 _gameManager.MainScene(); break; }
몬스터와 전투시 Player의 방어력이 Monster의 공격력보다 높으면 Player의 체력이 회복됨
Monster의 방어력이 Player의 공격력보다 높으면 Monster의 체력이 회복됨
Player Class
// player 공격 메서드 public int playerAttack(Monster enemy) { if (this.AttackDamage < enemy.Defense) return 0; // 몬스터의 방어력이 플레이어의 공격력보다 높으면 0으로 변화없음 else return this.AttackDamage - enemy.Defense; }
Enemy Class
// Enemy 공격 메서드 public int enemyAttack(Player player, Monster monster) { if (player.Defense > monster.AttackDamage) return 0; else return monster.AttackDamage - player.Defense; }
LowClass(하급던전) 메서드
Console.WriteLine("{0}에게 {1}의 데미지를 입혔다!", Goblin.Name, (player.AttackDamage - Goblin.Defense) < 0 ? 0 : (player.AttackDamage - Goblin.Defense)); Goblin.Health -= player.playerAttack(Goblin); // player 공격 메서드 Thread.Sleep(100); Console.WriteLine(""); Console.WriteLine("{0}이 {1}한테 {2}의 데미지를 입혔다...", Goblin.Name, player.Name, (Goblin.AttackDamage - player.Defense) < 0 ? 0 : (Goblin.AttackDamage - player.Defense)); player.Health -= _enemy.enemyAttack(player, Goblin); // Enemy 공격 메서드
**최적화 필요**
던전입장시 메서드 최상단에 Player의 체력을 받아옴
int firstHealth = player.Health;
던전에서 사망 || 도망 || 클리어 시에 원래 체력을 다시 넣음
player.Health = firstHealth;
클리어 시에 체력회복을 먼저 실행시키고 Level Up메서드를 실행해야함.
(그래야 최대체력이 늘어남)
OrderBy, OrderByDescending 사용
LINQ 사용
두 가지 방법으로 각각 적용해보며 사용법을 익힘
GameManager Class (Inventory 메서드)
case ConsoleKey.DownArrow: // OrderBy를 이용한 이름 내림차순 정렬 player.inventory = player.inventory.OrderBy(item => item.Name).ToList(); Inventory(); break; case ConsoleKey.UpArrow: // OrderByDescending를 이용한 이름 오름차순 정렬 player.inventory = player.inventory.OrderByDescending(item => item.Name).ToList(); Inventory(); break; case ConsoleKey.RightArrow: // LINQ를 이용한 아이템 능력치 내림차순 정렬 player.inventory = (from item in player.inventory orderby item.Effect select item).ToList(); Inventory(); break; case ConsoleKey.LeftArrow: // LINQ를 이용한 아이템 장비종류(Enum)(Swrod, Armor) 오름차순 정렬 player.inventory = (from item in player.inventory orderby item.equipments descending select item).ToList(); Inventory(); break;
차후 더 분석해서 나만의 글로 정리가 필요 (LINQ, ★람다식)
메서드 | 설명 |
---|---|
Orderby | 오름차순 |
OrderByDescending | 내림차순 |
ThenBy | 오름차순 |
ThenByDescending | 내림차순 |
하나의 프로퍼티를 OrderBy할때는 Orderby 또는 OrderByDescending를 사용
복수의 프로퍼티를 OrderBy할때는 OrderBy(람다식).ThenBy(람다식)를 사용
Json을 이용하여 저장 및 불러오기 구현
Title Scene에서 시작하기를 누르면 새로 시작, 이어하기를 누르면 정보 불러오기
GameManager Class (TitleScene 메서드)
// 이어하기(2번)을 누를시 case ConsoleKey.D2: // C:\JsonTest 경로 안에있는 save.json 파일을 string read에 넣는다.(파일 읽기) string read = File.ReadAllText(@"C:\JsonTest\save.json"); // json문자열을 Player클래스 객체 player로 변환 player = JsonConvert.DeserializeObject<Player>(read); Console.WriteLine("불러오는중 입니다."); Thread.Sleep(1500); MainScene(); break;
GameManager Class (MainScene 메서드)
case ConsoleKey.D6: // Json //player클래스 객체 player를 json문자열로 변환 string save = JsonConvert.SerializeObject(player); // Json 저장경로 및 저장(파일로 저장) ile.WriteAllText(@"C:\JsonTest\save.json", save.ToString()); Console.WriteLine("저장중 입니다..."); Thread.Sleep(1000); MainScene(); break;
누겟(Nuget) 패키지관리자 에서 "Newtonsoft.Json"을 설치후 사용한 'Json'
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
출저 Json
보완할점