C# TextRPG 1

정제로·2023년 8월 18일
0

C#

목록 보기
22/30
post-thumbnail

일단 오늘까지 구현한 목록을 보자

구현목록

  1. 게임 시작 화면
    • 게임 시작시 간단한 소개 말과 마을에서 할 수 있는 행동을 알려줍니다.
    • 원하는 행동의 숫자를 타이핑하면 실행합니다.
      1 ~ 2 이외 입력시 - 잘못된 입력입니다 출력
  2. 상태보기
    • 캐릭터의 정보를 표시합니다.
    • 7개의 속성을 가지고 있습니다.
      레벨 / 이름 / 직업 / 공격력 / 방어력 / 체력 / Gold
    • 처음 기본값은 이름을 제외하고는 아래와 동일하게 만들어주세요
    • 이후 장착한 아이템에 따라 수치가 변경 될 수 있습니다.
    1. 인벤토리
    • 보유 중인 아이템을 전부 보여줍니다.
      이때 장착중인 아이템 앞에는 [E] 표시를 붙여 줍니다.
    • 처음 시작시에는 2가지 아이템이 있습니다.

해야할것

장착 관리

  • 장착관리가 시작되면 아이템 목록 앞에 숫자가 표시됩니다.
  • 일치하는 아이템을 선택했다면 (예제에서 1~2선택시)
    • 장착중이지 않다면 → 장착
      [E] 표시 추가
    • 이미 장착중이라면 → 장착 해제
      [E] 표시 없애기
  • 일치하는 아이템을 선택했지 않았다면 (예제에서 1~3이외 선택시)
    • 잘못된 입력입니다 출력
  • 아이템의 중복 장착을 허용합니다.
    • 창과 검을 동시에 장착가능
    • 갑옷도 동시에 착용가능
    • 장착 갯수 제한 X

오늘 배운것


사용자의 키 입력 받기!

ConsoleKeyInfo info = Console.ReadKey();

구조체 ConsoleKeyInfo를 이용해, info라는 변수를 만들고,
ReadKey로 사용자의 입력값을 저장!


생성자로 객체 만들기!

public class Player //플레이어 클래스
{
    public string name { get; }
    public string job { get; }
    public int lv { get; }
    public int att { get; }
    public int def { get; }
    public int hp { get; }
    public int currentGold { get; }

public Player(string _Name, string _Job, int _Lv, int _Att, int _Def, int _Hp, int _CurrentGold)
    {
        name = _Name;
        job = _Job;
        lv = _Lv;
        att = _Att;
        def = _Def;
        hp = _Hp;
        currentGold = _CurrentGold;
    }
}

------------
//maingame클래스
```cs
public static Player player;

static void Data()
{
	player = new Player("Tonton", "전사", 01, 10, 5, 100, 1500);
}

이런식으로 플레이어 클래스에서 생성자를 만들어, 메인메서드가 있는 클래스에서 초기화 후 객체생성을 해준다.
이렇게 하는 이유는 크게 3가지 있다.

  1. 객체 초기화:
    생성자를 통해 플레이어 객체를 생성할 때 필요한 정보를 한 번에 전달하여 초기화할 수 있다.
    이로 인해 객체 생성과 초기화를 분리하지 않고도 더 명확하게 초기화할 수 있다.
  1. 불변성 보장:
    생성자를 통해 초기화한 속성들은 읽기 전용으로 설정하면서 객체의 불변성(immutable)을 보장할 수 있다.
    이로써 객체의 상태가 변경되지 않도록 할 수 있다.
  1. 안정성과 유연성:
    생성자를 사용하면 객체의 필수 정보를 누락 없이 전달받아 초기화하므로, 런타임 시 오류를 방지하고 안정성을 높일 수 있다.
    또한 생성자 오버로딩을 통해 다양한 초기화 방법을 제공하여 유연성을 확보할 수 있다.

인벤토리 클래스에 장비 입력받기(?)

일단 인벤토리에 장비를 넣기위해선 2가지의 클래스가 필요하다

class Inven //인벤토리 클래스 
{
    private List<EquipItem> equipItemList; // 1번

    public Inven()
    {
        equipItemList = new List<EquipItem>(); //2번
    }

    public void Items(EquipItem equipItem) //3번
    {
        equipItemList.Add(equipItem);
    }
}

class EquipItem // 장비목록
{
    public string itName { get; }
    public int itAbility { get; }
    public string itType { get; }
    public string itInfo { get; }

public EquipItem(string _ItName, int _ItAbility, string _ItType, string _ItInfo)
    {
        itName = _ItName;
        itAbility = _ItAbility;
        itType = _ItType;
        itInfo = _ItInfo;
    }
}

---------------------------------
// maingame클래스
public static Player player;
public static Inven equipInven; // 인벤클래스 초기화
public static EquipItem equipItem1;
public static EquipItem equipItem2;

static void Data()
{
	player = new Player("Tonton", "전사", 01, 10, 5, 100, 1500);
    
    equipInven = new Inven();// 객체화

    equipItem1 = new EquipItem("무쇠 갑옷", 5, "방어", "무쇠로 만들어져 튼튼한 갑옷입니다."); //장비 객체화
    equipItem2 = new EquipItem("낡은 검", 2, "공격", " 쉽게 볼 수 있는 낡은 검 입니다."); //장비 객체화
    equipInven.Items(equipItem1); // EquipList함수의 인자값으로 넣어주기
    equipInven.Items(equipItem2); // EquipList함수의 인자값으로 넣어주기 
}

인벤토리를 객체화할 클래스와 장비를 객체화할 클래스 두개가 필요하다
장비는 위의 플레이어와 같이 생성자로 만들어, 오류가 없도록 만들었다.

이제 설명을 하겠다

1번

인벤토리객체에 장비를 담을 수 있게, 배열을 만들어준다.
하지만 일반 배열로는 장비의 status를 담을 수 없기에,
list로 배열을 선언해준다

2번

Inven클래스를 생성자를 이용하여 1번에서 선언한 list배열을 동적할당 시켜준다

3번

inven클래스의 메서드 Items의 인자값으로 객체화된 equipItem1,2를 넣어준다.
함수내부에서는 인자값(여기선 각 개체)이 들어오면, 그 인자값을 1번에서 생성된 배열에 추가해준다.

이후 출력

for (int i = 0; i < equipItemList.Count; i++)
{
    Console.WriteLine($" {i+1}. {equipItemList[i].itName}    | {equipItemList[i].itType} + {equipItemList[i].itAbility}    | {equipItemList[i].itInfo}");
    Console.WriteLine();
}

출력이 잘된다!

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글

관련 채용 정보