C++实现俄罗斯方块(附代码)

您所在的位置:网站首页 俄罗斯方块里有哪些方块 C++实现俄罗斯方块(附代码)

C++实现俄罗斯方块(附代码)

2024-07-10 23:13| 来源: 网络整理| 查看: 265

俄罗斯方块

  还记得俄罗斯方块吗?相信这是小时候我们每个人都喜欢玩的一个小游戏。顾名思义,俄罗斯方块自然是俄罗斯人发明的。这人叫阿列克谢·帕基特诺夫。他设置这个游戏的规则是:由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

实现思路

那么问题就来了,如何用我们学过的C++去实现这个游戏呢?其实在写代码的时候,我们遵循的一个策略就是“拆分法”,从大的框架去一步步拆解成每个小的部分,然后这每个小的部分你都能用C++去实现它;要是拆分的小部分你还是实现不了,那就继续拆分,知道你能实现为止。比如这个俄罗斯方块的游戏,你的思路应该是这样:

1、画出游戏地图, 并留出下一图形和分数显示的位置 2、图形的建立和颜色 3、图形下落的实现以及上一图形的清除 4、是否能继续下落或变形的检测 5、某一行是否已满需清除以及清除功能与分数更新

实现代码如下代码语言:javascript复制#include #include #include #include #include #include #include using namespace std; class Tetris { private: int rank; //游戏难度等级 int score; // 得分 int id; //图形ID int point[2]; //两基点 int top; //最高点高度 public: Tetris(); void Welocme(); //首界面 void DrawMap(); //游戏界面 void SetColor(int); //控制颜色 void Draw(int, int, int); //画图形 void Run(); //运行游戏 void ReDraw(int, int, int); //清除图形 bool Judge(int, int, int); void Turn(int); //旋转 void Updata(); // 更新界面 void Pause(); //游戏暂停 void Input_score(); }; const int sharp[15][8] = //组成图形的各个点的各个坐标,先纵后横 { {0,0,1,0,2,0,3,0},{0,0,0,1,0,2,0,3}, {0,0,1,0,0,1,1,1}, {0,0,1,0,1,1,1,2},{0,1,1,1,2,0,2,1},{0,0,0,1,0,2,1,2},{0,0,0,1,1,0,2,0}, {1,0,1,1,1,2,0,2},{0,0,0,1,1,1,2,1},{0,0,0,1,0,2,1,0},{0,0,1,0,2,0,2,1}, {0,0,0,1,1,1,1,2},{0,1,1,0,1,1,2,0}, {0,1,0,2,1,0,1,1},{0,0,1,0,1,1,2,1} }; const int high[15] = { 4,1,2,2,3,2,3,2,3,2,3,2,3,2,3 }; int map[28][16]; #define a1 0 //条形 #define a2 1 #define b 2 // 方块 #define c1 3 //L形 #define c2 4 #define c3 5 #define c4 6 #define d1 7 //T形 #define d2 8 #define d3 9 #define d4 10 #define e1 11 //闪电1形 #define e2 12 #define f1 13 //闪电2形 #define f2 14 Tetris::Tetris() //构造函数, 初始化各个值 { point[0] = 0; point[1] = 5; score = 0; top = 25; } void Tetris::Turn(int num) //旋转函数 { switch (num) { case a1: id = a2; break; //条形互换 case a2: id = a1; break; case b: id = b; break; //方块无法旋转 case c1: id = c2; break; //各种L形互换 case c2: id = c3; break; case c3: id = c4; break; case c4: id = c1; break; case d1: id = d2; break; //各种T形互换 case d2: id = d3; break; case d3: id = d4; break; case d4: id = d1; break; case e1: id = e2; break; //两种闪电形互换 case e2: id = e1; break; case f1: id = f2; break; case f2: id = f1; break; } } void SetPos(int i, int j) //控制光标位置, 列, 行 { COORD pos = { i,j }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void Tetris::Pause() // 暂停函数 { SetPos(32, 10); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3