2025/01 18

C#으로 만드는 텍스트 RPG (2)

두번 째 미션을 해결했다. 이번에도 우선 구현하는데 초점을 뒀고 어떻게하면 더 효율적인지 고민해봤다. 그럼에도 개선점이 있어보이지만 앞으로 유니티로 발전시키면서 개선해나갈 생각이다. 아이템기능을 추가하는 미션이었는데 리스트와 딕셔너리를 활용해 인벤토리, 아이템을 관리하는 기능을만드는 것이었다.  미션 2: 리스트와 딕셔너리를 활용한 아이템목표: List와 Dictionary를 활용해 데이터를 관리한다.미션:Item 클래스를 만들고, 이름과 효과를 프로퍼티로 추가해라.플레이어의 인벤토리를 관리하는 List을 생성해라.아이템 사용 상태를 출력하는 코드를 작성해라. 아이템 4가지의 기획이다. 아이템 종류 기획1. 체력 회복 물약이름: 생명의 물약효과: 플레이어의 체력을 50 회복.설명: "마시자마자 체내에서 ..

텍스트 Rpg - C# 2025.01.31

C#으로 만드는 텍스트 RPG (1)

먼저 첫번째 미션을 해결했다.우선 플레이가 가능하게 구현하는데에 초점을 맞췄다. 앞으로 미션을 해나가면서 개선해나갈 것이다.  미션 1: 기본 구조와 클래스 설계목표: 클래스와 객체를 사용하여 기본 게임 구조를 설계한다.미션:Player 클래스에 이름, 레벨, 체력, 공격력을 프로퍼티로 추가하고, Attack 메서드를 만들어라.Monster 클래스에 이름, 체력, 공격력을 추가하고, TakeDamage 메서드를 만들어라.플레이어와 몬스터가 서로 공격하며 체력을 깎는 간단한 로직을 작성해라. 첫번째 미션은 게임의 기본로직을 만드는 것이다.  public class Player{ int _hp=100; int _exp = 0; public string Name { get; set; } ..

텍스트 Rpg - C# 2025.01.25

C#으로 만드는 텍스트 Rpg (0)

우선 이 프로젝트는 C# 강의를 듣고 C#문법에 대해 이해해보고 사용해보고자 시작하는 프로젝트이다. 기획은 chatgpt를 이용했다. 어떤 기능을 넣을지, 내용과 텍스트는 어떻게할지, 단계별로 어떤 기능을 구현할지지, 그리고 그 기능을 어떤 문법이나 특성을 활용하여 만들지 등을 조언받았다.  이 프로젝트의 목적은 오직 C#의 특성, 문법등을 직접 사용해서 게임에 적용해보고 이해하는데 있다. 또한 단계별로 직접코드 작성 후, gpt가 알려주는 테스트방식을 사용해볼 예정이다.  이후, 유니티로 기능을 옮기고 유니티에 맞게 조금씩 바꿔가며 유니티문법과 기능도 익히면서 텍스트 rpg에 Ui 등을 넣고 좀 더 게임답게 만들어볼 생각이다. 그 중, 첫 단계인 콘솔로 텍스트 rpg 기능을 구현해보려 한다.  우선 마..

텍스트 Rpg - C# 2025.01.24

예외처리

예외처리는 말 그대로 예외상황이 발생했을 때의 처리를 도와주는 문법이다.  오버플로우나 0으로 나누기 등등 심각한 에러가 발생했을 때도 보통 프로그램이 다운되지만, 이 문법을 사용하면 프로그램이 계속 실행되게끔 유지할 수 있다. try{ if(a/0){}}catch(Exception e){}finally{}이런식으로 try - catch 를 이용해서 예외처리를 하는데, try는 무조건 실행된다. 위 상황처럼 만약 0으로 나누기를 실행한다면 에러가 발생하게 되는데 이 때, catch에서 에러를 받아서 catch 안쪽이 실행된다. 또 finally라는 것은 오류가 생겼든 말든 마지막에 실행하고 싶은 동작이 있다면 이 안에 작성하면 된다.

C# 2025.01.20

delegate (대리자), Event

delegate 대리자, 말 그대로 직접호출하는 대신 특정한 때에, 내가 넘겨준 함수를 실행해주세요. 하고 맡기는 것이다.  delegate 는 함수자체를 형식으로 지정하고 이를 매개변수로 넘겨줄 수 있다. delegate string InfoPrint();void PrintInfo(InfoPrint info){ info();}string TestDelegate(){ Console.WriteLine("Info"); return "Info";}main(){ InfoPrint ip = new InfoPrint(TestDelegate); ip(); PrintInfo(TestDelegate);}먼저 delegate 형식을 선언한다. 함수자체를 형식으로 만드는 것이기에 반환형 stri..

C# 2025.01.20

프로퍼티

클래스의 은닉성을 위해서는 외부에서 어떤 데이터에는 접근하지 못하게 막아야한다. 그럴 때, private 키워드를 사용해 외부에서 접근을 하지 못하게 막고 만약 접근하려면 Get, Set 함수를 만들어서 접근해야한다. 프로퍼티는 이를 간편하게 해주는 문법이다. 먼저 .Get, Set함수를 구현해보겠다.class Person{ string name; public string GetName(){return name;} public void SetName(string n){name=n;}}이처럼 두 개의 함수를 한개의 변수에 대해서 만들어야한다. 그런데 변수가 많아진다면 이러한 함수또한 엄청 많아질 것이다. 그래서 제공하는 문법이 프로퍼티이다. class Person{ string name;..

C# 2025.01.20

인터페이스 ( Interface )

클래스의 상속관계에서 특정 기능은 반드시 자식클래스에서 구현하게끔 강제하는 방법이 있다.  먼저 추상클래스인데, 이는 실체가 없는 클래스를 의미한다. 실체가 없다는 것은 객체로 만들 수 없다는 의미이다.  abstract class Person{ public abstract void Walk();}class Student : public Person{ public override void Walk(){}}abstract 키워드를 사용해 추상클래스와 추상함수를 만들 수 있다. 이 때, Person클래스를 상속하는 클래스는 무조건 Walk를 오버라이드해야 한다.  그런데 C#에서는 다중상속을 지원하지 않는다. 따라서 만약 여러 기능을 상속받은 클래스를 만들고 싶다면 다중상속 대신 interface 를 사용하..

C# 2025.01.19

일반화 ( Generic )

일반화는 클래스나 함수를 만들때 사용할 수 있다. 비슷한 동작을 타입만 다르게하여 구현하고 싶을 때, 여러개의 버전을 만드는 대신 하나의 클래스나 함수로 작성할 수 있게끔 도와주는 문법이다.  class MyClass{ T type; public T GetClassType() { return type; }}다음과 같은 방식으로 로 타입을 사용할 수 있다. T라는 타입이 지정되면 T를 사용한 곳이 해당 타입으로 치환된다.  main{ MyClass mc = new MyClass();}다음과 같은 방식으로 사용할 수 있다. 함수도 마찬가지이다.public void printType(T type){ Console.WriteLine(typeof(type));}위처럼 함수도 일반화함수로..

C# 2025.01.19

배열, List, Dictionary

배열이란 특정타입의 변수 여러개를 쉽게 저장하고 관리할 수 있는 자료구조이다.  만약 int 변수 20개를 사용해야한다고 가정해보자.int a1;int a2;int a3;...int a20;일일이 이렇게 선언하고 값을 수정할 때도 20번을 이렇게 타이핑해야한다.  이럴 때 배열을 사용한다.int[] arr = new int[20];// int[] arr = new int[20]{1, 2, 3, 4,....20};// int[] arr = new int[]{1, 2, 3, 4,....20};// int[] arr = {1, 2, 3, 4,....20};배열을 초기화하는 방법은 이렇게 4가지이다. 이렇게 한번에 여러개의 변수를 관리가능하며, 이는 반복문을 통해 쉽게 수정 및 접근이 가능하게 된다.  다음은 ..

C# 2025.01.19