- 게임종료조건은 새로 스폰될 블록을 놓으려는데, 이미 블록이 있다면 게임 종료이다.
void PutBlock(BlockType type, int startX, int startY, int rotation) {
	int* dx;
	int* dy;
	SetBlockOffsets(type, rotation, dx, dy);
	// 유효성 검사
	for (int i = 0; i < 4; i++) {
		int x = startX + dx[i];
		int y = startY + dy[i];
		if (!CheckBoundary(y, x)) {
			cerr << "Block이 유효범위를 벗어났음.\\n";
			exit(EXIT_FAILURE);
		}
	}
	// 블록 배치
	for (int i = 0; i < 4; i++) {
		int x = startX + dx[i];
		int y = startY + dy[i];
		grid[y][x] = 1;
	}
}
아래와 같이 간단히 수정하면 된다.
void PutBlock(BlockType type, int startX, int startY, int rotation) {
	int* dx;
	int* dy;
	SetBlockOffsets(type, rotation, dx, dy);
	// 유효성 검사 및 게임 오버 체크
	for (int i = 0; i < 4; i++) {
		int x = startX + dx[i];
		int y = startY + dy[i];
		if (!CheckBoundary(y, x)) {
			cerr << "Block이 유효범위를 벗어났음.\\n";
			exit(EXIT_FAILURE);
		}
		// 게임 종료 조건 = 이미 블록이 있는 위치에 새 블록이 스폰될 때
		if (grid[y][x] == 1) {
			gameOverFlag = true;
			return;
		}
	}
	// 블록 배치
	for (int i = 0; i < 4; i++) {
		int x = startX + dx[i];
		int y = startY + dy[i];
		grid[y][x] = 1;
	}
}
게임루프 수정
void GameLogic() {
	// 화면 클리어
	// 추후에 더블버퍼링을 해야 화면깜빡임을 없앨 수 있다.
	system("cls");
	ResetSpawnFlag();
	if (canSpawn) {
		SpawnRandomBlock();
		if (gameOverFlag) {
			cout << "Game Over!\\n";
			ShowTotalScore();
			return; // 더 이상 진행하지 않고 종료
		}
	}