프로젝트/C, C++ 프로젝트 (9) 썸네일형 리스트형 Spinning Donut 회전하는 도넛 코드이다. 행렬에 대한 이해를 바탕으로 도넛을 그리고, 회전을 시킨 후, 화면에 투영되는 것을 코드로 작성해주면 된다. 수학적인 지식과 코딩에 대한 지식 모두 필요하다. 다음 글을 바탕으로 코드를 작성하였다. https://www.a1k0n.net/2011/07/20/donut-math.html Donut math: how donut.c worksDonut math: how donut.c works Jul 20, 2011 [Update 1/13/2021: I wrote a follow-up with some optimizations. ] There has been a sudden resurgence of interest in my "donut" code from 2006, and I've.. 연산자 순서 C 연산자 순서괄호가 너무 많아도 코드를 읽기 어렵다. 참고하기를 바란다. 2. C++ Console Snake Game Snake Game을 만들고 나서 느낀 점은 확실히 테트리스가 난이도는 더 높았다는 것이다. 사실 블록의 충돌처리나 여러 블록들의 운동을 한 번에 처리하는 것은 전의 프로젝트에서 한 번 다루어 본 것이어서 크게 어려웠던 것은 없었던 것 같다. 그나마 잠깐 해매었던 부분을 꼽자면 플레이어(뱀)의 성장과 움직임을 구현하는 것에 있어서 예상했던 것과 다른 양상을 보여주어서 재설계가 필요했던 것 정도? 아무튼 이번에 프로젝트를 진행하면서 주안점을 둔 것은 보다 객체지향 기법을 이용하여 짜임새 있는 프로그램을 짜는 것이었다. 개인적으로는 main() 함수에서는 클래스 생성자 하나만 있기를 바랬다. (그리고 이 부분은 달성했다!!) 다만 클래스 자체의 짜임새도 전보다는 나름 깔끔해진 것 같다. 특히 렌더링(?)을 .. 1-5. C/C++ Console 테트리스를 만들어보자!!(Class : StackedBlockState) 어쩌면 게임의 진행과 가장 큰 연관성이 높은 클래스라고도 할 수 있겠습니다. 클래스의 역할은 현재 쌓인 블록 상태의 업데이트, 바운더리 추출, 라인 삭제, 게임 오버 판단이 있습니다. 클래스의 구조는 다음과 같습니다. class StackedBlockState { public: blockMemory stackedBlockState[GAMETEMPLATE_Y + GAMETEMPLATE_MARGIN_TYPE_1] [GAMETEMPLATE_X + 2 * GAMETEMPLATE_MARGIN_TYPE_1]; list collisionBoundary; StackedBlockState() { collisionBoundary = list(); for (int i = 0; i < GAMETEMPLATE_Y + GAMET.. 1-4. C/C++ Console 테트리스를 만들어보자!!(Class : TetrisBlock) Class TetrisBlock에 대해서 설명하고자 합니다. 말그대로 우리가 알고있는 4 개의 1 칸 블록으로 구성된 테트리스 블록의 움직임과 충돌상태 등을 관리하는 클래스입니다. 이번 글은 이전 포스팅의 Block 클래스를 참고하시면서 보면 좋습니다.(특히 Block 클래스 소스 코드를 보면서 오시는 걸 추천드려요!!) //TetrisBlock 클래스입니다. class TetrisBlock { private: Block componentBlock[4]; int tetrisBlockType; int tetrisBlockRotationNum; ableToMove tetrisBlockNowMovableState; dotPos bringBackNowPos[4]; dotPos bringBackPrevPos[4].. 1-3 C/C++ Console 테트리스를 만들어보자!!(Class : Block) 앞서 예고한 데로 3개의 클래스에 대해서 글 3개에 걸쳐서 설명하고자 합니다. Block이라는 클래스는 1칸짜리 블록에 대해서 정의한 것입니다. 차후에 TetrisBlock 클래스에서 4개의 Block 인스턴스를 생성하고 관리하게 될 것입니다. 다음은 Block Class의 정의입니다. 변화가 반영된 nowState와 그 이전 상태인 prevState를 눈여겨 볼필요가 있습니다. 전 상태의 블록은 지우고, 현재 상태의 블록을 출력한다면 사용자에게는 블록이 이동하는 것처럼 느껴질 것입니다. /* struct dotPos{ int posX; int posY; bool whetherStacked; }; sturct ableToMove{ bool ableToFall; bool ableToMoveLeft; boo.. 1-2 C/C++ Console 테트리스를 만들어보자!!(전체 구조 편) 사실 제일 중요한 파트라고 생각합니다. 만약 제가 했던 방법대로 한 번 짜볼 생각이라면 이 번 파트에 조금 더 집중하는 것이 좋을 것입니다. 우선 테트리스가 어떻게 게임인지 이해할 필요가 있습니다. 테트리스의 게임 프로세스를 생각해보면 다음과 같습니다. 1. 블록이 생성된다. 2. 블록은 완전히 상태가 확정되기 전까지(추락하지 못하는 상태) 일정 속도로 떨어진다. 3. 블록이 떨어지기 전까지 사용자는 블록을 좌, 우, 아래 방향으로 이동시키거나 회전시킬 수 있다. 4. 단 이미 쌓여진 블록이나 경계에 이동, 회전 경로가 겹치면 조작이 불가능하다. 5. 블록이 완전히 떨어지게 되면 화면이 업데이트 된다. 6. 한 줄이 완전히 채워진 경우 그 줄은 지워지고, 지워진 줄 위에 쌓였던 블록들은 떨어진다. 그리고.. 1-1. C/C++ Console 테트리스를 만들어보자!!(Console 기본 함수들 ) 본격적인 시작에 앞서서 가장 기본적인 화면 출력에 대해서 알아볼려고 합니다. C 언어를 다룬 경험이 있다면 printf( )를 사용하여 출력한 경험이 있을 것이고, C++를 다룬 적이 있다면 std::cout 이전 1 2 다음