最近网上有很多俄罗斯方块代码,但是我觉得画质不怎么好,于是改进了一下,希望对你有所帮助

老样子,直接上源码:

#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 () {MessageBox (NULL, "欢迎来到俄罗斯方块游戏!", "温馨提示", MB_OK);system ("mode coon cols=200 lines=100"); system ("mode con cols=70 lines=35");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 (--times == 0) {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);
}
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);string s = "GAME OVER";for (int i = 0; i < s.size (); i++) {Sleep (80);cout << s[i];}gotoXY (hOut, 8, 9);s = "空格键:重来";for (int i = 0; i < s.size (); i++) {Sleep (80);cout << s[i];}cout << endl;gotoXY (hOut, 8, 10);s = "ESC键:退出";MessageBox (NULL, "很遗憾,您输了!", "温馨提示", MB_OK);for (int i = 0; i < s.size (); i++) {Sleep (80);cout << s[i];}char key;while (true) {key = _getch ();if (key == 32) {return;} else 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 -= 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 += 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. 用VB6写的一个简单俄罗斯方块代码

    网络上有很多俄罗斯方块代码.它们大都为了视觉效果,程序比较复杂,不利于学习游戏编程.所以我写了个简单俄罗斯方块代码,尽量用VB本身的功能,没有复杂的DirectX. 下载(注意修改下载后的扩展名) m ...

  2. 一个很简短但很炫的html5代码(canvas画布)。。。。。

    最近在网上看到一个<一个很简短但很炫的html5代码>,特意收藏一下: [鼠标移入,酷炫样式] <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  3. 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代 ...

  4. 一个简单的录音软件程序代码【C++】

    一个简单的录音软件程序代码[C++]今天的院内绿草茵茵的 录音软件,岁月一去不回返,顽强拼搏,我将来的录音软件家是一栋三层的别墅,因为小树给我留下的是顽强拼搏,你见状,可你的眼睛好像在说,那盛夏的梧桐 ...

  5. HTML1个像素宽的代码,HTML5 Canvas中绘制一个像素宽的细线实现代码详情

    正统的HTML5 Canvas中如下代码ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(10, 100); ctx.lineTo(300,100); ct ...

  6. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

    本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug. 于是笔者将这个故事-哦不 -事 ...

  7. 撸一个自定义底部导航View 布局+代码实现导航栏

    撸一个自定义view,先上想要做成的效果图,可以看到我们默认选则的就是第二个按钮,中间图片不可替换,居中.有选中和非选中时展示不同的图片的效果.并且给外部实现点击时的回调,让外部知道当前点击的是哪个的 ...

  8. 分享一个很酷很炫的html5特效网站源码

    原创整理不易,转载请注明出处:分享一个很酷很炫的html5特效网站源码 代码下载地址:http://www.zuidaima.com/share/1784027301841920.htm 在线演示:h ...

  9. 请用数字灰度传感器和步进电机及A4988控制器和stm32设计一个巡线跑道的范例代码...

    很高兴能帮到您,为了设计一个巡线跑道的范例代码,首先要考虑的是灰度传感器和步进电机的控制电路问题,可以使用A4988控制器和STM32芯片来实现.首先要实现的是灰度传感器和步进电机的连接,然后编写程序 ...

最新文章

  1. 使用 jetty-maven-plugin发布maven项目
  2. MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;
  3. java.security.InvalidKeyException:illegal Key Size
  4. centos8安装并启动tomcat9
  5. android 通讯录 备份,安卓Android手机通讯录怎么备份 卓联系人备份 卓手机联系人导出...
  6. 自己动手写操作系统(二)一个最小的“操作系统”
  7. 在中国南方电网工作是一种怎样的体验?
  8. 简单的python案例_实现的简单python例子
  9. 计算机用公式找出第一名,用公式查找Excel工作表中重复数据
  10. Visio风格源代码组件库,流程图,矢量图,图形编辑,打印,导入,导出,VC++源代码...
  11. Zabbix钉钉机器人报警
  12. 离散数学第二版计算机系,《离散数学(第2版)(计算机系列教材)》
  13. 100套法律合同范本,赶快收藏以后签合同心里就有谱了
  14. matlab 光平面标定代码,光平面标定法
  15. 运筹帷幄之中决胜千里之外 菜鸟初识代码编程规范二 命名规范
  16. Vue2基础-el与data的两种写法(HTML版)
  17. 星星之火-50:无意中发现一种能够把网络视频下载到本地计算机中的方法
  18. 系统时变性与因果性的判断
  19. html5互动,制作H5页面有哪些趣味互动功能?
  20. Linux指令和对应的英文全称,Linux单横杠和双横杠的区别

热门文章

  1. unity网络实战开发(丛林战争)-正式开发阶段(018-声音管理器模块的完善)
  2. 目标跟踪算法KCF原理详解
  3. 使用Web技术来实现人民日报的点亮武汉
  4. 黑马程序员-学成在线-Eureka Feign
  5. 游戏策划学习:哲学好难
  6. html5取消下拉菜单,Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)...
  7. 「解读」华为云桌面说“高清”的时候,究竟在说什么?
  8. [.NET][ASP.NET MVC 5 网站开发之美]书籍内容介绍及pdf下载
  9. 微信小程序中显示html格式内容的方法
  10. 软件压力测试有哪些测试流程?软件测试报告收费情况