전체 글

YMS Games 의 블로그입니다
· Game Theory
아이디어 선택하기 개발을 도중에 포기하지 않고 끝까지 해내기 위해선 만들게임을 잘 선정해야 한다. 내 경험상 이런 게임들은 세 가지 중 하나이다. 내가 만들고 싶은 게임, 만들어졌으면 하는 게임, 내가 잘 만들 수 있는 게임 "내가 만들고 싶은 게임"은 내가 생각했을때 게임 메커니즘이 재미있을 거 같은 게임이다. 흔히 Dream Game이라고도 하는 게임들이다. 이러한 게임들은 결과와는 상관없이 게임을 만드는 과정이 즐거운 게임들이다. "만들어졌으면 하는 게임"은 만드는 과정을 즐겁지 않을지라도 만들어진 결과는 재미있을 것 같은 게임들이다. 예를 들어 GTA, 파이널판타지, 스타크래프트의 세계관이 합쳐진 게임 같은 것들 말이다. "내가 잘 만들 수 있는 게임"은 만드는 과정이 즐겁지 않을 수도 있고 만들..
· Language/C#
서론 C/C++ 언어는 힙에 객체를 할당하기 위해 비싼 비용을 치르는 문제를 갖고 있다. C/C++ 기반의 프로그램을 실행하는 C-Runtime은 객체를 담기 위한 메모리를 여러 개의 블록으로 나눈 뒤, 이 블록을 링크드 리스트로 묶어 관리한다. 가령 어떤 객체를 힙에 할당하는 코드가 실행되면, C-Runtime은 메모리 링크드 리스트를 순차적으로 탐색하면서 해당 객체를 담을 수 있을만한 여유가 있는 메모리 블럭을 찾는다. 적절한 크기의 메모리 블록을 만나면 프로그램은 이 메모리 블록을 쪼개서 객체를 할당하고 메모리 블록의 링크드 리스트를 재조정한다. 단순히 메모리 공간에 데이터를 집어넣는 것이 아니라 공간을 “탐색”하고 “분할” 하고 “재조정”하는 오버헤드가 필요하다는 것이다. C#의 CLR은 자동 메..
컴퓨터는 내부적으로 모두 숫자다. 고로 문자도 모두 숫자다. 문자를 숫자에 매칭시키는 여러 규약들이 존재하는데, 이제부터 자주 쓰이는 규약들을 살펴 보자. 아스키(ASCII, American Standard Code for Information Interchange) 아스키는 영어 알파벳과 기호들을 컴퓨터에서 표현하는 규약으로 총 128개의 문자를 1바이트를 이용하여 표현한다. 이름에서 알 수 있듯이 아스키는 영어만 지원한다. 영어권 사람들에겐 상관없겠지만 다른 언어권 사람들은 사용하기 불편하다. (아래의 사이트에서 아스키 테이블을 확인할 수 있다.) ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal ASCII Table ASCII stand..
· Language/C#
ref, out 키워드를 사용하면 매개변수를 "참조에 의한 전달(pass by reference)" 을 할수있다. using System; namespace RefReturn { class MainApp { public static void Swap(int a, int b) { int temp = b; b = a; a = temp; } static void Main(string[] args) { int x = 3; int y = 4; Console.WriteLine($"x:{x}, y:{y}"); Swap(x, y); Console.WriteLine($"x:{x}, y:{y}"); } } } 위 코드는 Swap() 함수의 두 매개변수의 교환을 수행하지 못한다. 매개변수도 메소드 외부에서 메소드 내부로 데..
· Language/C#
확장 메소드는 기존 클래스의 기능을 확장하는 기법이다. 기반 클래스를 물려받아 파생 클래스를 만든 뒤 여기에 필드나 메소드를 추가하는 상속과는 다르다. 확장 메소드를 선언하는 방법은 다음과 같다. static 한정자를 이용해 클래스를 선언한다. static 한정자를 이용해 메소드를 선언한다. 메소드의 첫번째 매개변수는 반드시 this키워드와 함께 확장하고자 하는 클래스의 인스턴스여야한다. 그 뒤에 실제 확장 메소드를 호출할때 전달할 매개변수를 선언한다. 아래의 코드는 확장 메소드 선언의 예시이다. public static class Vector2Extension { public static int Half(this Vector2 myVec2) { Vector2 result = myVec2; return ..
· Language/C#
For의 컬렉션 접근 방법 for문은 콜렉션의 데이터에 직접 접근하여 해당 리스트의 값을 수정할 수 있습니다. List items = new List() { new Item("Sword"), new Item("Gun") }; for (int i = 0; i < items.Count; ++i) { items[i] = new Item("None"); Console.WriteLine(items[i].Name); } // Result None None Foreach의 콜렉션 접근 방법 foreach문은 컬렉션의 복사본에 접근합니다. 복사본의 데이터들은 원래 컬렉션의 데이터들을 참조하고 있기 때문에 데이터 안에 있는 값을 수정하는 것은 문제가 되지 않지만, 데이터 그 자체를 바꾸는 것은 불가능합니다. List i..
YMS Games
YMS Games