C++控制台实现俄罗斯方块游戏

2020-01-06 19:34:08刘景俊

之前学了些C++的课程,一直想着说编点小游戏,可是MFC又不想学,所以就只能变成控制台的小游戏。

俄罗斯方块一定是很多人小时候玩过的游戏。接下来就说说设计想法。

主要实现,选择游戏的等级,加速下降,不同形状不同颜色,暂停和退出功能。

首先是类的设计。


class Box 
{ 
  private: 
    int map[23][12];//画面坐标,记录有方块的点,也是游戏界面 
    int hotpoint[2];//当前活动的点,所有图形都是以此为基准绘制的 
    int top;//当前最高位置 
    int point;//分数 
    int level;//等级 
    int ID;//当前活动图形的ID号 
    int colorID;//图形的颜色ID。 
  public: 
    Box()//初始化 
    { 
      int i,j; 
      for(i=0;i<23;i++) 
        for(j=0;j<12;j++) 
          map[i][j]=0; 
      hotpoint[0]=0; 
      hotpoint[1]=5; 
      point=0; 
      level=1; 
      top=99; 
      ID=0; 
    } 
    void SetColor(int color);//颜色 
    void DrawMap();//画游戏的大界面 
    bool Judge(int x,int y);//判断当前位置能否绘制图形 
    void Welcome();//欢迎界面 
    void DrawBox(int x,int y,int num);//绘制图形 
    void Redraw(int x,int y,int num);//擦除图形 
    void Run();//运行 
    void Turn();//转动方块 
    void UpdataMap();//更新画面 
    void Pause();//暂停 
}; 

接下来就是一些常量和光标函数,便于保存和调用  


#define A1 0//A代表长条型,B为方块,C为L型,D为闪电型 
#define A2 1 
 
 
#define B 2 
 
 
#define C11 3 
#define C12 4 
#define C13 5 
#define C14 6 
 
 
#define C21 7 
#define C22 8 
#define C23 9 
#define C24 10 
 
 
#define D11 11 
#define D12 12 
 
 
#define D21 13 
#define D22 14 
 
 
void SetPos(int i,int j)//设定光标位置 
{ 
COORD pos={i,j}; 
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); 
} 
 
 
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};//这个数组是用来保存各个形状高度的,以上面的坐标相对应