C# 문법 - 4주차 과제(2)

이준호·2023년 11월 14일
0
post-custom-banner

챕터 4 : 과제



📌Console Text-RPG Game

1. Level UP기능 && Level UP에 따른 스탯 증가

  • 던전을 클리어 할 때 마다 Level Up(던전의 난이도에 따라 다름)
  • Level Up을 하면 체력, 공격력, 방어력이 오름

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;
}

2. 전투버그

  • 몬스터와 전투시 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 공격 메서드
  • **최적화 필요**

3. 던전 사망 || 도망 || 클리어 시에 체력회복

  • 던전입장시 메서드 최상단에 Player의 체력을 받아옴
    int firstHealth = player.Health;

  • 던전에서 사망 || 도망 || 클리어 시에 원래 체력을 다시 넣음
    player.Health = firstHealth;

  • 클리어 시에 체력회복을 먼저 실행시키고 Level Up메서드를 실행해야함.
    (그래야 최대체력이 늘어남)


4. 아이템 정렬 ( LINQ, 람다식 )

  • 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, ★람다식)

출저 LINQ
출저 OrderBy

메서드설명
Orderby오름차순
OrderByDescending내림차순
ThenBy오름차순
ThenByDescending내림차순
  • 하나의 프로퍼티를 OrderBy할때는 Orderby 또는 OrderByDescending를 사용

  • 복수의 프로퍼티를 OrderBy할때는 OrderBy(람다식).ThenBy(람다식)를 사용


5. Json

  • 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"도 더 공부가 필요 ★

출저 Json

공부 Microsoft Json

보완할점

  • 저장된 정보가 존재해야 불러오기
  • 저장된 정보를 덮어씌울건지 체크

6. Cursor

profile
No Easy Day
post-custom-banner

0개의 댓글