- [ C# ]C# #17 TextRPG - 턴제 전투2023-08-25 19:49:18개요 4주차 과제인 턴 기반 콘솔 RPG 게임이다. 인터페이스 개념을 활용하여 캐릭터와 아이템을 체계적으로 관리하는 것을 중심으로 개발을 진행하였다. 스테이지가 시작되면 플레이어와 몬스터가 교대로 턴을 진행하며 스테이지 클리어 시 더 강한 몬스터가 나오는 구조이다. 플레이어나 몬스터 중 하나가 죽으면 스테이지가 종료된다. 설명 ICharacter 인터페이스: 캐릭터의 기본 속성을 정의하며 모든 캐릭터 클래스는 이 인터페이스를 구현한다. Warriror 클래스: 플레이어의 캐릭터를 나타낸다. StagesCleared라는 속성을 통해 클리어한 스테이지 수를 확인한다. TakeDamage 메서드를 통해 피해를 받는다. Monster 클래스: Warrior 클래스와 같이 ICharacter 인터페이스를 구현하며..
- [ C# ]C# #16 델리게이트, 람다, LINQ, 고급 자료형 및 기능2023-08-24 21:28:54델리게이트(Delegate) 델리게이트는 메서드 참조하는 타입이다. 변수에 메서드를 할당하여 해당 메서드를 참조할 수 있다. 델리게이트는 여러 개의 메서드를 동시에 호출할 수도 있으며 클래스 내에서 발생하는 특정한 상황을 다루는 매커니즘인 이벤트(Event)의 처리를 위해서도 사용된다. //기본 선언 구조 delegate 반환 형식 델리게이트명(파라미터); // 델리게이트 선언 public delegate void EnemyAttackHandler(float damage); // 적 클래스 public class Enemy { // 공격 이벤트 public event EnemyAttackHandler OnAttack; // 적의 공격 메서드 public void Attack(float damage) { ..
- [ C# ]C# #15 인터페이스, 열거형, 예외 처리, 값형과 참조형2023-08-24 20:34:02인터페이스(Interface) 클래스 혹은 구조체간의 공통된 기능을 공유하여 공통된 동작을 정의하는데 사용된다. 다중 상속이 지원되지 않는 C#에서 인터페이스는 다중 상속을 지원하여 더 다양한 동작을 조합하고 수행한다. 클래스와 인터페이스 간에 느슨한 결합을 형성하여 유연한 설계를 가능하게 한다. (느슨한 결합은 각 클래스와 객체들 간의 의존성을 최소화하여 수정, 변경의 영향을 최소화하는 개념이다.) 인터페이스 정의하기 public interface IMovable // 대문자 I를 인터페이스명 앞에 붙힌다 { void Move(int x, int y); // 이동 메서드 선언 } 인터페이스를 구현하는 클래스 생성하기 public class Player : IMovable { public void Mov..
- [ C# ]C# #14 블랙잭2023-08-23 21:22:37개요 3주차 과제 중 블랙잭 게임이다. 구현해야하는 내용은 다음과 같다. 설명 Suit, Rank 열거형: Suit은 카드 무늬를 나타내며 Rank는 카드 숫자를 나타내고 2부터 14까지의 값을 가지고 있다. Card 클래스: 무늬와 숫자를 가지는 한장의 카드를 표현하는 클래스이며 게임에서의 점수를 반환한다. Deck 클래스: 덱을 표현하는 클래스로 여러장의 카드를 리스트로 구성한다. Shuffle 메서드를 통해 카드를 섞고 DrawCard 메서드를 통해 카드 한장을 뽑아 반환한다. Hand 클래스: 플레이어의 패를 나타내는 클래스로 카드를 패에 추가하고 점수를 계산하는 역할을 한다. Player 클래스: 플레이어를 나타내는 클래스로 플레이어의 패를 구성한다. DrawCardFromDeck 메서드를 통해..
- [ C# ]C# #13 알고리즘 기초 32023-08-23 16:51:57병합 오름차순으로 정렬되어 있는 정수 배열을 하나로 병합하는 알고리즘이다. 각 배열의 병합을 통해 만들어진 머지 배열의 길이는 각 배열의 길이의 합과 같다. 각 배열의 첫번째 인덱스의 값을 비교하여 작은 것을 머지 배열에 넣는다. 머지 배열에 들어가지 않은 값과 다른 배열의 다음 인덱스의 값을 비교하여 작은 것을 머지 배열에 넣는다. 머지 배열의 인덱스 k는 값이 넣어졌을 때 무조건 증가하고 비교 후 값이 빠진 쪽 배열의 인덱스(i or j)를 증가시킨다. 위 작업을 둘 중 하나라도 배열의 끝에 도달할 때까지 반복한다. 그 때, 배열이 끝나지 않은 다른 배열의 나머지 값들을 모두 머지 배열에 넣는다. //Input int[] first = { 1, 3, 5 }; int[] second = { 2, 4 }..
- [ C# ]C# #12 TextRPG 42023-08-22 20:46:25변경점 [인벤토리 클래스] 두개로 쓸대없이 나누어져있던 인벤토리 아이템을 보여주는 메서드를 하나로 통합했다. bool형 매개변수를 선언하여 참일때만 아이템 목록 앞에 숫자가 보여지며 인벤토리-장착관리 창에서 호출된다. 외부 라이브러리인 ConsoleTables를 가져와 사용하였다. 이는 쉽게 표 형태를 그려주는 역할을 한다. 각 아이템 별 이름, 효과, 설명을 AddRow을 통해 바로 행 요소에 집어 넣을 수 있다. 이를 통해 더 깔끔한 인벤토리 인터페이스를 구성할 수 있었다. [게임 매니저 클래스] 출력되는 특정한 텍스트의 색상을 변경하였으며, 특정한 동작을 할 때 삡소리가 나오는 기능을 추가하였다. Console.ForegroundColor 메서드와 ConsoleColor.# 메서드를 활용하여 다음에..
- [ C# ]C# #11 TextRPG 32023-08-21 20:38:05변경점 [아이템 클래스] 아이템 정보를 저장하는 새로운 클래스, Item 클래스를 만들었다. 아이템명, 설명, 추가 수치(추가 공격력, 추가방어력)를 기본적인 매개변수로 가지고 있다. 그리고 기존 Inventory 클래스에서 리스트로 관리하던 장착 여부 리스트를 없애고 새로운 클래스의 bool형 매개변수로 선언하였다. [인벤토리 클래스] 이제 Inventory 클래스에서는 Item 클래스의 정보들을 가지고 있는 아이템 리스트를 만든 후에 생성자에서 값들을 할당해야한다. 또한 장착 사인 [E]는 Item 클래스의 bool형 변수 isEquipped에 의해 관리된다. ChangeEquip 메서드에서 또한 isEquipped에 의해 아이템의 장착 상태를 변경할 수 있으며 아이템이 장착 상태인 경우, 공격력/방..
- [ C# ]C# #10 TextRPG 22023-08-20 23:21:30변경점 사용자 입력 처리를 개선하였다. 입력값 검사 메서드는 유효한 입력값의 범위를 두 매개변수를 통해 외부에서 지정할 수있다. 게임 내에서는 정수형 입력값만을 받기 때문에 사용자가 실제 입력한 값을 정수로 변환한다. 그리고, 입력된 문자열이 정수로 변환되면, 프로그램은 이 숫자를 사용하여 조건문을 실행한다. 입력값이 정수로 변환될 수 있는지를 확인하고 변환이 가능한 경우에만 유효한 입력으로 판단한다. 또한, 매개변수에서 지정한 범위 내에서의 정수만 유효한 입력으로 판단한다. 아이템 정보와 장착 시스템을 관리하는 인벤토리 클래스를 만들었다. 아이템들을 저장하는 문자열 리스트 items와 아이템 장착 상태를 저장하는 bool 리스트 equip을 선언하였고 값을 추가하였다. 아이템을 출력하는 루프마다 equ..