
| 구분 | 내용 |
|---|---|
| 언어 | C++ |
| 라이브러리 | SFML 3.0.0 |
| 도구 | Visual Studio 2022, Git |
| 폰트 | NotoSansKR-Regular |
assets/NotoSansKR-Regular.ttf 경로에 폰트 존재 여부 확인
shape[1][1] = '#'; shape[1][2] = '#';
shape[2][1] = '#'; shape[2][2] = '#';
//2차원 배열 활용하여 도형 설계
if (key == sf::Keyboard::Key::Left) { temp.x--; if (!board.checkCollision(temp)) current.x--; }
// 키보드 입력처리 예시

아래 코드는 블록이 고정될 때 보드 위에 블록 데이터를 반영하는 부분입니다.
블록은 4x4 shape 정보를 기준으로, 실제 보드 좌표로 매핑되며, 경계를 벗어나는 블록은 무시됩니다.
void Board::placeTetromino(const Tetromino& t) {
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
if (t.shape[i][j] == '#') {
int x = t.x + j;
int y = t.y + i;
if (y >= 0 && y < 20 && x >= 0 && x < 10) {
grid[y][x] = t.type; // 실제 보드 위치에 고정

토글 여부를 기반으로 일시 정지 화면을 출력합니다.
void Game::drawPause(sf::RenderWindow& window) {
sf::Text pause{ font, L"일시정지\nP 키로 계속", 32 };
pause.setFillColor(sf::Color::Yellow);
pause.setPosition({ 200.f, 250.f });
window.draw(pause);
}

else if ((key == sf::Keyboard::Key::C || key == sf::Keyboard::Key::LShift) && !holdUsedThisTurn) {
if (!hasHold) {
hold = current;
current = next;
next = Tetromino();
hasHold = true;
}
else {
std::swap(current, hold); // 저장된 블록이 있을 경우 교체
}
current.x = 3; current.y = 0;
holdUsedThisTurn = true;
}


switch (lines) {
case 1: score += 100; break;
case 2: score += 300; bonusMessage = L"더블!"; showBonus = true; bonusTimer = now; break;
case 3: score += 500; bonusMessage = L"트리플!"; showBonus = true; bonusTimer = now; break;
case 4: score += 800; bonusMessage = L"TETRIS!"; showBonus = true; bonusTimer = now; break;
}

level = score / 1000 + 1;
speed = std::max(100, 500 - (level - 1) * 40);
