<회의 사항>
- 오류수정 및 클래스 정리
- 추가 구현
- 콘솔 꾸미기
- 오류
- 몬스터 랜덤값을 불러왔을 때, 같은 몬스터 동시 타겟팅이 되는 현상.- 장비 착용 시 옵션이 반영되지 않는 현상.- 데미지를 입었을 때, 방어력이 적용되지 않는 현상.
몬스터의 경우, 리스트에 들어있는 몬스터를 불러왔을 때 객체를 새로 생성해주지 않아서 그런 것이었다. 생성자를 통해 몬스터 객체를 새로 생성해주었다.
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].달리기();
}
}
- 클래스는 상태와 동작을 가집니다.
- 예제에서는 사람의 개성을 나타내는 name, age, inventory가 상태입니다.
- 모든 사람이 공통적으로 가지는 동작인 숨쉬기(), 걷기(), 달리기()가 동작입니다.
- 클래스는 그 자체로 값이 되지 않고 이를 바탕으로 만들어진 객체가 실제 값이다.
- 예제에서는 조물주의 사람만들기 기능을 통해 네 명의 사람을 만듭니다.
- 사람 그 자체는 실존하는 값이 아니고, 김철수, 박개발, 이새발, 박엘리자베스가 실존하는 값입니다.
- 조물주는 단 하나만 존재해도 되는, 기능만을 담당하는 클래스 => 정적클래스
- Game에서 조물주의 개체를 생성하지는 않습니다. 클래스로부터 바로 함수를 참조할 수 있습니다.
- static class 내부에 있는 모든 변수, 함수는 static으로 선언됩니다.
출처 <김세진님> 예시 감사합니다...
'부트캠프 > Study' 카테고리의 다른 글
<Unity> 입문 - 2D 게임 개발(2) (2) | 2023.11.27 |
---|---|
<Unity> 입문 - 2D 게임 개발(1) (1) | 2023.11.24 |
C# 문법 4강(4) - 고급 자료형 및 기능 (0) | 2023.11.16 |
C# 문법 4강(3) - 델리게이트, 람다 및 LINQ (0) | 2023.11.16 |
C# 문법 4강(2) - 예외 처리 및 값형과 참조형 (1) | 2023.11.15 |