int AIThreadFunc(void * unused){ int old_time,cur_time,x,y; old_time = cur_time = SDL_GetTicks(); while( !AIPlayer.gameOver ){ while( AIPlayer.alive ){ while( !AIPlayer.Operation.isEmpty() && AIPlayer.alive){ EnterCriticalSection(&AIPlayer.cs); AIPlayer.Operation.DeleteQ(AIPlayer.command); AIPlayer.curblk.ClearCube(); switch( AIPlayer.command ){ case MOVEDOWN: AIPlayer.curblk.MoveDown(); break; case MOVELEFT: AIPlayer.curblk.MoveLeft(); break; case MOVERIGHT:AIPlayer.curblk.MoveRight(); break; case ROTATE : AIPlayer.curblk.Rotate(); break; } if( AIPlayer.command == TURNNEXT ){ //有的特殊命令最好特殊处理 AIPlayer.curblk.TurnNext(); break; } AIPlayer.curblk.DrawCube(); Screen.flip(); LeaveCriticalSection(&AIPlayer.cs); } cur_time = SDL_GetTicks(); SDL_Delay(1); if( cur_time - old_time < 400 ) continue; old_time = cur_time; AIPlayer.Operation.AddQ(MOVEDOWN); // old_time = cur_time; // x = AIPlayer.curblk.x; // y = AIPlayer.curblk.y; // if( AIPlayer.BestRotate>0 ){ // AIPlayer.Operation.AddQ(ROTATE); // AIPlayer.BestRotate -= 1; // continue; // } // if( AIPlayer.BestPath[x][y+1] ){ // AIPlayer.Operation.AddQ(MOVEDOWN); // AIPlayer.BestPath[x][y+1] = 0; // y += 1; // continue; // }else if( BestPath[x+1][y] ){ // AIPlayer.Operation.AddQ(MOVERIGHT); // AIPlayer.BestPath[x+1][y] = 0; // x += 1; // continue; // }else if( AIPlayer.BestPath[x-1][y] ){ // AIPlayer.Operation.AddQ(MOVELEFT); // AIPlayer.BestPath[x-1][y] = 0; // x -= 1; // continue; // } } while(AIPlayer.AIDelLine()); AIPlayer.Operation.ClearQ(); AIPlayer.AIShowCube(); // AIPlayer.Search(); AIPlayer.alive = 1; } return 0; }