SDL3(4) - CPP 버전1
기존에 만들었던 C 버전의 테트리스를 CPP 버전으로 바꿔보자.
파일명은 기존에도 tetirs.cpp 였으니 파일명은 그대로 쓰고 내용물만 살짝쿵 바꾼다.
score 랑 remiainig blocks 표시 부분을 숫자와 문자로 표현해야하는데....
SDL3-ttf 를 따로 설치하지 않으면 text rendering이 안되는걸로 파악된다. 그래서
그냥 이렇게 픽셀로 숫자를 찍도록 구현하는걸로
void Tetris::draw_digit(int digit, int x, int y) { static const int font[10][5] = { {0b111, 0b101, 0b101, 0b101, 0b111}, // 0 {0b010, 0b110, 0b010, 0b010, 0b111}, // 1 {0b111, 0b001, 0b111, 0b100, 0b111}, // 2 {0b111, 0b001, 0b111, 0b001, 0b111}, // 3 {0b101, 0b101, 0b111, 0b001, 0b001}, // 4 {0b111, 0b100, 0b111, 0b001, 0b111}, // 5 {0b111, 0b100, 0b111, 0b101, 0b111}, // 6 {0b111, 0b001, 0b001, 0b001, 0b001}, // 7 {0b111, 0b101, 0b111, 0b101, 0b111}, // 8 {0b111, 0b101, 0b111, 0b001, 0b111} // 9 }; for (int dy = 0; dy < 5; dy++) { for (int dx = 0; dx < 3; dx++) { if (font[digit][dy] & (1 << (2 - dx))) { SDL_FRect pixel = { x + dx * 4, y + dy * 4, 3, 3 }; SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderFillRect(renderer, &pixel); } } } } |
음.. 다 좋다.. 그런데, 버그가 있다. 음.. 귀찮다.
up key를 2번 누르면 뻑큐에서 ㄴ 으로 바뀐다.
찾아보자...
..
..
..
10분정도 걸렸다... 나이먹었나보다.
rotation 값이 이상하다.. -2가 나올 수 없지.. index는 0 ~ 3까지 4개여야된다.
current, preview 의 block 초기화시 rotation을 0으로 초기화 해주면 될 것 같다.
Tetris::Tetris() { SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); window = SDL_CreateWindow("Tetris C++", SCREEN_WIDTH, SCREEN_HEIGHT, 0); renderer = SDL_CreateRenderer(window, nullptr); srand(static_cast<unsigned>(time(nullptr))); current = { rand() % 7, 0, 3, 0 }; next = { rand() % 7, 0, 3, 0 }; audio_manager.init(); audio_manager.play(); } |
current, next 생성부분을 손좀 봐주자...
current.shape = rand() % 7 + 1; current.rotation = 0; current.x = 3; current.y = 0; next.shape = rand() % 7 + 1; next.rotation = 0; next.x = 3; next.y = 0; |
요런식으로...
rand() % 7 + 1 로 작성한 이유는 board 배열을 살펴보면된다.
배경(빈 공간)과 index 0번 도형(I) 가 같은 넘버를 사용하기때문에 일자 도형의 경우 정상 처리 되지 않는 버그가 또
있었다...
앞에 글을 안읽은 사람이 있을 수 있으니 다시 얘기하자면 이거는 C 로 작성한 원시 소스 코드는 chatGPT가 작성한거다.
이쉐끼가 이렇게 허접하게 짤 줄은 몰랐다~
암튼 여기까지 수정한 commit 은 아래를 보시라.....
오늘은 끝
https://github.com/kchhero/suker_vs_project/tree/master/tetris_cpp