C++コンソールでロシアブロックを実現

3984 ワード

前に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};//                ,         
      
void Box::SetColor(int colorID)
{
	int n_color;
	switch(colorID)
	{
		case 0: n_color = 0x08;break;
		case 1: n_color = 0x0C;break;
		case 2: n_color = 0x0D;break;
		case 3: n_color = 0x0E;break;
		case 4: n_color = 0x0A;break;
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n_color);
}
void Box::DrawMap()//   
{
	int i;

	SetColor(0);//    

	for(i=0;i<14;i++)
	{
		 SetPos(i*2,0);
		 cout<='1')//    
	  {
		  level=x-'0';
		  break;
	  }
	}
}

void Box::UpdataMap()//    (  )
{
	 int clear;
	 int i,j,k;
	 int nx,ny;
	 int flag;
	 for(i=0;i<4;i++)//  map     
	 { 
		nx=hotpoint[0]+sharp[ID][i*2];
		ny=hotpoint[1]+sharp[ID][i*2+1];
		map[nx][ny]=1;
	 }
	 if(hotpoint[0]=top;k--)//               
			 {
				 if(k==0)//       
					 for(j=0;j<12;j++)
					 {
						 map[k][j]=0;
						 SetPos((j+1)*2,k+1);
						 cout<=Count)
		{
			i=0;//     
			if(Judge(hotpoint[0]+1,hotpoint[1]))//        (   )
			{
				 UpdataMap();//    
				 ID=nextID;//   ID,    ID     ID
				 hotpoint[0]=0;//    
				 hotpoint[1]=5;
                 Redraw(3,17,nextID);
				 nextID=rand()%15;
	             DrawBox(hotpoint[0],hotpoint[1],ID);
	             DrawBox(3,17,nextID);
				 if(Judge(hotpoint[0],hotpoint[1]))//        ,    
				 {
					 //getch();
					 system("cls");
					 SetPos(25,15);
					 cout<=23||ny<0||ny>=12||map[nx][ny]==1)//  ,  1
			return 1;
	}
	return 0;
}
void Box::Pause()
{
	system("cls");
	while(1)
	{	
		SetPos(30,13);
		cout<

void main()//   
{
	Box game;
    game.Welcome();
	system("cls");
	game.DrawMap();
	game.Run();
}
 
  
1、       ,         ,        。