<회의 사항>

  1. 오류수정 및 클래스 정리
  2. 추가 구현
  3. 콘솔 꾸미기

 

  • 오류

- 몬스터 랜덤값을 불러왔을 때, 같은 몬스터 동시 타겟팅이 되는 현상.- 장비 착용 시 옵션이 반영되지 않는 현상.- 데미지를 입었을 때, 방어력이 적용되지 않는 현상.

 

몬스터의 경우, 리스트에 들어있는 몬스터를 불러왔을 때 객체를 새로 생성해주지 않아서 그런 것이었다. 생성자를 통해 몬스터 객체를 새로 생성해주었다.

public static List<Monster> RandomMonsters()
{
    List<Monster> monsters = new List<Monster>
    {
        new Monster("변이 쥐", 100, 100, 1, true),
        new Monster("다친 경비 견", 100, 100, 1, true),
        new Monster("실험체 태아", 1, 20, 1, true),
        new Monster("슬라임", 1, 10, 1, true)
    };

    List<Monster> selectedMonsters = new List<Monster>();//load list
    Random random = new Random();//random

    int maxMonsters = random.Next(1, monsters.Count); //반복문에 사용될 몬스터 생성 최댓값 랜덤 생성

    for (int i = 0; i < maxMonsters; i++)
    {
        Monster selectedMonster = monsters[random.Next(monsters.Count)];
        selectedMonsters.Add(new Monster(selectedMonster));
    }
    return selectedMonsters;
}

 

장비 옵션이 적용되지 않는 이유는 스탯창에서 더해주기만 하고 그 값을 전투 때 불러오지 않았다. 방어력 역시 스탯창에 구현만 해두고 값을 가져오지 않아서 그런 것이었다.

 

  • 콘솔 꾸미기
// 윈도우 콘솔창 크기 고정
Console.SetWindowSize(x, y);

// 커서 위치
Console.SetCursorPosition(10,10);

// 커서 없애기
Console.CursorVisible = false;

 

저번에 올렸던 콘솔 배경과 글씨 등의 색을 바꾸는 방법과 콘솔창 크기 고정 및 커서 관련 메서드를 통해 콘솔창을 꾸몄다.

게임 시작화면의 로고가 가운데 오도록 마진값과 텍스트길이로 로고가 가운데 오도록 한 뒤, 로고가 빨강, 노랑, 초록, 파랑, 마젠타 색 순으로 반복하여 변하도록 했다.

 

<마치며>

이번 프로젝트를 진행하며 클래스와 객체에 대한 이해도가 매우 낮다는 사실을 깨달았다.

공부할 때는 분명 이해한 것 같았는데 막상 남에게 설명하려하니 말문이 막혔다. 객체는 알면 알 수록 더 모르겠다. 이 부분은 주말에 좀 더 공부해보아야 할 것 같다.

// 일반 클래스
public class 사람 {
    // ====== 사람 개개인의 특징을 나타낼 수 있는 것 = 상태 = 변수 ======
    public string name;
    public int age;
    public List<아이템> inventory;
    // ==================================================================

    // ====== 사람 만드는 생성자 ======
    // 자...객체가 만들어질거야...매개변수들 초기화해서 준비해...
    public 사람(string name, int age) {
        this.name = name;
        this.age = age;
        inventory = new List<아이템>();
    }
    // ================================


    // ====== 사람이라면 할 수 있는 기능 = 함수 = 메소드 ======
    public void 숨쉬기() {
        // 대충 숨쉬는 코드;
    }
    public void 걷기() {
        // 대충 걷는 코드;
    }
    public void 달리기() {
        // 대충 달리는 코드;
    }
    // ========================================================
}

// 정적 클래스와 객체 생성
public static class 조물주 
{
	// 객체 생성
    public static List<사람> 세계사람목록 = new List<사람>();
    public static 사람 사람만들기(string name, int age) {
        사람 새로운사람 = new 사람(name, age);
        세계사람목록.Add(새로운사람);
        return 새로운사람;
    }
    public static void 사람죽이기(사람 죽일사람) {
        세계사람목록.Remove(죽일사람);
    }
    public static int 세계인구() {
        return 세계사람목록.Count;
    }
    public static void 타노스() {
        for (int i = 0; i < 세계사람목록.Count / 2; i++) {
            사람죽이기(세계사람목록[i]);
        }
    }
}

// 정적 클래스
public static class Game {
    // 게임을 실행하면 여기서부터 실행됩니다.
    public static void Main() {
        조물주.사람만들기("김철수", 20);
        조물주.사람만들기("박개발", 21);
        조물주.사람만들기("이새발", 22);
        Console.WriteLine("세계 인구: " + 조물주.세계인구());          // 콘솔에 "세계 인구: 3" 이 출력됨.
        조물주.사람만들기("박엘리자베스", 10232);
        조물주.타노스();
        Console.WriteLine("세계 인구: " + 조물주.세계인구());          // 콘솔에 "세계 인구: 2" 가 출력됨.

        조물주.세계사람목록[0].숨쉬기();
        조물주.세계사람목록[0].달리기();

    }
}
  1. 클래스는 상태와 동작을 가집니다.
  2. 예제에서는 사람의 개성을 나타내는 name, age, inventory가 상태입니다.
  3. 모든 사람이 공통적으로 가지는 동작인 숨쉬기(), 걷기(), 달리기()가 동작입니다.
  4. 클래스는 그 자체로 값이 되지 않고 이를 바탕으로 만들어진 객체가 실제 값이다.
  5. 예제에서는 조물주의 사람만들기 기능을 통해 네 명의 사람을 만듭니다.
  6. 사람 그 자체는 실존하는 값이 아니고, 김철수, 박개발, 이새발, 박엘리자베스가 실존하는 값입니다.
  7. 조물주는 단 하나만 존재해도 되는, 기능만을 담당하는 클래스 => 정적클래스
  8. Game에서 조물주의 개체를 생성하지는 않습니다. 클래스로부터 바로 함수를 참조할 수 있습니다.
  9. static class 내부에 있는 모든 변수, 함수는 static으로 선언됩니다.

출처 <김세진님> 예시 감사합니다...

 

 

+ Recent posts