사용자 도구

사이트 도구


raylib:tetris:테트리스_개념_및_준비
테트리스 개념 및 준비

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
raylib:tetris:테트리스_개념_및_준비 [2023/11/22 15:39] 이거니맨raylib:tetris:테트리스_개념_및_준비 [2023/12/24 12:46] (현재) – Drawbackground 이거니맨
줄 3: 줄 3:
   - 우리는 플래피 버드 게임을 [[raylib:flappybird:다국어_지원하기|다국어 지원]]까지 해 보았다. 이 정도면 게임을 만들 수 있을 것이다.    - 우리는 플래피 버드 게임을 [[raylib:flappybird:다국어_지원하기|다국어 지원]]까지 해 보았다. 이 정도면 게임을 만들 수 있을 것이다. 
   - 이제 기존 플래피 버드 게임에서 메뉴와 세팅화면은 그대로 둔 채, 게임 클래스를 고쳐서 테트리스를 만들어 보자.    - 이제 기존 플래피 버드 게임에서 메뉴와 세팅화면은 그대로 둔 채, 게임 클래스를 고쳐서 테트리스를 만들어 보자. 
-  - 시작할 프로젝트 파일은 이다((로고 화면을 애미메이션으로 바꾸었다. [[https://github.com/raysan5/raylib/blob/master/examples/shapes/shapes_logo_raylib_anim.c|Raylib의 예제 중 로고 애니메이션]]을 그대로 베낀 것에 불과하다. ))+  - 시작할 프로젝트 파일은 {{ :raylib:tetris:tetris.zip |테트리스 스타팅파일}}이다((로고 화면을 애미메이션으로 바꾸었다. [[https://github.com/raysan5/raylib/blob/master/examples/shapes/shapes_logo_raylib_anim.c|Raylib의 예제 중 로고 애니메이션]]을 그대로 베낀 것에 불과하다. )) 
 +  - 그 전에 [[raylib:정적_라이브러리_만들기|C / C++  에서 정적라이브러리 만들기]]를 읽어보자. 여기에서 사용한 예제 파일을 기반으로 프로젝트를 시작할 것이다. 즉, 테트리스는 gui와 buttonActionMap을 a파일로 만든 후에 시작하는 것이다. 
  
  
-===== 기초 개념 ===== +===== 그리드 만들기 ===== 
  
-==== 1. 그리드 ====+==== 1. 기초 개념 ====
  
 테트리스는 가로 20열, 세로 40행 혹은 어느 임의의 수든 간에 그 정도의 배열을 가지고 그 안에 블록들이 어떻게 있는지를 판단한 후, 블록들이 한 줄에 있으면 그 한 줄을 지우는 게임이다. 테트리스는 가로 20열, 세로 40행 혹은 어느 임의의 수든 간에 그 정도의 배열을 가지고 그 안에 블록들이 어떻게 있는지를 판단한 후, 블록들이 한 줄에 있으면 그 한 줄을 지우는 게임이다.
줄 19: 줄 20:
  
  
 +==== 2. 멤버 변수 선언하기 ==== 
 +
 +game.h에 다음과 같이 멤버변수를 선언하자. 
 +
 +grid에 사용될 행의 갯수와 열의 갯수, 그리고 셀의 사이즈를 정하는 것이다.
 +
 +그리고 컬러 값도 배열로 만들어서 숫자를 통하여 컬러 값을 정할 것이다. 
 +
 +<code raylib>
 +    private: 
 +        void Draw(); 
 +        void Update();
 +        void DrawBackground();
 +
 +        // 게임 패드 
 +        int gamepad = 0; // 제일 처음에 꽂은 게임패드만 사용하도록 하자. 제일 처음이므로 0이다. 
 +
 +        // 테트리스 설정
 +        int numCols; // 컬럼 갯수
 +        int numRows;  // 행의 갯수
 +        int paddingX; // 화면 x 패딩 
 +        int paddingY; // 화면 y 패딩 
 +        int cellSize; // 셀의 크기 
 +
 +        int backGrid[20][10]; // 그리드의 크기 20행 10열 
 +
 +        // Color Pallette 
 +        Color colors[5] = {BLACK, RAYWHITE, DARKGREEN, YELLOW, RED};
 +</code>
 +
 +
 +가로 20 세로 10의 그리드 행렬에는 숫자값(int)을 저장한다. 이 숫자에 따라 해당 셀의 색상이 바뀌는 것이다. 
 +
 +0은 블랙, 1은 흰색, 2는 어두운녹색, 3은 노랑, 4는 빨강색으로 그려준다. 
 +
 +==== 3. game.cpp에 그리드 그려보기 ==== 
 +
 +먼저 game 클래스가 생성될 때 각 값들을 초기화해야 한다. 
 +
 +=== 가. Game::Game() 메서드 ===
 +
 +<code raylib>
 +Game::Game()
 +{
 +    numCols = 10;
 +    numRows = 20;
 +    paddingX = 100;
 +    paddingY = 100;
 +    cellSize = 30;
 +
 +    for (int i = 0; i < 20; i++)
 +    {
 +        for (int j =0; j < 10; j++)
 +        {
 +            backGrid[i][j] = 0;
 +        }
 +    }
 +    
 +    backGrid[18][2] = 3;
 +    backGrid[18][3] = 3;
 +    backGrid[19][3] = 3;
 +
 +}
 +</code> 
 +
 +그리드 전체를 0으로 하여 검은색으로 덮되, 맨 아래쪽 몇개는 노랑색이 나오게 해보았다. 
 +
 +
 +=== 나. Draw메서드 === 
 +
 +따로 DrawBackground()함수를 호출하게 한 후에, 그 DrawBackground()함수를 다음과 같이 만들었다. 
 +
 +<code raylib>
 +void Game::DrawBackground()
 +{
 +    ClearBackground(DARKBLUE);
 +
 +
 +    for (int row = 0; row < numRows; row++)
 +    {
 +        for (int column = 0; column < numCols; column++)
 +        {
 +            int cellValue = backGrid[row][column];
 +            DrawRectangle(paddingX + column * cellSize, paddingY + row*cellSize, cellSize - 5 , cellSize - 5 , colors[cellValue]);
 +        }
 +    }
 +}
 +</code> 
  
  
raylib/tetris/테트리스_개념_및_준비.1700635181.txt.gz · 마지막으로 수정됨: 2023/11/22 15:39 저자 이거니맨