본문 바로가기

전체 글

(76)
[Unity] '맵 메이킹 게임' 2 - 캐릭터 이동과 오브젝트 생성, 모드 전환, UI 처음부터 개발 과정을 공유했으면 더 좋았겠지만, 아쉽게도 어느정도 개발이 진행된 후 포스팅을 올려야겠단 생각이 들었다. 그래서 이번엔 현재 개발된 부분을 간략하게 정리해보려 한다. 먼저, 지금까지의 플레이 영상은 이런 느낌이다. 노란 건 스프링, 파란 건 뒤돌기, 빨간 건 적 오브젝트. 적에게 닿거나 낙사하면 초기 위치로 돌아온다. 캐릭터 이동 가장 먼저 구현한 건 자동으로 움직이는 캐릭터다. 아무 생각없이 이름을 Player로 지었는데, 딱히 틀린 말은 아니었기에 앞으로 플레이어라 지칭한다. void Update() { if(isPlaying == false) { return; } if (canMove) { MoveForward(); } } 게임은 크게 플레이 모드와 배치 모드로 나뉜다. 만약 플레이 ..
[Unity] '맵 메이킹 게임' 1 - 개발 일지의 시작 원래 블로그엔 게임을 만드는 과정에서 생기는 팁이나, 특별한 걸 구현했을 때 포스팅하는 정도로 하려 했었다. 그러다보니 실제로 게임 개발이 진행 중이었음에도, 블로그엔 아무 것도 올리지 않는 일이 많았다. 그래서 이번엔 '방학 중 진행할 개인 프로젝트'(이미 방학이 다 지나갔지만)인 '맵 메이킹 게임'으로, 연재처럼 시작해보려고 한다. 기획 동기 게임을 기획할 땐, 플레이 요소를 먼저 기획한 후 스토리를 넣어야 잘 굴러간다. 예를 들어, 용사가 마왕을 무찌르는 게임을 만들겠어! 하고 RPG, 소울라이크, 액션 중 어떤 걸 고를까?로 넘어가버리면 두 가지로 나뉜다. 스토리에 집중해 재미없는 게임이 되거나 스토리와 플레이가 완전히 분리된 게임이 되거나. 그런데 애석하게도 내가 이런 타입이다. 그래서 게임 자..
[백준/C++] 1081번. 합 문제 1081번: 합 L보다 크거나 같고, U보다 작거나 같은 모든 정수의 각 자리의 합을 구하는 프로그램을 작성하시오. www.acmicpc.net 1. 첫 번째 풀이 사고 과정 자릿수는 아래와 같은 특징이 있다. k + 1의 자릿수는 k의 자릿수의 합 + 1이다. 예를 들어 316의 자릿수의 합은 10으로, 315의 자릿수의 합인 9보다 1 큰 값이다. 이를 통해 L부터 U까지, 모든 자릿수의 합의 합을 구할 수 있는데 위와 같은 원리로 구할 수 있다. 하지만 여기엔 함정이 있는데, 이렇게 9 -> 0으로 넘어가는(꺾이는) 부분에서, 자릿수가 -9를 한다는 점이다. (왜 -8이 아닌 -9냐면, 20은 원래 자릿수의 합이 11이어야 하는 자리기 때문.) 그럼, 이런 부분이 몇 개 존재하는가? 14와 5..
[백준/C++] 1793번. 타일링 문제 1793번: 타일링 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 정수 n이 주어진다. www.acmicpc.net https://www.acmicpc.net/problem/2133 이 문제의 좀 더 쉬운 버전. 1. 첫 번째 풀이 사고 과정 매우 단순한 형태의 DP였기에, 간단히 풀었다. 타일은 1x2, 2x1, 2x2가 있다. 행은 2행으로 고정이니, 열만 생각해보자. 1개의 열에 놓을 수 있는 타일 수는 몇 개인가? 1x2 한 개다. 2개의 열엔? 1x2 2개, 2x1 2개, 2x2 1개. 3가지 경우의 수가 있다. 하지만 이 중 1x2를 2개 놓는 건, 1번째 경우의 수(1개의 열에 놓는 경우)와 겹치니 제외한다. 그러니 타일링은 1칸 전 최..
[백준/C++] 1005번. ACM Craft 문제 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 1. 마지막 풀이 사고 과정 위상정렬 공부하려고 집은 문젠데, DP 개념도 섞여 있는 문제. 둘을 동시에 진행할 수도 있지만, 내가 아직 위상정렬이 미숙해서 따로따로 구현하기로 했다. 알고리즘 이 문제는, 특정 건물을 지으면 다음 건물을 지을 수 있는 시스템에서 시작된다. 내가 특정 건물(예제 1의 4)을 짓고 싶은데, 이 건물을 가장 빠르게 짓는 방법을 알고 싶다. 건물을 짓기 위해선 선행 건물들을 모두 지어야 한다. 하지만 일꾼의 수는 무한해서, ..
[백준/C++] 15486번. 퇴사 2 문제 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 1. 첫 번째 풀이 사고 과정 이번에도 DP 문제. 특정 날에 시작, T일 후 끝나는 상담 진행 시 P원을 받는다. 퇴사까지 N일이 남았을 때, 최대한 돈을 버는 방법을 구하는 문제. 이번에도 저번 문제, 점프 점프와 비슷하게 생각하고, 빠르게 코드를 짜 제출했다. 간단히 알고리즘을 설명하자면 0일부터 N일까지 크게 반복(i) i일에 상담을 시작하면 i + t[i]일부터 P[i]원을 받을 수 있다. 그러니 i + t[i]일 부터..
[백준/C++] 11060번. 점프 점프 문제 https://www.acmicpc.net/problem/11060 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net 1. 마지막 풀이 사고 과정 대학 알고리즘 수업 시험 문제였으면서, 자력으로 풀어 A+를 받게 해준 고마운 문제. 그래서 더 인상깊게 남은 문제다. DP엔 크게 탑다운(정답 칸부터 점화식 계산 시작, 구한 적 없다면 재귀적으로 계산) 방식과 바텀업(가장 작은 칸부터 순차적으로 점화식을 계산, 정답 칸이 계산되면 반환하며 종료) 방식이 있다. 문제의 구조 상 숫자가 큰 칸에서, 자신..
[백준/C++] 1038번. 감소하는 수 문제 https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 1. 첫 번째 풀이 사고 과정 가장 단순한 방법은 이렇게다. 인덱스 i와 수 k 변수를 정의해둔다. i를 0부터 N까지 반복한다. k가 감소하는 수라면 i와 k를 모두 증가 k가 감소하는 수가 아니라면 k만 1 증가, 다시 반복 간단히 코드로 써보면 아래와 같다. 코드 #include #include using ll = long long; // 감소하는 수 판정 bool isD..