2020/06 5

경량 (Flyweight)

게임 프로그래밍 패턴 3장 경량 경량 패턴은 어떤 객체의 수가 너무 많을 때 가볍게 만들기 위해 사용한다. 공통적으로 쓰이는 데이터(고유 상태)는 공유하고, 개별적인 데이터(외부 상태)만 별도로 주어진다. 땅, 숲, 강이 섞인 넓은 지형 구현한다고 했을 때 각 지형 타입에 들어가는 Texture는 고유 상태이고, 각 지형의 서로 다른 position, rotation 값 등이 외부 상태다. # TerrainType.cs public class TerrainType { private Sprite _sprite; private int _movementCost; public Sprite Sprite => _sprite; public int MovementCost => _movementCost; public T..

Design Pattern 2020.06.24

명령 (Command)

게임 프로그래밍 패턴 2장 명령 명령 패턴은 메서드 호출을 실체화(객체화)한 것이다. 객체의 형태로 캡슐화함으로써 해당 메서드는 매개변수로 활용할 수 있게 된다. 게임에서 입력키를 변경하는 예제를 봐보자 # InputController.cs MonoBehaviour에서 Update로 Input을 받는 기본적인 방법이다. using UnityEngine; public class InputController : MonoBehaviour { private void Update() { if (Input.GetKeyDown(KeyCode.X)) Jump(); else if (Input.GetKeyDown(KeyCode.A)) Dash(); else if (Input.GetKeyDown(KeyCode.B)) Fir..

Design Pattern 2020.06.18

1260번: DFS와 BFS

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 기본적인 DFS와 BFS를 구현하는 문제 재귀를 사용하지 않고 반복문으로만 풀어봤다. * 한 노드에 간선이 여러 개일 경우 값이 낮은 노드부터 오름차순으로 방문한다. 1) Input Parsing first = input().split(' ') N = int(first[0])# node의 갯수 M = int(first[1])# 간선의 갯수 V = int(fir..

Day0 - Preparing

30Day Challenges 수년 전 보았던 한 TED 영상에 나온 주제다. 요지는 매우 심플하고 뻔하다. 평소에 해보고 싶었던 것, 관심있던 것을 매일 꾸준히 30일 동안 해보라는 것이다. 중요한 것은 무조건 하루치 목표를 달성하고 잠에 드는 것이다. Speaker의 말대로 약간의 수면부족은 있을 수 있어도, 사실 일상에 큰 영향은 없다. 주제는 거창할 것 없다. 오히려 사소할수록 좋다. 습관을 만들기 위해 쉽게 달성 가능한 수준으로 목표를 세워보자. 꾸준히 하기 위해 흥미롭고, 취미와 관련된 주제가 좋다. 나에겐 지금 시기에 가장 필요하고, 도움이 될 개발 공부가 가장 좋은 주제가 될 것 같다. 당장은 30일 동안 꾸준히 할 수 있을만큼만 목표치를 잡는다. 하루 30분, 어떤 주제든 개발에 관련된 ..

30Day Challenges 2020.06.14

4577번: 소코반

https://www.acmicpc.net/problem/4577 4577번: 소코반 문제 소코반은 1982년에 일본에서 만들어진 게임으로, 일본어로 창고지기라는 뜻이다. 이 게임은 캐릭터를 이용해 창고 안에 있는 박스를 모두 목표점으로 옮기는 게임이다. 목표점의 수와 박스� www.acmicpc.net 소코반 관련된 게 있나 찾아본 문제인데 막상 소코반과는 별 관련이 없다 . 단순 조건문으로 대충 풀이 본 소스. 문제의 예제 입력과 출력을 똑같이 보기 위해 입력을 처음에 다 받았다. count = 0; listR = [] # 행 갯수 listC = [] # 열 갯수 listTestMap = [] # 게임 맵 lisetSolution = [] # 유저 입력 while True: # Input _input..