以下是一个简单的用C++代码实现的俄罗斯方块游戏:\n\ncpp\n#include <iostream>\n#include <cstdlib>\n#include <ctime>\n#include <conio.h>\n#include <Windows.h>\n\nusing namespace std;\n\nconst int BOARD_WIDTH = 10;\nconst int BOARD_HEIGHT = 20;\nconst int SHAPE_TYPES = 7;\nconst int SHAPE_SIZE = 4;\n\nconst char SHAPES[SHAPE_TYPES][SHAPE_SIZE][SHAPE_SIZE + 1] = {\n {\n " ",\n "****",\n " ",\n " "\n },\n {\n " * ",\n " * ",\n " * ",\n " * "\n },\n {\n " ",\n " ** ",\n " ** ",\n " "\n },\n {\n " ",\n " ** ",\n "** ",\n " "\n },\n {\n " ",\n "* ",\n "*** ",\n " "\n },\n {\n " ",\n " * ",\n "*** ",\n " "\n },\n {\n " ",\n "*** ",\n " * ",\n " "\n }\n};\n\nstruct Point {\n int x;\n int y;\n};\n\nclass Tetris {\nprivate:\n char board[BOARD_HEIGHT][BOARD_WIDTH];\n Point currentShapePos;\n int currentShapeIndex;\n int score;\n\npublic:\n Tetris() {\n resetBoard();\n currentShapePos.x = BOARD_WIDTH / 2 - SHAPE_SIZE / 2;\n currentShapePos.y = 0;\n currentShapeIndex = rand() % SHAPE_TYPES;\n score = 0;\n }\n\n void start() {\n while (!isGameOver()) {\n drawBoard();\n processInput();\n update();\n Sleep(500);\n }\n\n drawBoard();\n cout << "Game Over! Score: " << score << endl;\n }\n\nprivate:\n void resetBoard() {\n for (int i = 0; i < BOARD_HEIGHT; i++) {\n for (int j = 0; j < BOARD_WIDTH; j++) {\n if (i == BOARD_HEIGHT - 1 || j == 0 || j == BOARD_WIDTH - 1) {\n board[i][j] = '#';\n } else {\n board[i][j] = ' ';\n }\n }\n }\n }\n\n void drawBoard() {\n system("cls");\n\n for (int i = 0; i < BOARD_HEIGHT; i++) {\n for (int j = 0; j < BOARD_WIDTH; j++) {\n cout << board[i][j];\n }\n cout << endl;\n }\n }\n\n bool canMove(int dx, int dy) {\n for (int i = 0; i < SHAPE_SIZE; i++) {\n for (int j = 0; j < SHAPE_SIZE; j++) {\n if (SHAPES[currentShapeIndex][i][j] != ' ') {\n int newX = currentShapePos.x + j + dx;\n int newY = currentShapePos.y + i + dy;\n\n if (newX < 0 || newX >= BOARD_WIDTH || newY >= BOARD_HEIGHT) {\n return false;\n }\n\n if (newY >= 0 && board[newY][newX] != ' ') {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n\n void placeShape() {\n for (int i = 0; i < SHAPE_SIZE; i++) {\n for (int j = 0; j < SHAPE_SIZE; j++) {\n if (SHAPES[currentShapeIndex][i][j] != ' ') {\n int x = currentShapePos.x + j;\n int y = currentShapePos.y + i;\n board[y][x] = '#';\n }\n }\n }\n\n clearFullRows();\n currentShapePos.x = BOARD_WIDTH / 2 - SHAPE_SIZE / 2;\n currentShapePos.y = 0;\n currentShapeIndex = rand() % SHAPE_TYPES;\n }\n\n void clearFullRows() {\n for (int i = BOARD_HEIGHT - 2; i >= 0; i--) {\n bool isFullRow = true;\n\n for (int j = 1; j < BOARD_WIDTH - 1; j++) {\n if (board[i][j] == ' ') {\n isFullRow = false;\n break;\n }\n }\n\n if (isFullRow) {\n for (int k = i; k > 0; k--) {\n for (int j = 1; j < BOARD_WIDTH - 1; j++) {\n board[k][j] = board[k - 1][j];\n }\n }\n\n score += 10;\n i++;\n }\n }\n }\n\n void processInput() {\n if (_kbhit()) {\n char key = _getch();\n\n switch (key) {\n case 'a':\n if (canMove(-1, 0)) {\n currentShapePos.x--;\n }\n break;\n case 'd':\n if (canMove(1, 0)) {\n currentShapePos.x++;\n }\n break;\n case 's':\n if (canMove(0, 1)) {\n currentShapePos.y++;\n }\n break;\n case 'w':\n rotateShape();\n break;\n case 'q':\n exit(0);\n }\n }\n }\n\n void rotateShape() {\n char tempShape[SHAPE_SIZE][SHAPE_SIZE];\n\n for (int i = 0; i < SHAPE_SIZE; i++) {\n for (int j = 0; j < SHAPE_SIZE; j++) {\n tempShape[i][j] = SHAPES[currentShapeIndex][i][j];\n }\n }\n\n for (int i = 0; i < SHAPE_SIZE; i++) {\n for (int j = 0; j < SHAPE_SIZE; j++) {\n SHAPES[currentShapeIndex][i][j] = tempShape[SHAPE_SIZE - j - 1][i];\n }\n }\n\n if (!canMove(0, 0)) {\n for (int i = 0; i < SHAPE_SIZE; i++) {\n for (int j = 0; j < SHAPE_SIZE; j++) {\n SHAPES[currentShapeIndex][i][j] = tempShape[i][j];\n }\n }\n }\n }\n\n void update() {\n if (canMove(0, 1)) {\n currentShapePos.y++;\n } else {\n placeShape();\n }\n }\n\n bool isGameOver() {\n for (int j = 1; j < BOARD_WIDTH - 1; j++) {\n if (board[0][j] != ' ') {\n return true;\n }\n }\n\n return false;\n }\n};\n\nint main() {\n srand(time(NULL));\n\n Tetris game;\n game.start();\n\n return 0;\n}\n\n\n此代码实现了一个简单的俄罗斯方块游戏,使用了字符界面进行显示。游戏中使用方向键控制方块的移动和旋转,按下Q键可以退出游戏。游戏结束后会显示得分。\n

C++ 代码实现俄罗斯方块游戏 - 简单易懂的教程

原文地址: https://www.cveoy.top/t/topic/pBDj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录