목록2024/02/01 (5)
개발하는 리프터 꽃게맨입니다.
최근에 만들 윈도우 API 프로그램입니다. 방향키를 누르면 사각형이 이동합니다. 그런데 이동을 하면 잔상이 남는 모습을 볼 수 있습니다. 그림을 그리는 것은 모니터의 픽셀 버퍼에 원하는 값을 저장하는 형식으로 진행됩니다. 우리가 이전 버퍼를 지워주지 않았으니 이렇게 잔상이 남는 것이죠. 이런 식으로 매우 큰 흰색 사각형을 그려줘서 지워주는 건 어떨까요? 아마 매우 빠르게 깜빡 깜빡 거릴겁니다. 이게 왜 그렇냐면 그리기 버퍼를 단 1개만 사용해서 그렇습니다. 컴퓨터가 아무리 빨라도 화면에 픽셀을 하나하나 그려서 모두 그리는데 시간이 걸리겠죠? 저 코드를 넣어주면, 컴퓨터가 원하는 그림을 먼저 싹 그린 다음에 흰 색 큰 사각형을 싹 그려주고.. 를 반복합니다. 그러면 깜빡깜빡 거린다는 거죠. 깜빡이는 이유는..
이런 오브젝트가 있다고 해봅시다. 이 오브젝트는 방향키를 누르면 상하좌우로 움직이며 그 값은 0.1 만큼 움직입니다. 그런데 이 코드에는 문제가 있죠. 바로 하드웨어 성능에 따라 초당 이동거리가 다르다는 것입니다. 이게 무슨 의미일까요? 컴퓨터 A는 계산속도가 매우 빨라서 1초에 10000번 계산합니다. 컴퓨터 B는 계산속도가 매우 느려서 1초에 100번 계산합니다. 위 코드에 의하면 컴퓨터 A에서 게임을 실행시 1초에 1000 만큼 이동하고 컴퓨터 B에서는 게임을 실행시 1초에 10 만 이동하죠. 만약, 레이싱 게임이라고 했을때 내 컴퓨터 사양이 구리다는 이유로 매번 경기에서 지면 억울할겁니다. 그렇기에 컴퓨터 사양에 구애받지 않는 상대적인 시간을 얻어야하는데 그것이 바로 델타타임 입니다. 그럼 이는 ..
1. 벡터의 정의 1) 데카르트 좌표계 (Cartesian Coordinate System) 데카르트 좌표계란 임의의 차원의 유클리드 공간을 나타내는 좌표계 중 하나입니다. 유클리드 공간은 평면과 공간을 일반화한 것으로 유클리드가 생각했던 거리, 길이, 각도를 좌표계에 도입하여, 임의 차원 공간으로 확장한 것입니다. 유클리드 공간은 유한 차원, 실수, 내적 공간으로 n차원 유클리드 공간은 실수 집합 R의 n번 곱집합이죠. 간단하게 말해서 2차원 데카르트 좌표계는 2차원 유클리드 공간에서의 좌표 평면 3차원 데카르트 좌표계는 3차원 유클리드 공간에서의 좌표 공간 이라고 할 수 있겠습니다. 이 2차원 데카르트 좌표계는 2개의 실수 집합 R을 곱집합한 원소들의 집합, RxR 로 표현할 수 있고 흔히 가로축을 ..
https://www.acmicpc.net/problem/11062 11062번: 카드 게임 근우와 명우는 재미있는 카드 게임을 하고 있다. N개의 카드가 일렬로 놓여 있다. 각 카드에는 점수가 적혀있다. 근우부터 시작하여 번갈아가면서 턴이 진행되는데 한 턴에는 가장 왼쪽에 있는 www.acmicpc.net 아이디어 처음에는 그리디 알고리즘 문제인줄 알고 deque를 이용해서 현재 최고 가치를 가지는 카드를 뽑는 방식을 로직을 사용했는데, 최선의 전략으로 게임이 끝났을 때, 최고 점수를 얻어야 하는 것이더라구요. 그러면 현재 최선의 선택잉 미래에는 최선이 아닐 수 있습니다. 이럴 때는 다이나믹 프로그래밍을 사용해야죠! dp[i][j] 는 i번째 카드 ~ j번째 카드가 있을 때, 근우의 최대 점수를 뜻합니..
게임은 총 3개의 함수에 의해 진행됩니다. (1) 초기화 함수 (2) 업데이트 함수 (3) 렌더링 함수 초기화 함수는 게임 시작에 있어서 초기에 설정해야할 값을 정의하고, 메인 루프에서는 업데이트 함수와 렌더링 함수가 계속 실행되면서 연산 및 그리기 작업을 수행합니다. 그래서 우리는 게임을 관리할 매니저 클래스가 필요합니다. 그것을 GameManager 라고 하고, 여기서 싱글톤 패턴을 사용하게 됩니다. 아래는 싱글톤에 대해 참고할 포스팅입니다. 더보기 https://powerclabman.tistory.com/66 [C++/디자인패턴] 싱글톤 (Singletone) 개요 싱글톤 패턴은 하나의 클래스가 하나의 객체만 가지도록 하면서 이 객체에 대한 접근은 전역으로 제공하는 디자인 패턴 입니다. 게임을 만..