int main(int argc ,char* argv[]){
//    freopen( "CON", "wt", stdout );
//    SelfMadeBlocks(0);
    GameInitial();

    Sint32 key;
    SDL_Event gameEvent;

    MultThread = SDL_CreateThread(ThreadFunc,NULL);
    AIThread   = SDL_CreateThread(AIMain,NULL);
    while( gameOver == false ){
        //press ESC or click X to quit.
        while( SDL_PollEvent(&gameEvent) != 0 ){
            if ( gameEvent.type == SDL_QUIT ){
                gameOver = true;
            }
            if ( gameEvent.type == SDL_KEYDOWN ){
                if ( gameEvent.key.keysym.sym == SDLK_ESCAPE ){
                    gameOver = true;
                    return 0;
                }
                key = gameEvent.key.keysym.sym;
                if( key==SDLK_BACKSPACE ){
                    AIMode ^= 1;
                    Operation.ClearQ();
                    if( AIMode ){
                        Search();
                    }
                }
//                if( AIMode ){
//                    continue;
//                }
                switch( key ){
                    case SDLK_DOWN: AIPlayer.Operation.AddQ(MOVEDOWN);
                                    break;
                    case SDLK_LEFT: AIPlayer.Operation.AddQ(MOVELEFT);
                                    break;
                    case SDLK_RIGHT:AIPlayer.Operation.AddQ(MOVERIGHT);
                                    break;
                    case SDLK_UP  : AIPlayer.Operation.AddQ(ROTATE);
                                    break;
                    case SDLK_TAB : AIPlayer.Operation.AddQ(TURNNEXT);
                                    break;
                }
            }
        }
//        key = SDL_GetKeyState(NULL);                          //实现长按效果的第一个方法
//        if( key[SDLK_DOWN] )  Operation.AddQ(MOVEDOWN);
//        if( key[SDLK_LEFT] )  Operation.AddQ(MOVELEFT);
//        if( key[SDLK_RIGHT] ) Operation.AddQ(MOVERIGHT);
//        if( key[SDLK_UP] )    Operation.AddQ(ROTATE);

        SDL_Delay(1);                 //减轻CPU负担
    }
    SDL_KillThread(MultThread);
    SDL_KillThread(AIThread);
	pressESCtoQuit();
    return 0;
}
//////////////////////////////////////
//void OnGameStart()
//游戏开始
void CRussiaRectView::OnGameStart() 
{
	// TODO: Add your command handler code here
	//如果不是游戏暂停状态,则必须作些初始工作
	if (!m_bGamePause)  
	{
		//将游戏结束的标志设为false
		m_bGameEnd = false;	
		//进行一些初始化的工作
		GameInitial();
		//
		Invalidate(false);
		//双人模式
		if(!m_bOnePlayer)
		{
			SetTimer(2,1600-250*m_iLevel2,NULL);	
		}
	}
	m_bGamePause = false;
	SetTimer(1,1600-250*m_iLevel,NULL);		//设置计时器
	sndPlaySound(".\\kaishi.wav",SND_ASYNC);
}
CRussiaRectView::CRussiaRectView()
{
	// TODO: add construction code here
	m_iRow = MAP_ROW;			//地图行数
	m_iCol = MAP_COL;			//地图列数

	m_nWidth = 0;				//整个游戏窗口的宽度
	m_nHeight = 0;
	m_nWidth2 = 110;			//小窗口的大小
	m_nHeight2 = 150;

	m_iStartX = 10;				//左上角X,Y坐标
	m_iStartY = 10;
	m_iStartX2 = m_iStartX;		
	m_iStartY2 = m_iStartY;

	m_iStartPositionX = 0;		//形状生成时在顶部的纵向坐标
	m_iStartPositionY = 4;		//形状生成时在顶部的横向坐标

	m_iLarge = RECT_LENGTH;		//缺省方块大小为m_iLarge个象素
	//m_iBlockStyle = 2;		//第一种样式

	m_bOnePlayer = true;		//true为单人,false为双人模式
	m_bTwoPlayer = false;		//true为单人,false为双人模式

	m_bFistPlay = true;			//第一次开始游戏
	m_bGameReady = true;		//缺省游戏是处于准备好的状态
	m_bGameEnd = true;			//缺省游戏已经结束	
	m_bGamePause = false;		//缺省为不是游戏暂停状态
	m_bMusic = false;			//缺省为没有背景音乐
	m_sMusicName = "";
	m_bDrawGrid = true;			//缺省为画网格线
	
	m_iLevel = 3 ;				//缺省级别为3级	
	m_iLevel2 = 3 ;

	m_bConnectStatus = false;	//联机状态,false为未联机状态,true为联机状态
	m_iConnectStatus = 0;		//连接状态,0为服务器,1为客户机
	m_bConnectReady = false;

	GameInitial();				//初始化

	//19种形状的定义:编号按先下后上,先左后右的次序分别为四个方块编号
	//"1"
	shape[0].next=1;						//-0----------	
	shape[0].X[0]=0;shape[0].Y[0]=0;		//	-+--
	shape[0].X[1]=0;shape[0].Y[1]=-1;		//	-+--
	shape[0].X[2]=0;shape[0].Y[2]=-2;		//	-+--
	shape[0].X[3]=0;shape[0].Y[3]=-3;		//	-+--
	shape[0].color=0;
	//"1"变形1
	shape[1].next=0;						//-1-----------
	shape[1].X[0]=0;shape[1].Y[0]=0;		//	----
	shape[1].X[1]=1;shape[1].Y[1]=0;		//	----
	shape[1].X[2]=2;shape[1].Y[2]=0;		//	----
	shape[1].X[3]=-1;shape[1].Y[3]=0;		//	++++
	shape[1].color=0;
	//"7"
	shape[2].next=3;						//-2-----------
	shape[2].X[0]=0;shape[2].Y[0]=-2;		//	----
	shape[2].X[1]=1;shape[2].Y[1]=-2;		//	-++-
	shape[2].X[2]=1;shape[2].Y[2]=-1;		//	--+-
	shape[2].X[3]=1;shape[2].Y[3]=0;		//	--+-
	shape[2].color=1;
	//"7"变形1
	shape[3].next=4;						//-3-----------
	shape[3].X[0]=0;shape[3].Y[0]=0;		//	----
	shape[3].X[1]=1;shape[3].Y[1]=-1;		//	----
	shape[3].X[2]=2;shape[3].Y[2]=-1;		//	-+++
	shape[3].X[3]=0;shape[3].Y[3]=-1;		//	-+--
	shape[3].color=1;
	//"7"变形2
	shape[4].next=5;						//-4------------
	shape[4].X[0]=0;shape[4].Y[0]=0;		//	----
	shape[4].X[1]=0;shape[4].Y[1]=-1;		//	-+--
	shape[4].X[2]=0;shape[4].Y[2]=-2;		//	-+--
	shape[4].X[3]=1;shape[4].Y[3]=0;		//	-++-
	shape[4].color=1;
	//"7"变形3
	shape[5].next=2;						//-5------------
	shape[5].X[0]=0;shape[5].Y[0]=0;		//	----
	shape[5].X[1]=1;shape[5].Y[1]=0;		//	----
	shape[5].X[2]=2;shape[5].Y[2]=0;		//	---+
	shape[5].X[3]=2;shape[5].Y[3]=-1;		//	-+++
	shape[5].color=1;
	//反"7"
	shape[6].next=7;						//-6------------
	shape[6].X[0]=0;shape[6].Y[0]=0;		//	----
	shape[6].X[1]=0;shape[6].Y[1]=-1;		//	-++-
	shape[6].X[2]=0;shape[6].Y[2]=-2;		//	-+--
	shape[6].X[3]=1;shape[6].Y[3]=-2;		//	-+--
	shape[6].color=2;
	//反"7"变形1
	shape[7].next=8;						//-7------------
	shape[7].X[0]=0;shape[7].Y[0]=0;		//	----
	shape[7].X[1]=0;shape[7].Y[1]=-1;		//	----
	shape[7].X[2]=1;shape[7].Y[2]=0;		//	-+--
	shape[7].X[3]=2;shape[7].Y[3]=0;		//	-+++
	shape[7].color=2;
	//反"7"变形2
	shape[8].next=9;						//-8------------
	shape[8].X[0]=0;shape[8].Y[0]=0;		//	----
	shape[8].X[1]=1;shape[8].Y[1]=0;		//	--+-
	shape[8].X[2]=1;shape[8].Y[2]=-2;		//	--+-
	shape[8].X[3]=1;shape[8].Y[3]=-1;		//	-++-
	shape[8].color=2;
	//反"7"变形3
	shape[9].next=6;						//-9------------
	shape[9].X[0]=0;shape[9].Y[0]=-1;		//	----
	shape[9].X[1]=1;shape[9].Y[1]=-1;		//	----
	shape[9].X[2]=2;shape[9].Y[2]=-1;		//	-+++
	shape[9].X[3]=2;shape[9].Y[3]=0;		//	---+
	shape[9].color=2;
	//"T"
	shape[10].next=11;						//-10------------
	shape[10].X[0]=0;shape[10].Y[0]=0;		//	----
	shape[10].X[1]=0;shape[10].Y[1]=-1;		//	-+--
	shape[10].X[2]=0;shape[10].Y[2]=-2;		//	-++-
	shape[10].X[3]=1;shape[10].Y[3]=-1;		//	-+--
	shape[10].color=3;
	//"T"变形1
	shape[11].next=12;						//-11------------
	shape[11].X[0]=0;shape[11].Y[0]=0;		//	----
	shape[11].X[1]=1;shape[11].Y[1]=0;		//	----
	shape[11].X[2]=2;shape[11].Y[2]=0;		//	--+-
	shape[11].X[3]=1;shape[11].Y[3]=-1;		//	-+++
	shape[11].color=3;
	//"T"变形2
	shape[12].next=13;						//-12------------
	shape[12].X[0]=1;shape[12].Y[0]=0;		//	----
	shape[12].X[1]=1;shape[12].Y[1]=-1;		//	--+-
	shape[12].X[2]=1;shape[12].Y[2]=-2;		//	-++-
	shape[12].X[3]=0;shape[12].Y[3]=-1;		//	--+-
	shape[12].color=3;
	//"T"变形3
	shape[13].next=10;						//-13------------
	shape[13].X[0]=0;shape[13].Y[0]=-1;		//	----
	shape[13].X[1]=1;shape[13].Y[1]=0;		//	----
	shape[13].X[2]=2;shape[13].Y[2]=-1;		//	-+++
	shape[13].X[3]=1;shape[13].Y[3]=-1;		//	--+-
	shape[13].color=3;
	//S
	shape[14].next=15;						//-14------------
	shape[14].X[0]=0;shape[14].Y[0]=0;		//	----
	shape[14].X[1]=1;shape[14].Y[1]=0;		//	----
	shape[14].X[2]=1;shape[14].Y[2]=-1;		//	--++
	shape[14].X[3]=2;shape[14].Y[3]=-1;		//	-++-
	shape[14].color=4;
	//S变形1
	shape[15].next=14;						//-15------------
	shape[15].X[0]=0;shape[15].Y[0]=-1;		//	----
	shape[15].X[1]=0;shape[15].Y[1]=-2;		//	-+--	
	shape[15].X[2]=1;shape[15].Y[2]=-1;		//	-++-
	shape[15].X[3]=1;shape[15].Y[3]=0;		//	--+-	
	shape[15].color=4;
	//Z
	shape[16].next=17;						//-16------------
	shape[16].X[0]=0;shape[16].Y[0]=-1;		//	----
	shape[16].X[1]=1;shape[16].Y[1]=-1;		//	----
	shape[16].X[2]=1;shape[16].Y[2]=0;		//	-++-	
	shape[16].X[3]=2;shape[16].Y[3]=0;		//	--++
	shape[16].color=5;
	//Z变形1
	shape[17].next=16;						//-17-------------
	shape[17].X[0]=0;shape[17].Y[0]=0;		//	----
	shape[17].X[1]=0;shape[17].Y[1]=-1;		//	--+-
	shape[17].X[2]=1;shape[17].Y[2]=-1;		//	-++-
	shape[17].X[3]=1;shape[17].Y[3]=-2;		//	-+--
	shape[17].color=5;
	//方块
	shape[18].next=18;						//-18------------
	shape[18].X[0]=0;shape[18].Y[0]=0;		//	----
	shape[18].X[1]=1;shape[18].Y[1]=0;		//	----
	shape[18].X[2]=0;shape[18].Y[2]=-1;		//	-++-
	shape[18].X[3]=1;shape[18].Y[3]=-1;		//	-++-
	shape[18].color=6;	

}