给大家带来一个俄罗斯方块的c++小游戏。哦,对了,这个代码是李国良的原创,不是我的,登录原网站是www.cnblogs.com/yonggandefeng/p/6322561.html

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } };void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main()
{int map[21][12];int blockA[4][4];//候选区的方块int blockB[4][4];//下落中的方块int positionX, positionY;//方块左上角的坐标bool check;//检查方块还能不能下落char key;//用来存储按键int val;//用来控制下落速度int fraction;//用来存储得分int checkpoint;//用来存储关卡int times;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄initialWindow(hOut);
initial:gotoXY(hOut, 0, 0);initialPrint(hOut);check = true;val = 50;fraction = 0;checkpoint = 1;times = val;for (int i = 0; i < 20; ++i){for (int j = 1; j < 11; ++j){map[i][j] = 0;}}for (int i = 0; i < 20; ++i){map[i][0] = map[i][11] = 1;}for (int i = 0; i < 12; ++i){map[20][i] = 1;}srand((unsigned)time(NULL));roundBlock(hOut, blockA);while (true){if (check){eliminateRow(hOut, map, val, fraction, checkpoint);check = false;positionX = -3;positionY = 4;if (collisionDetection(blockA, map, positionX, positionY)){for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){blockB[i][j] = blockA[i][j];}}roundBlock(hOut, blockA);}else{gameOver(hOut, blockA, map);goto initial;}}printBlock(hOut, blockB, positionX, positionY);if (_kbhit()){key = _getch();switch (key){case 72:myUp(hOut, blockB, map, positionX, positionY);break;case 75:myLeft(hOut, blockB, map, positionX, positionY);break;case 77:myRight(hOut, blockB, map, positionX, positionY);break;case 80:switch (myDown(hOut, blockB, map, positionX, positionY)){case 0:check = false;break;case 1:check = true;break;case 2:gameOver(hOut, blockB, map);goto initial;default:break;}break;case 32:myStop(hOut, blockA);break;case 27:exit(0);default:break;}}Sleep(20);if (0 == --times){switch (myDown(hOut, blockB, map, positionX, positionY)){case 0:check = false;break;case 1:check = true;break;case 2:gameOver(hOut, blockB, map);goto initial;default:break;}times = val;}}cin.get();return 0;
}void initialWindow(HANDLE hOut)
{SetConsoleTitle("俄罗斯方块");COORD size = { 80, 25 };SetConsoleScreenBufferSize(hOut, size);SMALL_RECT rc = { 0, 0, 79, 24 };SetConsoleWindowInfo(hOut, true, &rc);CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };SetConsoleCursorInfo(hOut, &cursor_info);
}void initialPrint(HANDLE hOut)
{SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);for (int i = 0; i < 20; ++i){cout << "■                    ■☆                      ☆" << endl;}gotoXY(hOut, 26, 0);cout << "☆☆☆☆☆☆☆☆☆☆☆";gotoXY(hOut, 0, 20);cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";gotoXY(hOut, 26, 1);cout << "分    数:      ";gotoXY(hOut, 26, 2);cout << "关    卡:      ";gotoXY(hOut, 26, 4);cout << "下一方块:";gotoXY(hOut, 26, 9);cout << "操作方法:";gotoXY(hOut, 30, 11);cout << "↑:旋转 ↓:速降";gotoXY(hOut, 30, 12);cout << "→:右移 ←:左移";gotoXY(hOut, 30, 13);cout << "空格键:开始/暂停";gotoXY(hOut, 30, 14);cout << "Esc 键:退出";gotoXY(hOut, 26, 16);cout << "关    于:";gotoXY(hOut, 30, 18);cout << "俄罗斯方块V1.0";gotoXY(hOut, 35, 19);cout << "作者:李国良";
}void gotoXY(HANDLE hOut, int x, int y)
{COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(hOut, pos);
}void roundBlock(HANDLE hOut, int block[4][4])
{clearBlock(hOut, block, 5, 15);switch (rand() % 19){case 0:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}break;case 1:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block01[i][j];}}break;case 2:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block02[i][j];}}break;case 3:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block03[i][j];}}break;case 4:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block04[i][j];}}break;case 5:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block05[i][j];}}break;case 6:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block06[i][j];}}break;case 7:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block07[i][j];}}break;case 8:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block08[i][j];}}break;case 9:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block09[i][j];}}break;case 10:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block10[i][j];}}break;case 11:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block11[i][j];}}break;case 12:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block12[i][j];}}break;case 13:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block13[i][j];}}break;case 14:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block14[i][j];}}break;case 15:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block15[i][j];}}break;case 16:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block16[i][j];}}break;case 17:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block17[i][j];}}break;case 18:for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block18[i][j];}}break;default:break;}printBlock(hOut, block, 5, 15);
}bool collisionDetection(int block[4][4], int map[21][12], int x, int y)
{for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1){return false;}}}return true;
}void printBlock(HANDLE hOut, int block[4][4], int x, int y)
{switch (block[0][0]){case 10:case 11:SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);break;case 12:case 13:case 14:case 15:SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);break;case 16:case 17:case 18:case 19:SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);break;case 20:case 21:case 22:case 23:SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);break;case 24:case 25:SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);break;case 26:case 27:SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);break;case 28:SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);break;default:break;}for (int i = 0; i < 4; ++i){if (i + x >= 0){for (int j = 0; j < 4; ++j){if (block[i][j] == 1){gotoXY(hOut, 2 * (y + j), x + i);cout << "■";}}}}
}void clearBlock(HANDLE hOut, int block[4][4], int x, int y)
{for (int i = 0; i < 4; ++i){if (i + x >= 0){for (int j = 0; j < 4; ++j){if (block[i][j] == 1){gotoXY(hOut, 2 * (y + j), x + i);cout << "  ";}}}}
}void gameOver(HANDLE hOut, int block[4][4], int map[21][12])
{SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);gotoXY(hOut, 9, 8);cout << "GAME OVER";gotoXY(hOut, 8, 9);cout << "空格键:重来";gotoXY(hOut, 8, 10);cout << "ESC键:退出";char key;while (true){key = _getch();if (key == 32){return;}if (key == 27){exit(0);}}
}int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y)
{if (collisionDetection(block, map, x + 1, y)){clearBlock(hOut, block, x, y);++x;return 0;}if (x < 0){return 2;}for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){if (block[i][j] == 1){map[x + i][y + j] = 1;SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);gotoXY(hOut, 2 * (y + j), x + i);cout << "■";}}}return 1;
}void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{if (collisionDetection(block, map, x, y - 1)){clearBlock(hOut, block, x, y);--y;}
}void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{if (collisionDetection(block, map, x, y + 1)){clearBlock(hOut, block, x, y);++y;}
}void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{switch (block[0][0]){case 10:if (collisionDetection(block01, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block01[i][j];}}}break;case 11:if (collisionDetection(block00, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}}else if (collisionDetection(block00, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}--y;}else if (collisionDetection(block00, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}++y;}else if (collisionDetection(block00, map, x, y - 2)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}y = y - 2;}else if (collisionDetection(block00, map, x, y + 2)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block00[i][j];}}y = y + 2;}break;case 12:if (collisionDetection(block03, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block03[i][j];}}}else if (collisionDetection(block03, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block03[i][j];}}--y;}else if (collisionDetection(block03, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block03[i][j];}}++y;}break;case 13:if (collisionDetection(block04, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block04[i][j];}}}else if (collisionDetection(block04, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block04[i][j];}}--y;}else if (collisionDetection(block04, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block04[i][j];}}++y;}break;case 14:if (collisionDetection(block05, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block05[i][j];}}}else if (collisionDetection(block05, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block05[i][j];}}--y;}else if (collisionDetection(block05, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block05[i][j];}}++y;}break;case 15:if (collisionDetection(block02, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block02[i][j];}}}else if (collisionDetection(block02, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block02[i][j];}}--y;}else if (collisionDetection(block02, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block02[i][j];}}++y;}break;case 16:if (collisionDetection(block07, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block07[i][j];}}}else if (collisionDetection(block07, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block07[i][j];}}--y;}else if (collisionDetection(block07, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block07[i][j];}}++y;}break;case 17:if (collisionDetection(block08, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block08[i][j];}}}else if (collisionDetection(block08, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block08[i][j];}}--y;}else if (collisionDetection(block08, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block08[i][j];}}++y;}break;case 18:if (collisionDetection(block09, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block09[i][j];}}}else if (collisionDetection(block09, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block09[i][j];}}--y;}else if (collisionDetection(block09, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block09[i][j];}}++y;}break;case 19:if (collisionDetection(block06, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block06[i][j];}}}else if (collisionDetection(block06, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block06[i][j];}}--y;}else if (collisionDetection(block06, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block06[i][j];}}++y;}break;case 20:if (collisionDetection(block11, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block11[i][j];}}}else if (collisionDetection(block11, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block11[i][j];}}--y;}else if (collisionDetection(block11, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block11[i][j];}}++y;}break;case 21:if (collisionDetection(block12, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block12[i][j];}}}else if (collisionDetection(block12, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block12[i][j];}}--y;}else if (collisionDetection(block12, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block12[i][j];}}++y;}break;case 22:if (collisionDetection(block13, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block13[i][j];}}}else if (collisionDetection(block13, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block13[i][j];}}--y;}else if (collisionDetection(block13, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block13[i][j];}}++y;}break;case 23:if (collisionDetection(block10, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block10[i][j];}}}else if (collisionDetection(block10, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block10[i][j];}}--y;}else if (collisionDetection(block10, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block10[i][j];}}++y;}break;case 24:if (collisionDetection(block15, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block15[i][j];}}}else if (collisionDetection(block15, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block15[i][j];}}--y;}else if (collisionDetection(block15, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block15[i][j];}}++y;}break;case 25:if (collisionDetection(block14, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block14[i][j];}}}else if (collisionDetection(block14, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block14[i][j];}}--y;}else if (collisionDetection(block14, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block14[i][j];}}++y;}break;case 26:if (collisionDetection(block17, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block17[i][j];}}}else if (collisionDetection(block17, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block17[i][j];}}--y;}else if (collisionDetection(block17, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block17[i][j];}}++y;}break;case 27:if (collisionDetection(block16, map, x, y)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block16[i][j];}}}else if (collisionDetection(block16, map, x, y - 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block16[i][j];}}--y;}else if (collisionDetection(block16, map, x, y + 1)){clearBlock(hOut, block, x, y);for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){block[i][j] = block16[i][j];}}++y;}break;default:break;}
}void myStop(HANDLE hOut, int block[4][4])
{clearBlock(hOut, block, 5, 15);SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);gotoXY(hOut, 30, 7);cout << "游戏暂停";char key;while (true){key = _getch();if (key == 32){gotoXY(hOut, 30, 7);cout << "        ";printBlock(hOut, block, 5, 15);return;}if (key == 27){exit(0);}}
}void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint)
{SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);for (int i = 19; i >= 0; --i){int x = 0;for (int j = 1; j < 11; ++j){x += map[i][j];}if (x == 10){fraction += 100;if (val > 1 && fraction / 1000 + 1 != checkpoint){checkpoint = fraction / 1000 + 1;val -= 5;}for (int m = i; m > 0; --m){for (int n = 1; n < 11; ++n){map[m][n] = map[m - 1][n];gotoXY(hOut, 2 * n, m);if (map[m][n] == 1){cout << "■";}else{cout << "  ";}}}++i;}}gotoXY(hOut, 36, 1);cout << fraction;gotoXY(hOut, 36, 2);cout << checkpoint;
}

如何在c++中实现俄罗斯方块相关推荐

  1. 如何在SharePoint2010中添加Deep Zoom Image

    如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation:SharePoint 2010 Standard:SharePo ...

  2. php如何对数组进行分组,如何在PHP中对数组进行分组排序

    如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...

  3. html中section与div,如何在html中的section标签内包含div标签

    我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...

  4. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  5. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

    如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...

  6. 管理 zabbix_Zabbix 2019 峰会丨看睿象云如何在 Zabbix 中玩转告警

    2019年11月29日-30日,为期两天的 Zabbix 大会中国站在北京盛大召开,本届 Zabbix 大会以"新视界,新技术,共建未来新监控!"为主题,为与会人员提供前沿的监控技 ...

  7. 如何在JavaScript中实现链接列表

    If you are learning data structures, a linked list is one data structure you should know. If you do ...

  8. csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍

    csv文件示例 Welcome! If you want to start diving into data science and statistics, then data frames, CSV ...

  9. regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾

    regexp 好汉字符串 by Catherine Vassant (aka Codingk8) 由凯瑟琳·瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScrip ...

最新文章

  1. 关于ShapeDrawable应用的一些介绍(下)
  2. 这个牛逼技术你可千万别学!
  3. RAID磁盘阵列的原理与搭建
  4. Linux安装宝塔(Bt-Panel),修改用户名或密码,查看面板入口
  5. 【内核数据结构】 内核链表分析
  6. 【转】wifi的几种工作模式
  7. 读懂Android中的代码混淆
  8. Leetcode108. 有序数组转为二叉树
  9. 20190913每日一句
  10. python给定dna等分成两个序列_Biopython序列
  11. 码支付源码 无授权—个人免签约支付系统二维码收款即时到账源码
  12. 2022年中级会计中级经济学法考试复习题及答案
  13. 高性能平台设计——美团旅行结算平台实践
  14. 什么是基于模型的测试?
  15. JWT 生成Token、解析Token的简单工具类
  16. Matrix Profile介绍
  17. supervisor启动进程时报错“gave up: monitor entered FATAL state, too many start retries too quickly”
  18. 典型环节matlab仿真,实验一典型环节的matlab仿真
  19. python爬取学校教务管理系统_python爬虫模拟登陆学校教务处
  20. java写脸萌_Linux环境下配置JDK,java环境

热门文章

  1. WPS office Pro 安装教程
  2. ANSYS基础练习7——温度场问题
  3. 基于arduino的光控窗帘_光控窗帘
  4. 一个人没有在30岁以前达成科学上的最大成就,那他永远都不会
  5. 性能测试Locust--(6)非UI模式下运行Locust
  6. 手把手教你搭建Ngrok
  7. 接口优化的11种方法
  8. 韩寒的经典格言有哪些?
  9. 101个编程语言学习视频讲解
  10. python3集合学习