用c++写一个俄罗斯方块小游戏
时间: 2023-08-04 09:19:51 浏览: 40
好的,下面是一个简单的俄罗斯方块小游戏的C++代码:
```c++
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
const int map_width = 10; // 地图宽度
const int map_height = 20; // 地图高度
int map[map_height][map_width] = {0}; // 地图数组,0表示空格,1表示有方块
int block[4][4] = {0}; // 方块数组
int block_x = 0; // 方块x坐标
int block_y = 0; // 方块y坐标
int score = 0; // 得分
// 初始化方块
void init_block() {
srand(time(NULL));
int type = rand() % 7;
switch (type) {
case 0: // I型方块
block[0][1] = 1;
block[1][1] = 1;
block[2][1] = 1;
block[3][1] = 1;
break;
case 1: // J型方块
block[0][0] = 1;
block[1][0] = 1;
block[1][1] = 1;
block[1][2] = 1;
break;
case 2: // L型方块
block[0][2] = 1;
block[1][0] = 1;
block[1][1] = 1;
block[1][2] = 1;
break;
case 3: // O型方块
block[0][0] = 1;
block[0][1] = 1;
block[1][0] = 1;
block[1][1] = 1;
break;
case 4: // S型方块
block[0][1] = 1;
block[0][2] = 1;
block[1][0] = 1;
block[1][1] = 1;
break;
case 5: // T型方块
block[0][1] = 1;
block[1][0] = 1;
block[1][1] = 1;
block[1][2] = 1;
break;
case 6: // Z型方块
block[0][0] = 1;
block[0][1] = 1;
block[1][1] = 1;
block[1][2] = 1;
break;
}
block_x = map_width / 2 - 2;
}
// 绘制地图
void draw_map() {
system("cls"); // 清屏
for (int i = 0; i < map_height; i++) {
for (int j = 0; j < map_width; j++) {
if (map[i][j] == 0) {
cout << ".";
} else {
cout << "#";
}
}
cout << endl;
}
cout << "Score: " << score << endl;
}
// 绘制方块
void draw_block() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
map[block_y + i][block_x + j] = 1;
}
}
}
}
// 检测是否可以下落
bool can_fall() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
if (block_y + i == map_height - 1) {
return false;
}
if (map[block_y + i + 1][block_x + j] == 1) {
return false;
}
}
}
}
return true;
}
// 将方块固定到地图上
void fix_block() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (block[i][j] == 1) {
map[block_y + i][block_x + j] = 1;
}
}
}
}
// 消除满行
void clear_lines() {
for (int i = map_height - 1; i >= 0; i--) {
int count = 0;
for (int j = 0; j < map_width; j++) {
if (map[i][j] == 1) {
count++;
}
}
if (count == map_width) {
score += 10;
for (int k = i; k > 0; k--) {
for (int j = 0; j < map_width; j++) {
map[k][j] = map[k - 1][j];
}
}
i++; // 继续检测当前行
}
}
}
int main() {
init_block();
while (true) {
draw_map();
draw_block();
if (!can_fall()) {
fix_block();
clear_lines();
init_block();
if (!can_fall()) {
break;
}
}
block_y++;
if (_kbhit()) { // 检测键盘输入
char ch = _getch();
if (ch == 'a' && block_x > 0) { // 左移
block_x--;
}
if (ch == 'd' && block_x < map_width - 4) { // 右移
block_x++;
}
if (ch == 's') { // 加速下落
while (can_fall()) {
block_y++;
}
}
if (ch == 'q') { // 退出游戏
return 0;
}
}
Sleep(100); // 延时
}
cout << "Game Over!" << endl;
return 0;
}
```
注意,本代码只是一个简单的示例,有很多地方可以进行优化和改进,例如:加入游戏界面、增加难度等。
阅读全文