Fork Copy #include #include #include #include // dùng cho _kbhit() và _getch() trên Windows #include // dùng cho Sleep() using namespace std; const int ROWS = 10; const int COLS = 5; const int MAX_TURNS = 20; char map[ROWS][COLS]; int playerX = 2; // bắt đầu ở cột giữa void drawMap() { system("cls"); for (int i = 0; i < ROWS; ++i) { for (int j = 0; j < COLS; ++j) { if (i == ROWS - 1 && j == playerX) cout << 'P'; else cout << map[i][j]; } cout << endl; } } void generateObstacle() { int obstaclePos = rand() % COLS; for (int j = 0; j < COLS; ++j) map[0][j] = ' '; map[0][obstaclePos] = 'X'; } void moveDown() { for (int i = ROWS - 2; i >= 0; --i) for (int j = 0; j < COLS; ++j) map[i + 1][j] = map[i][j]; // clear top row for (int j = 0; j < COLS; ++j) map[0][j] = ' '; } bool checkCollision() { return map[ROWS - 1][playerX] == 'X'; } int main() { srand(time(0)); int turns = 0; // Khởi tạo bản đồ trống for (int i = 0; i < ROWS; ++i) for (int j = 0; j < COLS; ++j) map[i][j] = ' '; while (true) { generateObstacle(); moveDown(); drawMap(); if (checkCollision()) { cout << "Game Over!\n"; break; } cout << "Turn: " << (turns + 1) << "/" << MAX_TURNS << " (A: Left, D: Right, Q: Stay): "; char input; input = _getch(); cout << input << endl; if (input == 'A' || input == 'a') { if (playerX > 0) playerX--; } else if (input == 'D' || input == 'd') { if (playerX < COLS - 1) playerX++; } else if (input == 'Q' || input == 'q') { // đứng yên } turns++; if (turns >= MAX_TURNS) { drawMap(); cout << "Chúc mừng! Bạn đã sống sót qua " << MAX_TURNS << " lượt!\n"; break; } Sleep(300); // delay cho mỗi lượt chơi (ms) } return 0; }