c++俄罗斯方块代码

以下是一个简单的C++俄罗斯方块游戏的示例代码。

cpp
#include <iostream> #include <cstdlib> #include <ctime> #include <conio.h> using namespace std; const int BOARD_WIDTH = 10; const int BOARD_HEIGHT = 20; class Tetris { public: Tetris(); void run(); void drawBoard(); void drawPiece(); void clearPiece(); bool isCollision(); void rotatePiece(); void moveLeft(); void moveRight(); void moveDown(); void placePiece(); bool isGameOver(); private: int board[BOARD_HEIGHT][BOARD_WIDTH]; int currentPiece[4][4]; int currentPieceX, currentPieceY; }; Tetris::Tetris() { // 初始化游戏板 for (int i = 0; i < BOARD_HEIGHT; i++) { for (int j = 0; j < BOARD_WIDTH; j++) { board[i][j] = 0; } } // 随机生成初始方块 srand(time(0)); int randomPiece = rand() % 7; switch (randomPiece) { // 这里省略了每种方块的初始状态,可以根据需要添加 // 每个方块由4x4的矩阵表示,1表示方块的一部分,0表示空白 } currentPieceX = BOARD_WIDTH / 2 - 2; currentPieceY = 0; } void Tetris::run() { char key; while (!isGameOver()) { drawBoard(); drawPiece(); key = _getch(); // 获取用户按键 switch (key) { case 'a': moveLeft(); break; case 'd': moveRight(); break; case 's': moveDown(); break; case 'w': rotatePiece(); break; case 'q': exit(0); break; } if (isCollision()) { placePiece(); clearPiece(); } } cout << "Game Over!" << endl; } void Tetris::drawBoard() { system("cls"); for (int i = 0; i < BOARD_HEIGHT; i++) { for (int j = 0; j < BOARD_WIDTH; j++) { if (board[i][j] == 0) { cout << "."; } else { cout << "#"; } } cout << endl; } } void Tetris::drawPiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { cout << "#"; } } cout << endl; } } void Tetris::clearPiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { board[currentPieceY + i][currentPieceX + j] = 0; } } } } bool Tetris::isCollision() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { if (currentPieceY + i >= BOARD_HEIGHT || currentPieceX + j < 0 || currentPieceX + j >= BOARD_WIDTH || board[currentPieceY + i][currentPieceX + j] == 1) { return true; } } } } return false; } void Tetris::rotatePiece() { // 实现方块的旋转逻辑 } void Tetris::moveLeft() { // 实现向左移动逻辑 } void Tetris::moveRight() { // 实现向右移动逻辑 } void Tetris::moveDown() { // 实现向下移动逻辑 } void Tetris::placePiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { board[currentPieceY + i][currentPieceX + j] = 1; } } } // 生成新的方块 int randomPiece = rand() % 7; switch (randomPiece) { // 这里省略了每种方块的初始状态,可以根据需要添加 // 每个方块由4x4的矩阵表示,1表示方块的一部分,0表示空白 } currentPieceX = BOARD_WIDTH / 2 - 2; currentPieceY = 0; } bool Tetris::isGameOver() { // 判断游戏是否结束的逻辑 return false; } int main() { Tetris tetris; tetris.run(); return 0; }

cpp
#include <iostream> #include <cstdlib> #include <ctime> #include <conio.h> using namespace std; const int BOARD_WIDTH = 10; const int BOARD_HEIGHT = 20; class Tetris { public: Tetris(); void run(); void drawBoard(); void drawPiece(); void clearPiece(); bool isCollision(); void rotatePiece(); void moveLeft(); void moveRight(); void moveDown(); void placePiece(); bool isGameOver(); private: int board[BOARD_HEIGHT][BOARD_WIDTH]; int currentPiece[4][4]; int currentPieceX, currentPieceY; }; Tetris::Tetris() { // 初始化游戏板 for (int i = 0; i < BOARD_HEIGHT; i++) { for (int j = 0; j < BOARD_WIDTH; j++) { board[i][j] = 0; } } // 随机生成初始方块 srand(time(0)); int randomPiece = rand() % 7; switch (randomPiece) { case 0: // I型方块 currentPiece[0][1] = 1; currentPiece[1][1] = 1; currentPiece[2][1] = 1; currentPiece[3][1] = 1; break; case 1: // J型方块 currentPiece[0][0] = 1; currentPiece[1][0] = 1; currentPiece[1][1] = 1; currentPiece[1][2] = 1; break; case 2: // L型方块 currentPiece[0][2] = 1; currentPiece[1][0] = 1; currentPiece[1][1] = 1; currentPiece[1][2] = 1; break; case 3: // O型方块 currentPiece[0][0] = 1; currentPiece[0][1] = 1; currentPiece[1][0] = 1; currentPiece[1][1] = 1; break; case 4: // S型方块 currentPiece[0][1] = 1; currentPiece[0][2] = 1; currentPiece[1][0] = 1; currentPiece[1][1] = 1; break; case 5: // T型方块 currentPiece[0][1] = 1; currentPiece[1][0] = 1; currentPiece[1][1] = 1; currentPiece[1][2] = 1; break; case 6: // Z型方块 currentPiece[0][0] = 1; currentPiece[0][1] = 1; currentPiece[1][1] = 1; currentPiece[1][2] = 1; break; } currentPieceX = BOARD_WIDTH / 2 - 2; currentPieceY = 0; } void Tetris::run() { char key; while (!isGameOver()) { drawBoard(); drawPiece(); key = _getch(); // 获取用户按键 switch (key) { case 'a': moveLeft(); break; case 'd': moveRight(); break; case 's': moveDown(); break; case 'w': rotatePiece(); break; case 'q': exit(0); break; } if (isCollision()) { placePiece(); clearPiece(); } } cout << "Game Over!" << endl; } void Tetris::drawBoard() { system("cls"); for (int i = 0; i < BOARD_HEIGHT; i++) { for (int j = 0; j < BOARD_WIDTH; j++) { if (board[i][j] == 0) { cout << "."; } else { cout << "#"; } } cout << endl; } } void Tetris::drawPiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { cout << "#"; } else { cout << " "; } } cout << endl; } } void Tetris::clearPiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { board[currentPieceY + i][currentPieceX + j] = 0; } } } } bool Tetris::isCollision() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { if (currentPieceY + i >= BOARD_HEIGHT || currentPieceX + j < 0 || currentPieceX + j >= BOARD_WIDTH || board[currentPieceY + i][currentPieceX + j] == 1) { return true; } } } } return false; } void Tetris::rotatePiece() { int tempPiece[4][4]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { tempPiece[i][j] = currentPiece[i][j]; } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { currentPiece[i][j] = tempPiece[3 - j][i]; } } } void Tetris::moveLeft() { currentPieceX--; } void Tetris::moveRight() { currentPieceX++; } void Tetris::moveDown() { currentPieceY++; } void Tetris::placePiece() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (currentPiece[i][j] == 1) { board[currentPieceY + i][currentPieceX + j]