Green1127

C++代码存放设施 site - 01 所有UTF-8已同步

博客园 首页 新随笔 联系 订阅 管理
麻将
#include <windows.h>  
#include <iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;  
 #define MJPAI_ZFB               0   //中,发,白  
#define MJPAI_FENG              1   //东西南北风  
#define MJPAI_WAN               2   //万  
#define MJPAI_TIAO              3   //条  
#define MJPAI_BING              4   //饼  
#define MJPAI_HUA               5   //花  
 #define MJPAI_GETPAI            true    //起牌  
#define MJPAI_PUTPAI            false   //打牌  
//节点信息  
struct stPAI  
{  
    int     m_Type;             //牌类型  
    int     m_Value;            //牌字  
 }  
;  
 //吃牌顺  
struct stCHI                      
{  
    int     m_Type;             //牌类型  
    int     m_Value1;           //牌字  
    int     m_Value2;           //牌字  
    int     m_Value3;           //牌字  
}  
;  
//  m_Type      m_Value  
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//  
//  0       |   中   1   发2  白                                               
//          |  
//  1       |   东 1 西2  南     北                                    
//          |  
//  2       |   一万  二万  ……  九万  
//          |  
//  3       |   一条  二条  ……  九条                    
//          |  
//  4       |   一饼  二饼  ……  九饼  
//          |  
//  5       |   春       夏       秋       东       竹       兰       梅       菊  
//          |  
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//  
 //胡牌信息  
struct stGoodInfo  
{  
    char    m_GoodName[100];            //胡牌术语  
    int     m_GoodValue;                //胡牌番数  
}  
;  
//牌  
class CMJ  
{  
    vector<  int >        m_MyPAIVec[6];      //起的种牌型  
    vector<  int >        m_ChiPAIVec[6];     //吃的种牌型  
    vector<  int >        m_PengPAIVec[6];    //碰的种牌型  
    vector<  int >        m_GangPAIVec[6];    //杠的种牌型  
     stPAI               m_LastPAI;          //最后起的牌  
    stGoodInfo          m_GoodInfo;         //胡牌信息  
     bool                m_9LBD;             //是否听连宝灯牌型  
    bool                m_13Y;              //是否听十三幺  
    int                 m_MKNum;            //明刻数  
    int                 m_AKNum;            //暗刻数  
    bool                m_4AK;              //是否是听四暗刻  
     vector<  stCHI >      m_TempChiPAIVec;    //吃的可选组合  
    vector<  stPAI >      m_TempPengPAIVec;   //碰的可选组合  
    vector<  stPAI >      m_TempGangPAIVec;   //杠的可选组合  
 public:  
     //构造  
    CMJ();  
    //析构  
    ~CMJ();  
    //初始化  
    void            Init();  
    //起牌  
    bool            AddPai(int p_Type,int p_Value);  
    //取得对应的牌在牌墙的索引  
    int             GetPaiIndex(int p_Type,int p_Value);  
    //打牌(参数为对应的牌在牌墙的索引)  
    bool            DelPai(int PaiIndex);  
    //删除牌  
    bool            DelPai(int p_Type,int p_Value);  
    //清空牌  
    void            CleanUp();  
    //取得胡牌信息  
    stGoodInfo      *GetInfo();  
    //检测是否胡牌  
    bool            CheckAllPai(bool GetOrPut);  
    //对所有的牌进行输出  
    void            PrintAllPai();  
    //对一张牌进行输出  
    void            PrintPai(int p_Type,int p_Value);  
    //吃牌  
    bool            CheckChiPai(int p_Type,int p_Value);  
    //吃牌  
    bool            DoChiPai(int p_iIndex,int p_Type,int p_Value);  
    //碰牌  
    bool            CheckPengPai(int p_Type,int p_Value);  
    //碰牌  
    bool            DoPengPai(int p_Type,int p_Value);  
    //杠牌  
    bool            CheckGangPai(int p_Type,int p_Value);  
    //杠牌  
    bool            DoGangPai(int p_Type,int p_Value);  
    //对可吃的组合进行输出  
    void            PrintChiChosePai();  
    //对可碰的组合进行输出  
    void            PrintPengChosePai();  
    //对可杠的组合进行输出  
    void            PrintGangChosePai();  
    //取得吃牌组合数  
    UINT            GetChiChoseNum();  
 private:  
     //检测是否胡牌(张)  
    bool    CheckAAPai(int iValue1,int iValue2);  
    //检测是否三连张  
    bool    CheckABCPai(int iValue1,int iValue2,int iValu3);  
    //检测是否三重张  
    bool    CheckAAAPai(int iValue1,int iValue2,int iValu3);  
    //检测是否四重张  
    bool    CheckAAAAPai(int iValue1,int iValue2,int iValu3,int iValue4);  
    //检测是否三连对  
    bool    CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);  
    //检测是否三连高压  
    bool    CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);  
    //检测是否三连刻  
    bool    CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
    //检测是否六连对  
    bool    CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
    //带将牌检测=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
     //检测是否胡牌(张)  
    bool    Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5);  
    //检测是否胡牌(张)  
    bool    Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8);  
    //检测是否胡牌(张)  
    bool    Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11);  
    //检测是否胡牌(张)  
    bool    Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14);  
     //不带将牌检测-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
     //检测是否胡牌(张)  
    bool    Check3Pai(int iValue1,int iValue2,int iValue3);  
    //检测是否胡牌(张)  
    bool    Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);  
    //检测是否胡牌(张)  
    bool    Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);  
    //检测是否胡牌(张)  
    bool    Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
 private:      
    //胡牌判断  
     //检测是否胡大四喜  
    bool    CheckD4X_HU();  
    //检则是否胡大三元  
    bool    CheckD3Y_HU();  
    //检测是否胡绿一色  
    bool    CheckL1S_HU();  
    //检测是否胡九莲宝灯  
    bool    Check9LBD_HU();  
    //检测是否胡四杠  
    bool    Check4Gang_HU();  
    //检测是否胡连七对  
    bool    CheckL7D_HU();  
    //检测是否胡十三幺  
    bool    Chekc13Y_HU();  
    //检测是否胡清幺九  
    bool    CheckQY9_HU();  
    //检测是否胡小四喜  
    bool    CheckX4X_HU();  
    //检测是否胡小三元  
    bool    CheckX3Y_HU();  
    //检测是否胡字一色  
    bool    CheckZ1S_HU();  
    //检测是否四暗刻  
    bool    Check4AK_HU();  
    //检测是否一色双龙会  
    bool    Check1S2LH_HU();  
    //检测是否一色四同顺  
    bool    Check1S4TS_HU();  
    //检测是否一色四节高?  
    bool    Check1S4JG_HU();  
    //检测是否一色四步高?  
    bool    Check1S4BG_HU();  
    //检测是否三杠  
    bool    Check3Gang_HU();  
    //检测是否混幺九  
    bool    CheckHY9_HU();  
    //检测是否七对  
    bool    Check7D_HU();  
    //检测是否七星不靠  
    bool    Check7XBK_HU();  
    //检测是否全双刻?  
    bool    CheckQSK_HU();  
    //清一色  
    bool    CheckQ1S_HU();  
    //检测是否一色三同顺  
    bool    Check1S3TS_HU();  
    //检测是否一色三节高  
    bool    Check1S3JG_HU();  
    //检测是否全大  
    bool    CheckQD_HU();  
    //检测是否全中  
    bool    CheckQZ_HU();  
    //检测是否全小  
    bool    CheckQX_HU();  
    //检测是否青龙  
    bool    CheckQL_HU();  
    //检测是否三色双龙会  
    bool    Check3S2LH_HU();  
    //检测是否一色三步高  
    bool    Check1S3BG_HU();  
    //全带五  
    bool    CheckQD5_HU();  
    //三同刻  
    bool    Check3TK_HU();  
    //三暗刻  
    bool    Check3AK_HU();  
    //单钓将  
    bool    CheckDDJ_HU();  
    //检测胡  
    bool    CheckHU();  
private:  
    //听牌判断  
     //检测是否听九莲宝灯  
    bool    Check9LBD_TING();  
    //检测是否听十三幺  
    bool    Check13Y_TING();  
    //检测是否听四暗刻  
    bool    Check4AK_TING();  
    //检测是否听牌  
    bool    CheckTING();  
 }  
;  
 //构造  
CMJ::CMJ()  
{  
    m_9LBD  = false;  
    m_13Y   = false;  
    m_4AK   = false;  
    m_AKNum = 0;  
    m_MKNum = 0;  
}  
 //析构  
CMJ::~CMJ()  
{  
 }  
//初始化  
void   CMJ::Init()  
{  
    m_9LBD  = false;  
    m_13Y   = false;  
    m_4AK   = false;  
    m_AKNum = 0;  
    m_MKNum = 0;  
}  
//加入新牌,并排序  
bool    CMJ::AddPai(int p_Type,int p_Value)  
{  
    int iSize = m_MyPAIVec[p_Type].size();  
    bool t_Find = false;  
    vector<  int >::iterator Iter;  
    for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)  
    {  
        if((*Iter)>p_Value)  
        {  
            m_MyPAIVec[p_Type].insert(Iter,p_Value);  
            t_Find = true;  
            break;  
        }  
     }  
     if(t_Find==false)  
    {  
        m_MyPAIVec[p_Type].push_back(p_Value);  
    }  
    m_LastPAI.m_Type    = p_Type;  
    m_LastPAI.m_Value   = p_Value;  
     return true;  
}  
 //取得对应的牌在牌墙的索引  
int CMJ::GetPaiIndex(int p_Type,int p_Value)  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)  
        {  
            if(p_Type==i&&(*Iter)==p_Value)  
            {  
                return count;  
            }  
            count++;  
        }  
    }  
    return -1;  
}  
//打牌  
bool    CMJ::DelPai(int PaiIndex)  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)  
        {  
            if(count==PaiIndex)  
            {  
                m_MyPAIVec[i].erase(Iter);  
                return true;  
            }  
            count++;  
        }  
    }  
    return false;  
}  
//删除牌  
bool    CMJ::DelPai(int p_Type,int p_Value)  
{  
    vector<  int >::iterator Iter;  
    for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)  
    {  
        if((*Iter)==p_Value)  
        {  
            m_MyPAIVec[p_Type].erase(Iter);  
            return true;  
        }  
    }  
    return false;  
}  
//清空牌  
void    CMJ::CleanUp()  
{  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        m_MyPAIVec[i].clear();  
        m_ChiPAIVec[i].clear();  
        m_PengPAIVec[i].clear();  
        m_GangPAIVec[i].clear();  
    }  
}  
//取得胡牌信息  
stGoodInfo      *CMJ::GetInfo()  
{  
    return &m_GoodInfo;  
}  
 //对所有的牌进行函数调用  
void    CMJ::PrintAllPai()  
{  
    cout<<" ";  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        cout<<i<<"  - ";  
    }  
    cout<<endl;  
    int icount = 0;  
    //箭牌  
    if(m_MyPAIVec[0].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[0].begin();Iter !=m_MyPAIVec[0].end(); Iter++)  
        {  
            switch(*Iter)  
            {  
            case 1:  
                cout<<"[ 中]";  
                break;  
            case 2:  
                cout<<"[ 发]";  
                break;  
            case 3:  
                cout<<"[ 白]";  
                break;  
             }  
            icount++;  
        }  
     }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //风牌  
    if(m_MyPAIVec[1].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[1].begin();Iter !=m_MyPAIVec[1].end(); Iter++)  
        {  
            switch(*Iter)  
            {  
            case 1:  
                cout<<"[ 东]";  
                break;  
            case 2:  
                cout<<"[ 南]";  
                break;  
            case 3:  
                cout<<"[ 西]";  
                break;  
            case 4:  
                cout<<"[ 北]";  
                break;  
            }  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //万  
    if(m_MyPAIVec[2].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[2].begin();Iter !=m_MyPAIVec[2].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"万]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //条  
    if(m_MyPAIVec[3].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[3].begin();Iter !=m_MyPAIVec[3].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"条]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //饼  
    if(m_MyPAIVec[4].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[4].begin();Iter !=m_MyPAIVec[4].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"饼]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
}  
//对一张牌进行输出  
void CMJ::PrintPai(int p_Type,int p_Value)  
{  
//箭牌  
    if(p_Type==0)  
    {  
        switch(p_Value)  
        {  
        case 1:  
            cout<<"[中]";  
            break;  
        case 2:  
            cout<<"[发]";  
            break;  
        case 3:  
            cout<<"[白]";  
            break;  
        }  
    }  
    //风牌  
    if(p_Type==1)  
    {  
        switch(p_Value)  
        {  
        case 1:  
            cout<<"[东]";  
            break;  
        case 2:  
            cout<<"[南]";  
            break;  
        case 3:  
            cout<<"[西]";  
            break;  
        case 4:  
            cout<<"[北]";  
            break;  
        }  
    }  
    //万  
    if(p_Type==2)  
    {  
        cout<<"["<<p_Value<<"万]";  
    }  
    //条  
    if(p_Type==3)  
    {  
        cout<<"["<<p_Value<<"条]";  
    }  
    //饼  
    if(p_Type==4)  
    {  
        cout<<"["<<p_Value<<"饼]";  
    }  
}  
 //吃牌  
bool    CMJ::CheckChiPai(int p_Type,int p_Value)  
{  
    m_TempChiPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 2)  
        {  
            for(UINT i = 0 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==(p_Value-2))&&(m_MyPAIVec[p_Type][i+1]==(p_Value-1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-2;  
                    t_Chi.m_Value2 = p_Value-1;  
                    t_Chi.m_Value3 = p_Value;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                 }  
                if((m_MyPAIVec[p_Type][i]==(p_Value-1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                 }  
                if((m_MyPAIVec[p_Type][i]==(p_Value+1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+2)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value;  
                    t_Chi.m_Value2 = p_Value+1;  
                    t_Chi.m_Value3 = p_Value+2;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
         }  
        //假设吃B,已有ABC  
        if( iSize >= 3)  
        {  
            for(UINT i = 1 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBC  
        if( iSize >= 4)  
        {  
            for(UINT i = 1 ; i < iSize-2 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBBC  
        if( iSize >= 5)  
        {  
            for(UINT i = 1 ; i < iSize-3 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+3]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBBBC  
        if( iSize >= 6)  
        {  
            for(UINT i = 1 ; i < iSize-4 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+4]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        if(m_TempChiPAIVec.size() > 0)  
        {  
            return  true;  
        }  
    }  
    return false;  
}  
//吃牌  
bool CMJ::DoChiPai(int p_iIndex,int p_Type,int p_Value)  
{   
    AddPai(p_Type,p_Value);  
    vector<stCHI>::iterator Iter;  
    int icount = 0;  
    for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end(); Iter++ )  
    {  
        if(icount == p_iIndex)  
        {  
            DelPai((*Iter).m_Type,(*Iter).m_Value1);  
            DelPai((*Iter).m_Type,(*Iter).m_Value2);  
            DelPai((*Iter).m_Type,(*Iter).m_Value3);  
             m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value1);  
            m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value2);  
            m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value3);  
             return true;  
        }  
        icount++;  
    }  
    return false;  
}  
//对可吃的组合进行输出  
void CMJ::PrintChiChosePai()  
{  
    cout<<"================吃牌组合======================="<<endl;  
    vector<stCHI>::iterator Iter;  
    for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"万";  
            cout<<""<<(*Iter).m_Value2<<"万";  
            cout<<""<<(*Iter).m_Value3<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"条";  
            cout<<""<<(*Iter).m_Value2<<"条";  
            cout<<""<<(*Iter).m_Value3<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"饼";  
            cout<<""<<(*Iter).m_Value2<<"饼";  
            cout<<""<<(*Iter).m_Value3<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//对可碰的组合进行输出  
void CMJ::PrintPengChosePai()  
{  
    cout<<"=====================碰牌=================="<<endl;  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//对可杠的组合进行输出  
void CMJ::PrintGangChosePai()  
{  
    cout<<"====================杠牌==================="<<endl;  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//取得吃牌组合数  
UINT CMJ::GetChiChoseNum()  
{  
    return m_TempChiPAIVec.size();  
}  
//碰牌  
bool    CMJ::CheckPengPai(int p_Type,int p_Value)  
{  
    m_TempPengPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 2)  
        {  
            for(UINT i = 0 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value))  
                {  
                    stPAI t_Peng;  
                    t_Peng.m_Type   = p_Type;  
                    t_Peng.m_Value  = p_Value;  
                    m_TempPengPAIVec.push_back(t_Peng);  
                    break;  
                }  
            }  
        }  
        if(m_TempPengPAIVec.size() > 0)  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//碰牌  
bool    CMJ::DoPengPai(int p_Type,int p_Value)  
{  
    AddPai(p_Type,p_Value);  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end(); Iter++ )  
    {  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
         m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        return true;  
    }  
    return false;  
}  
//杠牌  
bool    CMJ::CheckGangPai(int p_Type,int p_Value)  
{     
    m_TempGangPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 3)  
        {  
            for(UINT i = 0 ; i < iSize-2 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==p_Value))  
                {  
                    stPAI t_Gang;  
                    t_Gang.m_Type   = p_Type;  
                    t_Gang.m_Value  = p_Value;  
                    m_TempGangPAIVec.push_back(t_Gang);  
                    break;  
                }  
            }  
        }  
        if(m_TempGangPAIVec.size() > 0)  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//杠牌  
bool    CMJ::DoGangPai(int p_Type,int p_Value)  
{  
    AddPai(p_Type,p_Value);  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end(); Iter++ )  
    {  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
         //排序放入  
        if(m_GangPAIVec[(*Iter).m_Type].empty())  
        {  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        }  
        else  
        {  
                vector<int>::iterator Iter2;  
                for(Iter2 = m_GangPAIVec[(*Iter).m_Type].begin(); Iter2 != m_GangPAIVec[(*Iter).m_Type].end(); Iter2++ )  
                {  
                    if((*Iter2)>(*Iter).m_Value)  
                    {  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        break;  
                    }  
                }  
        }  
        return true;  
    }  
    return false;  
}  
//检测是否胡牌  
bool    CMJ::CheckAllPai(bool GetOrPut)  
{  
    if(GetOrPut == MJPAI_GETPAI)  
    {  
        //检查大四喜  
        if(CheckD4X_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"大四喜");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查大三元  
        if(CheckD3Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"大三元");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查绿一色  
        if(CheckL1S_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"绿一色");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查九莲宝灯  
        if(Check9LBD_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"九莲宝灯");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查四杠  
        if(Check4Gang_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"四杠");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查连七对  
        if(CheckL7D_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"连七对");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查十三幺  
        if(Chekc13Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"十三幺");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查清幺九  
        if(CheckQY9_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"清幺九");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检查小四喜  
        if(CheckX4X_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"小四喜");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检查小三元  
        if(CheckX3Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"小三元");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否四暗刻  
        if(Check4AK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"四暗刻");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否一色双龙会  
        if(Check1S2LH_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色双龙会");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否一色四同顺  
        if(Check1S4TS_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四同顺");  
            m_GoodInfo.m_GoodValue = 48;  
            return true;  
        }  
        //检测是否一色四节高  
        if(Check1S4JG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四节高");  
            m_GoodInfo.m_GoodValue = 48;  
            return true;  
        }  
        //检测是否一色四步高  
        if(Check1S4BG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四步高");  
            m_GoodInfo.m_GoodValue = 32;  
            return true;  
        }  
        //检测是否三杠  
        if(Check3Gang_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"三杠");  
            m_GoodInfo.m_GoodValue = 32;  
            return true;  
        }  
         //检测是否七对  
        if(Check7D_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"七对");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否七星不靠  
        if(Check7XBK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"七星不靠");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全双刻  
        if(CheckQSK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全双刻");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否清一色  
        if(CheckQ1S_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"清一色");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否一色三同顺  
        if(Check1S3TS_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三同顺");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否一色三节高  
        if(Check1S3JG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三节高");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全大  
        if(CheckQD_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全大");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全中  
        if(CheckQZ_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全中");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全小  
        if(CheckQX_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全小");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否青龙  
        if(CheckQL_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"青龙");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
        //检测是否三色双龙会  
        if(Check3S2LH_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"三色双龙会");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
        //检测是否一色三步高  
        if(Check1S3BG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三步高");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
         //检测是否单调将  
        if(CheckDDJ_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"单调将");  
            m_GoodInfo.m_GoodValue = 1;  
            return true;  
        }  
         //检测是否平胡  
        if(CheckHU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"平胡");  
            m_GoodInfo.m_GoodValue = 1;  
            return true;  
        }  
     }         
    else  
    {  
        //判断是否听连宝灯  
        m_9LBD = Check9LBD_TING();   
        if(m_9LBD)return true;  
        //判断是否听幺  
        m_13Y  = Check13Y_TING();  
        if(m_13Y)return true;  
        //判断是否四暗刻  
        m_4AK  = Check4AK_TING();  
        if(m_4AK)return true;  
        //检测是否听头  
        return CheckTING();  
    }  
    return false;  
}  
 //检测是否胡牌(张)  
inline bool CMJ::CheckAAPai(int iValue1,int iValue2)  
{  
    if(iValue1 == iValue2)return true;  
    return false;  
}  
 //检测是否三连张  
inline bool CMJ::CheckABCPai(int iValue1,int iValue2,int iValue3)  
{  
    if(iValue1 == (iValue2-1)&&iValue2 == (iValue3-1))return true;  
    return false;  
}  
 //检测是否三重张  
inline bool CMJ::CheckAAAPai(int iValue1,int iValue2,int iValue3)  
{  
    if(iValue1 == iValue2&&iValue2 == iValue3)return true;  
    return false;  
}  
 //检测是否四重张  
inline bool CMJ::CheckAAAAPai(int iValue1,int iValue2,int iValue3,int iValue4)  
{  
    if(iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)return true;  
    return false;  
}  
//检测是否三连对  
inline bool CMJ::CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)  
{  
    if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6)  
    {  
        if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1))  
        {  
            return true;  
        }  
    }  
    return false;     
}  
//检测是否三连高压  
inline bool CMJ::CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)  
{  
    if((iValue1 == iValue2&&iValue2 == iValue3)&&(iValue4 == iValue5&&iValue5 == iValue6)&&(iValue7 == iValue8&&iValue8 == iValue9))  
    {  
        if((iValue1 == iValue4-1)&&(iValue4 == iValue7-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//检测是否三连刻  
inline bool CMJ::CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if((iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)&&(iValue5 == iValue6&&iValue6 == iValue7&&iValue7 == iValue8)&&(iValue9 == iValue10&&iValue10 == iValue11&&iValue11 == iValue12))  
    {  
        if((iValue1 == iValue5-1)&&(iValue5 == iValue9-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//检测是否六连对  
inline bool CMJ::CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6&&iValue7 == iValue8&&iValue9 == iValue10&&iValue11 == iValue12)  
    {  
        if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1)&&(iValue5 == iValue7-1)&&(iValue7 == iValue9-1)&&(iValue9 == iValue11-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
 //检测是否胡牌(张)  
bool    CMJ::Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        if(Check3Pai(iValue3,iValue4,iValue5))return true;  
     }  
    //如果中间两个为将  
    if(CheckAAAPai(iValue2,iValue3,iValue4))  
    {  
        if(CheckABCPai(iValue1,iValue4,iValue5))return true;  
    }  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        if(Check3Pai(iValue1,iValue2,iValue3))return true;  
    }  
     return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        return Check6Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8);  
    }  
     //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue6,iValue7,iValue8))return true;  
    }  
     //如果是右边两个为将,左边为三重张或三连张  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        return Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6);  
    }  
     return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11)  
{  
    //如果是左边两个为将  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        return Check9Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11);      
    }  
     //如果是中间两个为将  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;    
    }  
     //如果是右边两个为将  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue9,iValue10,iValue11)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    }  
     //如果是右边两个为将  
    if(CheckAAPai(iValue10,iValue11))  
    {  
        return Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9);  
    }  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        //无AAA,全ABC  
        if(Check12Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
     //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check9Pai(iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
     //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        //无AAA,全ABC  
        if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
     //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue10,iValue11))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue12,iValue13,iValue14)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
        return false;  
    }  
     //如果是右边两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue13,iValue14))  
    {  
        //无AAA,全ABC  
        if(Check12Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    }  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check3Pai(int iValue1,int iValue2,int iValue3)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3))return true;  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)  
{  
    if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;  
    if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;  
    //三连对  
    if(CheckAABBCCPai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    //第一张牌四连张  
    if(CheckAAAAPai(iValue2,iValue3,iValue4,iValue5))  
    {  
        if(CheckABCPai(iValue1,iValue2,iValue6))return true;  
    }  
    return false;  
}  
 //检测是否胡牌(张)  
bool    CMJ::Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckABCPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    if(CheckAAAPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
     return false;  
}  
 //检测是否胡牌(张)  
bool    CMJ::Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    if(CheckABCPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckAAAPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
     return false;  
}  
//检测是否是大四喜  
bool    CMJ::CheckD4X_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[1].size()==16)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
 }  
 //检则是否是大三元  
bool    CMJ::CheckD3Y_HU()  
{  
    //中发白三杠  
    if(m_GangPAIVec[0].size()==12)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
}  
 //检测是否绿一色  
bool    CMJ::CheckL1S_HU()  
{  
    //只准有发财和条  
    if(m_MyPAIVec[1].size()>0)return false;  
    if(m_MyPAIVec[2].size()>0)return false;  
    if(m_MyPAIVec[4].size()>0)return false;  
    if(m_MyPAIVec[5].size()>0)return false;  
    if(m_ChiPAIVec[1].size()>0)return false;  
    if(m_ChiPAIVec[2].size()>0)return false;  
    if(m_ChiPAIVec[4].size()>0)return false;  
    if(m_ChiPAIVec[5].size()>0)return false;  
    if(m_PengPAIVec[1].size()>0)return false;  
    if(m_PengPAIVec[2].size()>0)return false;  
    if(m_PengPAIVec[4].size()>0)return false;  
    if(m_PengPAIVec[5].size()>0)return false;  
    if(m_GangPAIVec[1].size()>0)return false;  
    if(m_GangPAIVec[2].size()>0)return false;  
    if(m_GangPAIVec[4].size()>0)return false;  
    if(m_GangPAIVec[5].size()>0)return false;  
    //对发财  
    if(m_MyPAIVec[0].size() ==2)  
    {  
        if(m_MyPAIVec[0][0]==2&&m_MyPAIVec[0][1]==2)  
        {  
            for(int i = 1 ;i < 6 ; i++)  
            {  
                if(i==3)continue;  
                if(m_MyPAIVec[i].size()>0)return false;  
                if(m_ChiPAIVec[i].size()>0)return false;  
                if(m_PengPAIVec[i].size()>0)return false;  
                if(m_GangPAIVec[i].size()>0)return false;  
            }  
            //吃  
            int iSize = m_ChiPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_ChiPAIVec[3].begin();Iter != m_ChiPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //碰  
            iSize = m_PengPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_PengPAIVec[3].begin();Iter != m_PengPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //杠  
            iSize = m_GangPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_GangPAIVec[3].begin();Iter != m_GangPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //起  
            iSize = m_MyPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
             }  
        }  
    }  
    else  
    {  
        return false;  
    }  
    //如果有三张  
    if(m_MyPAIVec[3].size() == 3)  
    {  
        if(Check3Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))return true;  
    }  
    //如果有六张  
    if(m_MyPAIVec[3].size() == 6)  
    {  
        if(Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))return true;  
    }  
    //九张  
    if(m_MyPAIVec[3].size() == 9)  
    {  
        if(Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))return true;  
    }  
    //十二张  
    if(m_MyPAIVec[3].size() == 12)  
    {  
        if(Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))return true;  
    }  
    return  false;  
}  
 //检测是否九莲宝灯(胡)  
bool    CMJ::Check9LBD_HU()  
{  
    if(m_9LBD)//如果已经成九连宝灯牌型  
    {  
        if(m_MyPAIVec[2].size()==14)return true;  
        if(m_MyPAIVec[3].size()==14)return true;  
        if(m_MyPAIVec[4].size()==14)return true;  
    }  
    return false;  
}  
//检测是否九莲宝灯牌型(听)  
bool    CMJ::Check9LBD_TING()  
{  
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        if(m_MyPAIVec[i].size()==13)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==1)  
            {  
                if(m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==8)  
                {  
                    if(m_MyPAIVec[i][10]==9&&m_MyPAIVec[i][11]==9&&m_MyPAIVec[i][12]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
     return false;  
}  
//检测是否是四杠  
bool    CMJ::Check4Gang_HU()  
{  
    int iSize = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
    }  
     if(iSize == 16)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            //如果是将  
            if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))  
            {  
                return true;  
            }  
        }  
     }  
    return false;  
}  
 //检测是否连七对  
bool    CMJ::CheckL7D_HU()  
{     
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        if(m_MyPAIVec[i].size()==14)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==2&&m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==3&&m_MyPAIVec[i][6]==4&&m_MyPAIVec[i][7]==4&&m_MyPAIVec[i][8]==5&&m_MyPAIVec[i][9]==5&&m_MyPAIVec[i][10]==6&&m_MyPAIVec[i][11]==6&&m_MyPAIVec[i][12]==7&&m_MyPAIVec[i][13]==7)  
            {  
                return true;  
            }  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==2&&m_MyPAIVec[i][2]==3&&m_MyPAIVec[i][3]==3&&m_MyPAIVec[i][4]==4&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==5&&m_MyPAIVec[i][8]==6&&m_MyPAIVec[i][9]==6&&m_MyPAIVec[i][10]==7&&m_MyPAIVec[i][11]==7&&m_MyPAIVec[i][12]==8&&m_MyPAIVec[i][13]==8)  
            {  
                return true;  
            }  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==3&&m_MyPAIVec[i][2]==4&&m_MyPAIVec[i][3]==4&&m_MyPAIVec[i][4]==5&&m_MyPAIVec[i][5]==5&&m_MyPAIVec[i][6]==6&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==7&&m_MyPAIVec[i][10]==8&&m_MyPAIVec[i][11]==8&&m_MyPAIVec[i][12]==9&&m_MyPAIVec[i][13]==9)  
            {  
                return true;  
            }  
        }  
    }  
     return false;  
}  
 //检测是否胡十三幺  
bool    CMJ::Chekc13Y_HU()  
{  
    if(m_13Y)  
    {  
        bool        i13YSize[13] ;  
        for(UINT i = 0 ; i < 13 ; i++ )  
        {  
            i13YSize[i]=false;  
        }  
        //中发白  
        vector<int>::iterator Iter;  
        for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[0]=true;  
            }  
            if((*Iter)==2)  
            {  
                i13YSize[1]=true;  
            }  
            if((*Iter)==3)  
            {  
                i13YSize[2]=true;  
            }  
        }  
        //东南西北风  
        for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[3]=true;  
            }  
            if((*Iter)==2)  
            {  
                i13YSize[4]=true;  
            }  
            if((*Iter)==3)  
            {  
                i13YSize[5]=true;  
            }  
            if((*Iter)==4)  
            {  
                i13YSize[6]=true;  
            }  
        }  
        //一九万  
        for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[7]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[8]=true;  
            }  
        }  
         //一九条  
        for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[9]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[10]=true;  
            }  
        }  
         //一九饼  
        for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[11]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[12]=true;  
            }  
        }  
        int icount = 0;  
        for(UINT i = 0 ; i < 13 ; i++ )  
        {  
            if(i13YSize[i]==true)  
            {  
                icount++;  
            }  
        }  
        if(icount == 13)return true;  
     }  
    return false;  
}  
//检测是否清幺九  
bool    CMJ::CheckQY9_HU()  
{     
    int iSize = 0;  
    int iCount = 0;  
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
        iCount += iSize;  
        for(UINT j = 0 ; j < iSize ; j++ )  
        {  
            if(m_GangPAIVec[i][j]!=1||m_GangPAIVec[i][j]!=9)return false;  
        }  
    }  
     if(iCount == 12)  
    {  
        if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==1)return true;  
            if(m_MyPAIVec[2][0]==9&&m_MyPAIVec[2][1]==9)return true;  
        }  
         if(m_MyPAIVec[3].size()==3)  
        {  
            if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==1)return true;  
            if(m_MyPAIVec[3][0]==9&&m_MyPAIVec[3][1]==9)return true;  
        }  
         if(m_MyPAIVec[4].size()==4)  
        {  
            if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==1)return true;  
            if(m_MyPAIVec[4][0]==9&&m_MyPAIVec[4][1]==9)return true;  
        }  
    }  
     return false;  
 }  
//检测是否胡小四喜  
bool    CMJ::CheckX4X_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[1].size()==12)  
    {  
        //将牌的位置  
        int iJiangPos = -1;  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==5)  
            {  
                 if(Check5Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2],m_MyPAIVec[i][3],m_MyPAIVec[i][4]))  
                {  
                    return true;  
                }  
            }  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))  
                {  
                    iJiangPos = i;  
                    break;  
                }  
            }  
        }  
        //  
        if(iJiangPos>0)  
        {  
            for(int i = 0 ; i < 6 ; i++ )  
            {  
                if(i!=iJiangPos)  
                {  
                    if((m_MyPAIVec[i].size()==3))  
                    {  
                        if(Check3Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2]))return true;  
                    }  
                }  
            }  
        }  
    }  
    return false;  
}  
//检测是否胡小三元  
bool    CMJ::CheckX3Y_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[0].size()==8)  
    {     
        if(m_MyPAIVec[0].size()==5)  
        {  
            if(Check5Pai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                return true;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(m_MyPAIVec[0].size()==2)  
        {  
            //如果是将  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])==false)  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
        return CheckHU();  
     }  
    return false;  
}  
//检测是否胡字一色  
bool    CMJ::CheckZ1S_HU()  
{     
    //只准有字  
    if(m_MyPAIVec[2].size()>0)return false;  
    if(m_MyPAIVec[3].size()>0)return false;  
    if(m_MyPAIVec[4].size()>0)return false;  
    if(m_MyPAIVec[5].size()>0)return false;  
    if(m_ChiPAIVec[2].size()>0)return false;  
    if(m_ChiPAIVec[3].size()>0)return false;  
    if(m_ChiPAIVec[4].size()>0)return false;  
    if(m_ChiPAIVec[5].size()>0)return false;  
    if(m_PengPAIVec[2].size()>0)return false;  
    if(m_PengPAIVec[3].size()>0)return false;  
    if(m_PengPAIVec[4].size()>0)return false;  
    if(m_PengPAIVec[5].size()>0)return false;  
    if(m_GangPAIVec[2].size()>0)return false;  
    if(m_GangPAIVec[3].size()>0)return false;  
    if(m_GangPAIVec[4].size()>0)return false;  
    if(m_GangPAIVec[5].size()>0)return false;  
    int iSize = m_MyPAIVec[0].size();  
    if(iSize > 0)  
    {  
        if(iSize == 2)  
        {  
            if(m_MyPAIVec[0][0]==m_MyPAIVec[0][1])  
            {  
                iSize = m_MyPAIVec[1].size();  
                if(iSize == 0)return true;  
                if(iSize == 3)  
                {  
                    if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))return true;  
                }  
            }  
        }  
     }  
    return false;  
}  
//检测是否四暗刻  
bool    CMJ::Check4AK_HU()  
{  
    if(m_4AK)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
}     
//检测是否一色双龙会  
bool    CMJ::Check1S2LH_HU()  
{  
    //万,条,饼  
    for(UINT i = 0 ; i <= 4; i++ )  
    {  
        int iType = i;  
        if(m_MyPAIVec[iType].size()==14)  
        {  
             if(m_MyPAIVec[iType][0]==1&&m_MyPAIVec[iType][1]==1)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][2]==2&&m_MyPAIVec[iType][3]==2)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][4]==3&&m_MyPAIVec[iType][5]==3)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][6]==5&&m_MyPAIVec[iType][7]==5)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][8]==7&&m_MyPAIVec[iType][9]==7)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][10]==8&&m_MyPAIVec[iType][11]==8)  
            {  
             }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][12]==9&&m_MyPAIVec[iType][13]==9)  
            {  
             }  
            else  
            {  
                return false;  
            }  
             return true;  
        }  
    }  
    return false;  
}  
 //检测是否一色四同顺  
bool    CMJ::Check1S4TS_HU()  
{  
    //万,条,饼  
    for(UINT i = 0 ; i <= 4; i++ )  
    {  
        int iType = i;  
        //吃过的顺  
        int iSize1  =  m_ChiPAIVec[iType].size();  
        //剩余牌墙中的顺  
        int iSize2  =  m_MyPAIVec[iType].size();  
        //万  
        if(iSize1 + iSize2 >= 12)  
        {  
            //无吃的顺  
            if(iSize1==0)  
            {  
                if(iSize2==12)  
                {  
                    //三连暗杠成顺  
                    if(CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return CheckHU();  
                    return false;  
                }  
                if(iSize2==14)  
                {  
                    //三连暗杠成顺  
                    if((m_MyPAIVec[iType][12]==(m_MyPAIVec[iType][13]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return true;  
                    //三连暗杠成顺  
                    if((m_MyPAIVec[iType][0]==(m_MyPAIVec[iType][1]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))return true;  
                    return false;  
                }  
            }  
            //吃到一个顺  
            if(iSize1==3)  
            {  
                if(iSize2==9)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==11)  
                {  
                     //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_MyPAIVec[iType][9]==m_MyPAIVec[iType][10]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][8])  
                        {  
                            return true;  
                        }  
                    }  
                     return false;  
                }  
            }  
            //吃到二个顺  
            if(iSize1==6)  
            {  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==8)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_MyPAIVec[iType][6]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return true;  
                            }  
                         }  
                    }  
                     //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][6])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                     return false;  
                }  
            }  
            //吃到三个顺  
            if(iSize1==9)  
            {  
                if(iSize2==3)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])  
                                {                 
                                    return CheckHU();  
                                }  
                            }  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==5)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_MyPAIVec[iType][3]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])  
                                {     
                                    return true;  
                                }  
                            }  
                        }  
                    }  
                     //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][4])  
                                {     
                                    return true;  
                                }  
                             }  
                        }  
                    }  
                    return false;  
                }  
            }  
             //吃到三连顺  
            if(iSize1==12)  
            {  
                if((m_ChiPAIVec[iType][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6])&&(m_ChiPAIVec[iType][6]==m_ChiPAIVec[iType][9]))  
                {  
                    return CheckHU();  
                }  
                return false;  
            }  
        }  
     }  
    return false;  
}  
 //检测是否一色四节高  
bool    CMJ::Check1S4JG_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==16)  
        {  
            if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1)&&(m_GangPAIVec[iType][8]==m_GangPAIVec[iType][12]-1))  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//检测是否一色四步高  
bool    CMJ::Check1S4BG_HU()  
{  
    /*//万 
    if(m_GangPAIVec[2].size()==16) 
    { 
        if((m_GangPAIVec[2][0]==m_GangPAIVec[2][4]-1)&&(m_GangPAIVec[2][4]==m_GangPAIVec[2][8]-1)&&(m_GangPAIVec[2][8]==m_GangPAIVec[2][12]-1)) 
        { 
            return CheckHU(); 
        } 
    }*/  
    return false;  
}  
//检测是否三杠  
bool    CMJ::Check3Gang_HU()  
{  
    int iSize = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
    }  
     if(iSize == 12)  
    {  
        //将牌  
        return CheckHU();  
     }  
    return false;  
}  
//检测是否混幺九  
bool    CMJ::CheckHY9_HU()  
{  
    return false;  
}  
//检测是否七对  
bool    CMJ::Check7D_HU()  
{  
    int iDoubleNum = 0 ;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        UINT iSize = m_MyPAIVec[i].size();  
        if(iSize%2 ==1||iSize==0)return false;//如果是奇数肯定不是对  
        for(UINT j = 0 ; j < iSize-1 ; j++)  
        {  
            if(m_MyPAIVec[i][j]==m_MyPAIVec[i][j+1])  
            {  
                iDoubleNum++;  
                j++;  
            }  
        }  
    }  
    if(iDoubleNum==7)return true;  
    return false;  
}  
//检测是否七星不靠  
bool    CMJ::Check7XBK_HU()  
{  
    bool        bIs7XBK[14] ;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        bIs7XBK[i]=false;  
    }  
    //中发白  
    vector<int>::iterator Iter;  
    if(m_MyPAIVec[0].size()!=3)return false;  
    for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            bIs7XBK[7]=true;  
        }  
        if((*Iter)==2)  
        {  
            bIs7XBK[8]=true;  
        }  
        if((*Iter)==3)  
        {  
            bIs7XBK[9]=true;  
        }  
    }  
    //东南西北风  
    if(m_MyPAIVec[1].size()!=4)return false;  
    for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            bIs7XBK[10]=true;  
        }  
        if((*Iter)==2)  
        {  
            bIs7XBK[11]=true;  
        }  
        if((*Iter)==3)  
        {  
            bIs7XBK[12]=true;  
        }  
        if((*Iter)==4)  
        {  
            bIs7XBK[13]=true;  
        }  
    }  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==4&&m_MyPAIVec[i][2]==7)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    bool t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
     for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5&&m_MyPAIVec[i][2]==8)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
     for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6&&m_MyPAIVec[i][2]==9)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==5&&m_MyPAIVec[i][1]==8)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
     t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
     return false;  
}  
//检测是否全双刻  
bool    CMJ::CheckQSK_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==16)  
        {  
            if(m_GangPAIVec[iType][0]==2&&m_GangPAIVec[iType][4]==4&&m_GangPAIVec[iType][8]==6&&m_GangPAIVec[iType][12]==8)  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//清一色  
bool    CMJ::CheckQ1S_HU()  
{  
     if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
    //清万  
    if(m_MyPAIVec[2].empty()==false)  
    {  
        if(m_MyPAIVec[3].empty()==false)return false;  
        if(m_MyPAIVec[4].empty()==false)return false;  
        if(m_ChiPAIVec[3].empty()==false)return false;  
        if(m_ChiPAIVec[4].empty()==false)return false;  
        if(m_PengPAIVec[3].empty()==false)return false;  
        if(m_PengPAIVec[4].empty()==false)return false;  
        if(m_GangPAIVec[3].empty()==false)return false;  
        if(m_GangPAIVec[4].empty()==false)return false;  
        return CheckHU();  
    }  
    //清条  
    if(m_MyPAIVec[3].empty()==false)  
    {  
        if(m_MyPAIVec[2].empty()==false)return false;  
        if(m_MyPAIVec[4].empty()==false)return false;  
        if(m_ChiPAIVec[2].empty()==false)return false;  
        if(m_ChiPAIVec[4].empty()==false)return false;  
        if(m_PengPAIVec[2].empty()==false)return false;  
        if(m_PengPAIVec[4].empty()==false)return false;  
        if(m_GangPAIVec[2].empty()==false)return false;  
        if(m_GangPAIVec[4].empty()==false)return false;  
        return CheckHU();  
    }  
    //清饼  
    if(m_MyPAIVec[4].empty()==false)  
    {  
        if(m_MyPAIVec[2].empty()==false)return false;  
        if(m_MyPAIVec[3].empty()==false)return false;  
        if(m_ChiPAIVec[2].empty()==false)return false;  
        if(m_ChiPAIVec[3].empty()==false)return false;  
        if(m_PengPAIVec[2].empty()==false)return false;  
        if(m_PengPAIVec[3].empty()==false)return false;  
        if(m_GangPAIVec[2].empty()==false)return false;  
        if(m_GangPAIVec[3].empty()==false)return false;  
        return CheckHU();  
    }  
    return false;  
}  
//检测是否一色三同顺  
bool    CMJ::Check1S3TS_HU()  
{  
    //万条饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        int iType = i;  
        //吃过的顺  
        int iSize1  =  m_ChiPAIVec[iType].size();  
        //剩余牌墙中的顺  
        int iSize2  =  m_MyPAIVec[iType].size();  
        if(iSize1 + iSize2 >= 9)  
        {  
            //无吃的顺  
            if(iSize1==0)  
            {  
                if(iSize2==9)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        return CheckHU();  
                    }  
                    return false;  
                }  
                if(iSize2==11)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        return true;  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        return true;  
                    }  
                    return false;  
                }  
                if(iSize2==12)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))  
                    {  
                        return CheckHU();  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        return CheckHU();  
                    }     
                    return false;  
                }  
                if(iSize2==14)  
                {  
                    //三连顺(前)  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check5Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }  
                    //三连顺(中)  
                    if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check3Pai(m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }     
                    //三连顺(中)  
                    if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&CheckAAPai(m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }     
                    //三连顺(后)  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        return true;  
                    }  
                    return false;  
                }  
            }  
            //吃到一个顺  
            if(iSize1==3)  
            {  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                }  
                if(iSize2==8)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                }  
                if(iSize2==9)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check3Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                }  
                if(iSize2==11)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check5Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(中)  
                    if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&Check3Pai(m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(中)  
                    if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][9])  
                        {  
                            return true;  
                        }  
                    }  
                }  
            }  
            //吃到二个顺  
            if(iSize1==6)  
            {  
                if(iSize2==3)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                }  
                if(iSize2==5)  
                {  
                    //顺子(前)  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                    //顺子(后)  
                    if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                }  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                }  
                if(iSize2==8)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][7])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                }  
            }  
            //吃到三个顺  
            if(iSize1==9)  
            {  
                if((m_ChiPAIVec[2][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6]))  
                {  
                    return CheckHU();  
                }  
            }  
        }  
    }  
    return false;  
}  
//检测是否一色三节高  
bool    CMJ::Check1S3JG_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==12)  
        {  
            if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1))  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//检测是否全大  
bool    CMJ::CheckQD_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
     //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]<7)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]<7)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]<7)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]<7)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
 //检测是否全中  
bool    CMJ::CheckQZ_HU()  
{  
//剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
     //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]<4)return false;  
                if(m_MyPAIVec[i][j]>6)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]<4)return false;  
                if(m_ChiPAIVec[i][j]>6)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]<4)return false;  
                if(m_PengPAIVec[i][j]>6)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]<4)return false;  
                if(m_GangPAIVec[i][j]>6)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
 //检测是否全小  
bool    CMJ::CheckQX_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
     //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]>3)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]>3)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]>3)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]>3)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
//检测是否青龙  
bool    CMJ::CheckQL_HU()  
{  
    //花色  
    int iColorNum = 0;  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            iColorNum++;  
             if(m_MyPAIVec[i].size()==9)  
            {  
                for(UINT j = 0 ;j < 9 ;j++)  
                {  
                    if(m_MyPAIVec[i][j] != j)return false;  
                }  
            }  
        }  
    }  
    if(iColorNum==1)return CheckHU();  
    return false;  
}  
//检测是否三色双龙会  
bool    CMJ::Check3S2LH_HU()  
{  
    //五万为双龙  
    if(m_MyPAIVec[2].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[2][0]==5&&m_MyPAIVec[2][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[3].size()==6&&m_MyPAIVec[4].size()==6)  
            {  
                if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)  
                {  
                    if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
     //五条为双龙  
    if(m_MyPAIVec[3].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[3][0]==5&&m_MyPAIVec[3][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[4].size()==6)  
            {  
                if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)  
                {  
                    if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
     //五饼为双龙  
    if(m_MyPAIVec[4].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[4][0]==5&&m_MyPAIVec[4][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[3].size()==6)  
            {  
                if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)  
                {  
                    if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
    return false;  
}  
 //检测是否一色三步高  
bool    CMJ::Check1S3BG_HU()  
{  
    return false;  
}  
//全带五  
bool    CMJ::CheckQD5_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
    return false;  
}  
//三同刻  
bool    CMJ::Check3TK_HU()  
{  
    /*if(m_GangPAIVec[2].size()==4) 
    { 
        //万,条,饼 
        for(UINT i = 3 ; i <= 4 ; i++ ) 
        { 
            if(m_GangPAIVec[i].size()==4) 
            { 
                if(m_GangPAIVec[2][0]!=m_GangPAIVec[i][0]) 
                { 
                    return false; 
                } 
            } 
        }        
    }*/  
    return false;  
 }  
//三暗刻  
bool    CMJ::Check3AK_HU()  
{  
    return false;  
}  
//单钓将  
bool    CMJ::CheckDDJ_HU()  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        count += m_MyPAIVec[i].size();  
    }  
    if(count==2)  
    {  
        if(m_MyPAIVec[m_LastPAI.m_Type].size()==2)  
        {  
            if(m_MyPAIVec[m_LastPAI.m_Type][0]==m_MyPAIVec[m_LastPAI.m_Type][1])return true;  
        }  
    }  
    return false;  
}  
//检测是否听十三幺  
bool    CMJ::Check13Y_TING()  
{  
    bool        i13YSize[13] ;  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        i13YSize[i]=false;  
    }  
    //中发白  
    vector<int>::iterator Iter;  
    for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[0]=true;  
        }  
        if((*Iter)==2)  
        {  
            i13YSize[1]=true;  
        }  
        if((*Iter)==3)  
        {  
            i13YSize[2]=true;  
        }  
    }  
    //东南西北风  
    for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[3]=true;  
        }  
        if((*Iter)==2)  
        {  
            i13YSize[4]=true;  
        }  
        if((*Iter)==3)  
        {  
            i13YSize[5]=true;  
        }  
        if((*Iter)==4)  
        {  
            i13YSize[6]=true;  
        }  
    }  
    //一九万  
    for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[7]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[8]=true;  
        }  
    }  
     //一九条  
    for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[9]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[10]=true;  
        }  
    }  
     //一九饼  
    for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[11]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[12]=true;  
        }  
    }  
    int icount = 0;  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        if(i13YSize[i]==true)  
        {  
            icount++;  
        }  
    }  
    if(icount >=12)return true;  
    return  false;  
}  
//检测是否听四暗刻  
bool    CMJ::Check4AK_TING()  
{  
    if(m_AKNum==4)return true;  
    return false;  
}  
//检测胡  
bool    CMJ::CheckHU()  
{  
    bool t_Ok = false;  
    int iJiangNum = 0;  
     int iSize = m_MyPAIVec[0].size();  
    if(iSize>0)  
    {  
        //中发白  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==5)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7],m_MyPAIVec[0][8])&&CheckAAPai(m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
     }  
    //东南西北  
    iSize = m_MyPAIVec[1].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))  
            {  
                return false;  
            }     
        }  
        else if(iSize==5)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7],m_MyPAIVec[1][8])&&CheckAAPai(m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    //万  
    iSize = m_MyPAIVec[2].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11],m_MyPAIVec[2][12],m_MyPAIVec[2][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
     //条  
    iSize = m_MyPAIVec[3].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11],m_MyPAIVec[3][12],m_MyPAIVec[3][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
     }  
     //饼  
    iSize = m_MyPAIVec[4].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11],m_MyPAIVec[4][12],m_MyPAIVec[4][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
     if(iJiangNum==1)return true;  
    return false;  
}  
//检测听  
bool    CMJ::CheckTING()  
{  
    //剑牌  
    for(UINT j = 0 ; j < 9 ;j++ )  
    {  
        //起牌  
        AddPai(0,j+1);  
        if(CheckAllPai(MJPAI_GETPAI))  
        {  
            int iPaiIndex = GetPaiIndex(0,j+1);  
            DelPai(iPaiIndex);  
            return true;  
        }  
        else  
        {  
            int iPaiIndex = GetPaiIndex(0,j+1);  
            DelPai(iPaiIndex);  
        }  
    }  
    //风牌  
    for(UINT j = 0 ; j < 9 ;j++ )  
    {  
        //起牌  
        AddPai(1,j+1);  
        if(CheckAllPai(MJPAI_GETPAI))  
        {  
            int iPaiIndex = GetPaiIndex(1,j+1);  
            DelPai(iPaiIndex);  
            return true;  
        }  
        else  
        {  
            int iPaiIndex = GetPaiIndex(1,j+1);  
            DelPai(iPaiIndex);  
        }  
    }  
    for(UINT i = 2 ; i < 5 ;i++ )  
    {  
        for(UINT j = 0 ; j < 9 ;j++ )  
        {  
            //起牌  
            AddPai(i,j+1);  
            if(CheckAllPai(MJPAI_GETPAI))  
            {  
                int iPaiIndex = GetPaiIndex(i,j+1);  
                DelPai(iPaiIndex);  
                return true;  
            }  
            else  
            {  
                int iPaiIndex = GetPaiIndex(i,j+1);  
                DelPai(iPaiIndex);  
            }  
        }  
    }  
    return false;  
}  
 struct stPAIEx  
{  
    stPAI   m_NewPai;                       //起的新牌  
    int     m_PaiNum;                       //剩余牌数  
    bool    m_IsHZ;                         //是否黄庄  
}  
;  
 //麻将管理器  
class CMJManage  
{  
    vector<stPAI> m_MJVec;                //麻将数据VEC  
    int             m_HZPaiNum;             //黄庄的牌数  
public:  
     //构造函数  
    CMJManage();  
    //析构函数  
    ~CMJManage();  
    //初始化牌  
    void    InitPai(int p_HZPaiNum = 0);  
    //起牌  
    stPAIEx GetAPai();  
private:  
    //洗牌  
    void    XiPai();  
}  
;  
 CMJManage::CMJManage()  
{  
    m_HZPaiNum = 0;  
}  
//析构函数  
CMJManage::~CMJManage()  
{  
 }  
 //初始化牌  
void    CMJManage::InitPai(int p_HZPaiNum)  
{  
    m_HZPaiNum = p_HZPaiNum;  
    m_MJVec.clear();  
    //中发白  
    for(UINT i = 1 ; i <= 3 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 0;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //东南西北  
    for(UINT i = 1 ; i <= 4 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 1;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //万  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 2;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //条  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 3;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //饼  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 4;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    XiPai();  
}  
 //洗牌  
void    CMJManage::XiPai()  
{  
    srand( GetTickCount() );  
    random_shuffle(m_MJVec.begin(),m_MJVec.end());  
}  
 //起牌  
stPAIEx CMJManage::GetAPai()  
{  
    //如果所有牌都起完了  
     stPAIEx t_Pai;  
    t_Pai.m_NewPai.m_Type  = m_MJVec.back().m_Type;  
    t_Pai.m_NewPai.m_Value = m_MJVec.back().m_Value;  
    t_Pai.m_PaiNum = m_MJVec.size()-1;  
    if(t_Pai.m_PaiNum ==m_HZPaiNum)  
    {  
        t_Pai.m_IsHZ = true;  
    }  
    else  
    {  
        t_Pai.m_IsHZ = false;  
    }  
    //扔去一个  
    m_MJVec.pop_back();  
    return t_Pai;  
}  
 #include <windows.h>  
#include <iostream>  
using namespace std;  
 int main()  
{  
    //其它三个玩家  
    CMJ             t_OtherPlayer[3];  
    //我  
    CMJ             t_MyPlayer;  
    //洗牌器  
    CMJManage       t_MJManage;  
    //分数  
    int             t_Score = 0;  
GameStart:  
     //初始化及洗牌  
    t_MJManage.InitPai();//初始化  
    t_MyPlayer.CleanUp();  
    for(UINT i = 0 ; i < 3; i++ )  
    {  
        t_OtherPlayer[i].CleanUp();  
    }  
    cout<<"洗牌完成"<<endl;  
    cout<<"起牌:========================================================"<<endl;  
    for(UINT i = 0 ; i < 13 ; i++)  
    {  
         stPAIEx t_Pai = t_MJManage.GetAPai();  
        t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
         for(UINT j = 0 ; j < 3; j++ )  
        {  
            stPAIEx t_Pai2 = t_MJManage.GetAPai();  
            t_OtherPlayer[j].AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
        }  
    }  
    t_MyPlayer.Init();  
    for(UINT j = 0 ; j < 3; j++ )  
    {  
        t_OtherPlayer[j].Init();  
    }  
    //打牌循环  
    bool t_Finish   = false;  
    bool t_Ting     = false;  
    while(t_Finish == false)  
    {  
         t_MyPlayer.PrintAllPai();  
        cout<<endl;  
        cout<<"起牌:========================================================"<<endl;  
        stPAIEx t_Pai = t_MJManage.GetAPai();     
         //刷新我方牌墙  
        t_MyPlayer.PrintPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
        cout<<endl;  
        //如果没有听头  
        if(t_Ting == false)  
        {  
            cout<<"要还是打?Y/N";  
            char t_Result;  
            cin>>t_Result;  
            if(t_Result =='Y'||t_Result=='y')  
            {  
                //起牌  
                t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    printf("胡啦!!!:%s-%d",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                    ::_sleep(1000);  
                }  
                else  
                {  
                    if(t_Pai.m_NewPai.m_Type == -1)//如果起牌数已达到上限  
                    {  
                        cout<<endl;  
                        cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                        break;  
                    }  
                     t_MyPlayer.PrintAllPai();  
                    cout<<endl;  
OUTPai:  
                    cout<<"请打牌(输入牌序号)";  
                    int PaiIndex;  
                    cin>>PaiIndex;  
                    if(t_MyPlayer.DelPai(PaiIndex)==false)  
                    {  
                        cout<<"没有此牌"<<endl;  
                        goto OUTPai;  
                    }  
                    //==============================牌面刷新================================================  
                    cout<<"牌面刷新============================"<<endl;  
                    t_MyPlayer.PrintAllPai();  
                    cout<<endl;  
                    //==============================================================================  
                     //======================包听========================================================  
                    if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                    {  
                         char t_BTing;  
                        cout<<"要包听吗?:(Y/N)";  
                        cin>>t_BTing;  
                        if(t_BTing=='y'||t_BTing=='Y')  
                        {  
                            t_Ting = true;  
                        }  
                    }  
                    //==============================================================================  
                 }  
            }  
            else  
            {  
                    //======================包听========================================================  
                    if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                    {  
                         char t_BTing;  
                        cout<<"要包听吗?:(Y/N)";  
                        cin>>t_BTing;  
                        if(t_BTing=='y'||t_BTing=='Y')  
                        {  
                            t_Ting = true;  
                        }  
                    }  
                    //==============================================================================  
            }  
        }  
        else  
        {  
                 t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                //起牌  
                int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                if(iPaiIndex>=0)  
                {  
                    //起牌后胡牌判断  
                    t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                    if(t_Finish)  
                    {  
                        cout<<endl;  
                        printf("胡啦!!!:%s-合计%d番",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                        t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                        ::_sleep(1000);  
                        break;  
                    }  
                    else  
                    {  
                        t_MyPlayer.DelPai(iPaiIndex);  
                        cout<<"打牌";  
                        t_MyPlayer.PrintPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                        cout<<endl;  
                        ::_sleep(1000);  
                    }  
                }  
                else  
                {  
                    cout<<"程序出错!"<<endl;  
                }  
         }  
        cout<<endl;  
        //其它玩家起牌出牌  
        for(UINT j = 0 ; j < 3; j++ )  
        {  
            stPAIEx t_Pai2 = t_MJManage.GetAPai();  
            if(j==0)  
            {  
                cout<<"南家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
            if(j==1)  
            {  
                cout<<"西家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
            if(j==2)  
            {  
                cout<<"北家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
             char t_Result;  
            if(t_Ting == false)  
            {  
                if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                {  
                    cout<<endl;  
                    cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                    t_Finish = true;  
                    break;  
                }  
                 bool t_Check = false;  
                //检查吃牌  
                if(t_MyPlayer.CheckChiPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(吃)";  
                    t_Check = true;  
                }  
                //检查碰牌  
                if(t_MyPlayer.CheckPengPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(碰)";  
                    t_Check = true;  
                }  
                //检查杠牌  
                if(t_MyPlayer.CheckGangPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(杠)";  
                    t_Check = true;  
                }  
                //起牌  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                if(t_MyPlayer.CheckAllPai(MJPAI_GETPAI))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(胡)";  
                    t_Check = true;  
                }     
                int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                t_MyPlayer.DelPai(iPaiIndex);  
                //如果查到  
                if(t_Check)  
                {  
                    cout<<endl;  
                    cin>>t_Result;  
                }  
                else  
                {  
                    //返回循环  
                    continue;  
                }  
            }  
            else  
            {  
                t_Result = '4';  
            }  
            //吃牌  
            if(t_Result =='1')  
            {  
                t_MyPlayer.PrintChiChosePai();  
                 int index = 0;  
                //如果吃牌组合大于  
                if(t_MyPlayer.GetChiChoseNum()>1)  
                {  
                    cout<<"请输入组合号:"<<endl;  
                    cin>>index;  
                }  
                t_MyPlayer.DoChiPai(index,t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                 //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
 OUTPai2:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai2;  
                }  
                 //=================================牌面刷新=============================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
                     char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                //该我下家  
                j = -1;  
             }  
            else if(t_Result =='2')//碰牌  
            {  
                 t_MyPlayer.PrintPengChosePai();  
                t_MyPlayer.DoPengPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
OUTPai3:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai3;  
                }  
                //==========================牌面刷新====================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
                     char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                j = -1;  
             }  
            else if(t_Result =='3')//杠牌  
            {  
                 t_MyPlayer.PrintGangChosePai();  
                t_MyPlayer.DoGangPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<"起杠底牌"<<endl;  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                stPAIEx t_Pai2 = t_MJManage.GetAPai();  
                 //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    cout<<"杠底花吗?(Y/N)"<<endl;  
                    char t_Result;  
                    cin>>t_Result;  
                    if(t_Result =='Y'||t_Result=='y')  
                    {  
                        cout<<endl;  
                        printf("胡啦!!!:%s-%d",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                        t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                        ::_sleep(1000);  
                        break;  
                    }  
                }  
                 if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                {  
                    cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                    t_Finish = true;  
                    break;  
                }  
 OUTPai4:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai4;  
                }  
                //===========================牌面刷新===================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
                     char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                //该我下家  
                j = -1;  
             }  
            else if(t_Result =='4')//胡牌  
            {  
                //起牌  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    printf("胡啦!!!:%s-合计%d番",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                    t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                    ::_sleep(1000);  
                    break;  
                }  
                else  
                {  
                    if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                    {  
                        cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                        t_Finish = true;  
                        break;  
                    }  
                    //起牌  
                    int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                    cout<<endl;  
                    t_MyPlayer.DelPai(iPaiIndex);  
                }  
            }  
         }  
     }  
    cout<<"我的分数:"<<t_Score<<endl;  
    ::_sleep(3000);   
    goto GameStart;//重新开始一局  
     return 0;  
}

  

斗地主
斗地主(人机智力堪忧)
#include <bits/stdc++.h>
#include <windows.h>
#define PLAYERCOUNT 3
#define CARDSCOUNT 54
#define CURRENTPLAYER 0
#define VALUECOUNT 17
#define ERROR -1
using namespace std;
int scnt=0;
const char toFigure[]="34567890JQKA 2YZ";
enum COLOR{  //花色显示ASCII: 3~6
    eHEART=3,//红桃 
    eDIAMOND,//方片 
    eCLUB,   //草花 
    eSPADE   //黑桃 
};
 class Card;
class CardsType;
class CardGroup;
class Player;
class Landlords;
class LastCards;
bool makeChoice(string tip);
bool cmp(Card* a,Card* b);
 class Card{
  public:
    char figure;
    COLOR color;
    int value;
    Card(char _figure,COLOR _color){
        figure=_figure;
        color=_color;
        value=calValue();
    }
    int calValue(){
        for(int i=0;toFigure[i];i++){
            if(toFigure[i]==figure){
                return i;
            }
        }
        return ERROR;
    }
    void print(){
        assert(value!=ERROR);
        if(figure=='Z'){
            cout<<"Z";
        }else if(figure=='Y'){
            cout<<"Y";
        }else{
            cout<<figure<<(char)color;
        }
        cout<<' ';
    }
};
 class CardsType{
  public:
    //为了规范查找对应牌的方法
    //统一为3个参数cnt1、isContinuous、cnt2
    int typeId;
    string typeStr;
    int cnt1,cnt2;
    bool isContinuous;
    CardsType(){
        typeId=ERROR;
    }
    bool operator ==(const CardsType& other)const{
        return this->typeId==other.typeId;
    }
    void init(char* _typeStr,int _typeId,int _cnt1,bool _isContinuous,int _cnt2){
        cnt1=_cnt1;
        isContinuous=_isContinuous;
        cnt2=_cnt2;
        typeStr=_typeStr;
        typeId=_typeId;
    }
}; 
 class CardGroup{
  public:
    vector<Card*> cards;
    CardsType type;
    void calType(){
        int i,n=cards.size();
        //init(typeStr,typeId,cnt1,isContinuous,cnt2)
        if(n==0){
            type.init("不出",14,0,0,0);
            return;
        }
        if(n==2&&cards[0]->value==15&&cards[1]->value==14){
            type.init("王炸",0,0,0,0);
            return;
        }
        //统计同点数牌有多少张 
        int cntFlag[VALUECOUNT]={0};
        for(i=0;i<n;i++){
            cntFlag[cards[i]->value]++;
        }
        //统计点数最多和最少的牌 
        int maxCnt=0,minCnt=4;
        for(i=0;i<VALUECOUNT;i++){ 
            if(maxCnt<cntFlag[i]){
               maxCnt=cntFlag[i];
            }
            if(cntFlag[i]&&minCnt>cntFlag[i]){
               minCnt=cntFlag[i];
            }
        }
        if(n==4&&maxCnt==4){
            type.init("炸弹",1,4,0,0);
            return;
        }
        if(n==1){
            type.init("单牌",2,1,0,0);
            return;
        }
        if(n==2&&maxCnt==2){
            type.init("对子",3,2,0,0);
            return;
        }
        if(n==3&&maxCnt==3){
            type.init("三张 ",4,3,0,0);
            return;
        }
        if(n==4&&maxCnt==3){
            type.init("三带一",5,3,0,1);
            return;
        }
        if(n==5&&maxCnt==3&&minCnt==2){
            type.init("三带一对",6,3,0,2);
            return;
        }
        if(n==6&&maxCnt==4){
            type.init("四带二",7,4,0,1);
            return;
        }
        if(n==8&&maxCnt==4&&minCnt==2){
            type.init("四带二",8,4,0,2);
            return;
        } 
        if(n>=5&&maxCnt==1&&cards[0]->value==cards[n-1]->value+n-1){
            type.init("顺子",9,1,1,0);
            return;
        }
        if(n>=6&&maxCnt==2&&minCnt==2&&cards[0]->value==cards[n-1]->value+n/2-1){
            type.init("连对",10,2,1,0); 
            return;
        }
        int fjCnt;//统计连续且大于3三张的牌 
        for(i=0;i<VALUECOUNT &&cntFlag[i]<3;i++);
        for(fjCnt=0;i<VALUECOUNT &&cntFlag[i]>=3;i++,fjCnt++);
        if(fjCnt>1){
            if(n==fjCnt*3)
                type.init("飞机",11,3,1,0);
            else if(n==fjCnt*4)
                type.init("飞机",12,3,1,1); 
            else if(n==fjCnt*5&&minCnt==2)
                type.init("飞机",13,3,1,2); 
        }
    }
    void init(string inputStr, vector<Card*> &cardsHolded){
        this->cards.clear();
        //不出 
        if(inputStr=="N"){
            this->calType();
            return;
        }
        int i,j;
        //输入合法性判断 
        for(i=0;i<inputStr.size();i++){
            bool find=false;
            for(j=0;toFigure[j];j++){ 
                if(inputStr[i]==toFigure[j]){
                    find=true;
                    break;
                }
            } 
            if(find==false){
                //输入字符不在toFigure中
                return;
            }
        }
        //查找手中有没有这些牌 
        int visitFlag[20]={0};
        for(i=0;i<inputStr.size();i++){
            Card *find=NULL;
            for(j=0;j<cardsHolded.size();j++){
                if(!visitFlag[j]&&cardsHolded[j]->figure==inputStr[i]){
                    visitFlag[j]=1;
                    find=cardsHolded[j];
                    break;
                }
            }
            if(find){
                this->cards.push_back(find);
            }else{
                cout<<inputStr[i];
                cout<<"没有找到\t";
                this->cards.clear();
                return;
            }
        }//end for(i=0;i<inputStr.size();i++) 
        this->arrange();
    }
    void init(vector<Card*> newCards){
        this->cards=newCards;
        this->arrange();
    }
    bool isCanBeat(CardGroup &cardGroup){
        if(cardGroup.type.typeStr=="王炸"){
            return false;
        }else if(this->type.typeStr=="王炸"){
            return true;
        }else if(cardGroup.type==this->type &&this->type.typeStr=="炸弹"){
            return value()>cardGroup.value();
        }else if(cardGroup.type.typeStr=="炸弹"){
            return false;
        }else if(this->type.typeStr=="炸弹"){
            return true;
        }else if(cardGroup.type==this->type &&this->cards.size()==cardGroup.cards.size()){
            return this->value()>cardGroup.value();
        }else{
            return false;
        }
    }
    int value(){
        //计算牌组权值 
        int i;
        if(type.typeStr=="三带一"||type.typeStr=="三带一对"||type.typeStr=="飞机"){
            for(i=2;i<cards.size();i++){
                if(cards[i]->value==cards[i-2]->value){
                    return cards[i]->value;
                }
            }
        }
        if(type.typeStr=="四带二"){
            for(i=3;i<cards.size();i++){
                if(cards[i]->value==cards[i-3]->value){
                    return cards[i]->value;
                }
            }
        }
        return cards[0]->value;
    }
    void arrange(){
        //整理:排序、计算类型 
        sort(this->cards.begin(),this->cards.end(),cmp);
        this->calType();
    }
};
class LastCards{
    static LastCards *lastCards;
  public:
    Player *player;
    CardGroup cardGroup;
    static LastCards* inst(){//单例模式 
        if(lastCards==NULL){
            lastCards=new LastCards();
        }
        return lastCards;
    }
    vector<Card*> findCanBeatFrom(vector<Card*> &cardsHolded){
        //查找能打得过的牌 
        int i,j,k,n=cardsHolded.size(),m=cardGroup.cards.size();
        string typeStr=cardGroup.type.typeStr;
        vector<Card*> ret;
        if(typeStr=="王炸"||n<m){
            //打不过,返回空数组 
            return ret;
        }
        int value=cardGroup.value();
        //统计各点牌出现的次数 
        int cntFlag[VALUECOUNT]={0};
        for(i=0;i<n;i++){ 
            cntFlag[cardsHolded[i]->value]++;
        } 
        int continuousCount=1;
        if(cardGroup.type.isContinuous){
            continuousCount=m/(cardGroup.type.cnt1+cardGroup.type.cnt2);
        }
        bool findFirstFigure;
        //cout<<"continuousCount="<<continuousCount<<endl;
        for(i=value+1;i<VALUECOUNT;i++){
            findFirstFigure=true;
            for(j=0;j<continuousCount;j++){ 
                if(cntFlag[i-j]<cardGroup.type.cnt1){
                    findFirstFigure=false;
                    break;
                }
            }
            if(findFirstFigure){
                ret.clear();
                int firstFigure=i;
                //cout<<"查找"<<cardGroup.type.cnt1<<"个"<<firstFigure+3<<endl;
                for(k=0,j=0;k<cardsHolded.size() &&j<continuousCount;k++){ 
                    if(cardsHolded[k]->value==firstFigure-j){
                        for(int kk=0;j>=0&&kk<cardGroup.type.cnt1;kk++){ 
                            ret.push_back(cardsHolded[k+kk]);
                        } 
                        j++; 
                    }
                } 
                if(cardGroup.type.cnt2>0){
                    int SecondFigures[5];
                    int SecondCount=continuousCount;
                    if(cardGroup.type.typeStr=="四带二")
                        SecondCount=2;
                    bool findSecondFigure=true;
                    for(j=0,k=-1;j<SecondCount &&findSecondFigure;j++){
                        findSecondFigure=false;
                        for(k++;k<VALUECOUNT;k++){
                            SecondFigures[j]=k;
                            if(cntFlag[k]>=cardGroup.type.cnt2 &&cntFlag[k]<cardGroup.type.cnt1){
                                findSecondFigure=true;
                                break;
                            }
                        }
                    }
                    if(findSecondFigure){
                        //cout<<"查找SecondFigure "<<cardGroup.type.cnt2<<"个"<<SecondFigures[0]+3<<endl;
                        //cout<<"SecondCount= "<<SecondCount<<endl;
                        //for(i=0;i<SecondCount;i++)cout<<"SecondFigures["<<i<<"]="<<SecondFigures[i]<<endl;
                        for(i=0;i<SecondCount;i++){ 
                            for(j=0;j<cardsHolded.size();){ 
                                if(cardsHolded[j]->value==SecondFigures[i]){
                                    for(k=0;k<cardGroup.type.cnt2;k++){
                                        //cout<<"添加"<<cardsHolded[j]->value+3<<endl;
                                        ret.push_back(cardsHolded[j+k]);
                                    }
                                    do{
                                        j++;
                                    }while(j<cardsHolded.size()&&cardsHolded[j]->value==SecondFigures[i]);
                                }else{
                                    j++;
                                } 
                            }
                        } 
                        return ret;
                    }//if(findSecondFigure) 
                }//end if(cardGroup.type.cnt2>0)
                else{
                    return ret;
                }
            }//end if(findFirstFigure)
        }//end for(i=value+1;i<VALUECOUNT;i++)
        ret.clear();
        //没牌打得过时查找有没有炸弹 
        if(typeStr!="炸弹"){
            for(i=cardsHolded.size()-1;i>=3;i--){
                if(cardsHolded[i]->value==cardsHolded[i-3]->value){
                    for(j=0;j<4;j++){
                        ret.push_back(cardsHolded[i-j]);
                    }
                    break;
                }
            }
        }
        return ret;   
    }//end vector<Card*> findCanBeatFrom()
};
LastCards* LastCards::lastCards = NULL;
 class Player{
  public:
    string name;
    vector<Card*> cards;
    void arrange(){
        sort(cards.begin(),cards.end(),cmp);
    }
    void print(){
        cout<<this->name<<":\t";
        for(int i=0;i<cards.size();i++){
            cards[i]->print();
        }
        cout<<"["<<cards.size()<<"]\n";
    }
    vector<Card*> tip(){
        //提示功能,使自己最小一张连最长
        CardGroup ret;
        string temp;
        int j,k,m=cards.size();
        for(j=0;j<m;j++){
            temp="";
            for(k=j;k<m;k++){
                temp+=cards[k]->figure;
            }
            ret.init(temp,cards);
            if(ret.type.typeId!=ERROR){
                return ret.cards;
            }
        }
        ret.cards.clear();
        return ret.cards;
    }
    void chupai(CardGroup &cardGroup){
        //出牌 
        cout<<this->name<<":\t";
        cout<<cardGroup.type.typeStr<<' ';
        for(int i=0;i<cardGroup.cards.size();i++){
            cardGroup.cards[i]->print();
            this->cards.erase(find(this->cards.begin(),this->cards.end(),cardGroup.cards[i])); 
        }
        cout<<"\t["<<this->cards.size()<<"]\n";
        if(cardGroup.type.typeStr!="不出"){
            //记录到 LastCards 中 
            LastCards::inst()->player=this;
            LastCards::inst()->cardGroup.init(cardGroup.cards);
        }
    }
};
 class Landlords{
    Player *player[PLAYERCOUNT];
    bool finished,youWin,landlordWin;
    int landlordIndex;
    Card *cards[CARDSCOUNT];
  public:
    Landlords(){
        int i,j,k;
        for(i=0;i<PLAYERCOUNT;i++){
            this->player[i]=new Player();
        }
        //54张牌初始化 
        for(k=i=0;i<14;i++){
            if(toFigure[i]==' '){
                continue;
            }
            for(COLOR color=eHEART;color<=eSPADE;color=(COLOR)(color+1)){
                this->cards[k++]=new Card(toFigure[i],color);
            }
        }
        this->cards[k++]=new Card('Y',eSPADE);
        this->cards[k]=new Card('Z',eHEART);
    }
    ~Landlords(){
        for(int i=0;i<PLAYERCOUNT;i++){
            delete this->player[i];
        }
        for(int i=0;i<CARDSCOUNT;i++){
            delete this->cards[i];
        }
    } 
    void init(){
        player[CURRENTPLAYER]->name="Bice";
        player[1]->name="玩家2";
        player[2]->name="玩家3";
        finished=false;
        youWin=false;
        landlordWin=false;
        //抢地主
        landlordIndex=ERROR; 
        while(landlordIndex==ERROR){
            srand((int)time(0));
            shuffle();
            landlordIndex=chooseLandlord();
        }
        cout<<player[landlordIndex]->name<<"\t成为地主\n\n";
        this->add3Cards();
        LastCards::inst()->player=player[landlordIndex];
    }
    void startGame(){
        string inputSrt;
        CardGroup inputCards;
        for(int iTurns=landlordIndex;!finished;iTurns++){
            if(iTurns>=PLAYERCOUNT){
                iTurns=0;
            }
            if(iTurns==CURRENTPLAYER){
                cout<<endl;
                player[iTurns]->print();
                cout<<"输入提示:Z=大王 Y=小王 0=10 N=不要 输入可无序 例如:JKQ0A9\n请出牌:\t";
                do{
                    cin>>inputSrt;
                    inputCards.init(inputSrt,player[iTurns]->cards);
                }while(check(&inputCards)==false);
            }else{
                if(player[iTurns]==LastCards::inst()->player){
                    //若是上次出牌的是自己,启用提示功能 
                    inputCards.init(player[iTurns]->tip());
                }else{
                    //查找能打得过上家的牌 
                    inputCards.init(LastCards::inst()->findCanBeatFrom(player[iTurns]->cards));
                }
            }
            player[iTurns]->chupai(inputCards);//出牌 
             if(player[iTurns]->cards.size()==0){
                //玩家手中没牌了,游戏结束 
                finished=true;
                landlordWin=iTurns==landlordIndex;
                if(landlordWin){
                    youWin=landlordIndex==CURRENTPLAYER;
                }else{
                    youWin=landlordIndex!=CURRENTPLAYER;
                }
            }
        }
        cout<<"\n_________________________ "<<(youWin?"You Win!":"You Lose!")<<" _________________________\n\n";
    }
    void add3Cards(){
        cout<<"地主3张牌:\t";
        for(int i=PLAYERCOUNT*17;i<CARDSCOUNT;i++){
            this->cards[i]->print();
            player[landlordIndex]->cards.push_back(cards[i]);
        }
        cout<<endl;
        player[landlordIndex]->arrange();
    }
    int chooseLandlord(){
        cout<<"\n_________________________ 抢地主 _________________________\n\n";
        int first=-1,last,cnt=0,i,j=rand()%PLAYERCOUNT;
        bool decision;
        for(i=0;i<PLAYERCOUNT;i++,j==2?j=0:j++){
            if(j==CURRENTPLAYER){
                decision=makeChoice("是否抢地主?(Y=抢/N=不抢):");
            }else{ 
                decision=rand()%2;
            }
            if(decision){
                cnt++;
                last=j;
                if(first==-1){
                    first=j;
                }
                cout<<this->player[j]->name<<"\t抢地主\n";
            }else{
                cout<<this->player[j]->name<<"\t没有抢\n";
            }
        }
        if(cnt==0){
            cout<<"没人抢,重新发牌\n";
            return ERROR;
        }
        if(cnt==1){
            //第一轮只有一人抢地主 
            return first;
        }
        else{
            //最后一次争抢 
            if(first==CURRENTPLAYER){
                decision=makeChoice("是否抢地主?(Y=抢/N=不抢):");
            }else{
                decision=rand()%2;
            }
            if(decision){
                cout<<this->player[first]->name<<"\t抢地主\n";
                return first;
            }else{
                cout<<this->player[first]->name<<"\t没有抢\n";
                return last;
            }
        }
    }
    void shuffle(){
        int i,j,k;    
        //洗牌 
        for(i=0;i<CARDSCOUNT;i++){
            swap(this->cards[i],this->cards[rand()%CARDSCOUNT]);
        }
         //分牌 
        for(k=i=0;i<PLAYERCOUNT;i++){
            this->player[i]->cards.clear();
            for(j=0;j<17;j++){
                this->player[i]->cards.push_back(this->cards[k++]);
            }
            this->player[i]->arrange();//整理 
            this->player[i]->print();
        }
    }
    bool check(CardGroup *cardGroup){
        if(cardGroup->type.typeId==ERROR){
            cout<<"出牌错误,重新输入\n";
            return false;
        }else if(cardGroup->type.typeStr=="不出"){
            return true;
        }else if(LastCards::inst()->player!=player[CURRENTPLAYER]&&!cardGroup->isCanBeat(LastCards::inst()->cardGroup)){
            cout<<"打不过,重新输入\n";
            return false;
        }else{
            return true;
        }
    }
};
 int main(){
    Landlords *landlords=new Landlords();
    do{
        landlords->init();//发牌、抢地主 
        landlords->startGame();//游戏开始 
    }while(makeChoice("\n是否继续游戏?(Y=继续/N=结束): "));
    delete landlords;
    return 0;
}
 bool makeChoice(string tip){
    cout<<tip;
    string input;
    cin>>input;
    return input=="Y"||input=="y";
}
 bool cmp(Card* a,Card* b){
    if(a->value==b->value){
        return a->color>b->color;
    }else{
        return a->value>b->value;
    }
}

  

海战棋
#include <cstdio>
#include <ctime>           //rand()%(x) 0~x-1 int 
#include <windows.h>       //停顿:Sleep(); 
#include <cstdlib>         //清屏:system("cls");
#include <conio.h>         //getch(); char
#include <iostream>
#include <cstring>         //未知  :□; 打中  :◎;  未打中:○ 船:★;
using namespace std;
int rest[3][5],r1,r2;      //rest[1]:玩家的海域; rest[2]:电脑的海域  r1:玩家还剩船数; r2:电脑还剩船数 
int b1[12][12],b2[12][12];                            //0:空海; 1:船只; 2:打中; 3:边界 4:未打中 5:沉船 
int c1[12][12],c2[12][12];                            //c1:玩家海域的颜色  c2:电脑海域颜色 
int fx[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};
int now[2][2];              //now[左/右][x/y]  光标 
string a1[12][12],a2[12][12];
int fd [500][2],head=0,tail=0;
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void gotoxy(int x,int y)//位置函数(整个界面)(行为x 列为y)
{
COORD pos;
pos.X=2*(y);
pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void gotoxy1(int x,int y)//位置函数(左边棋盘)(行为x 列为y)
{
COORD pos;
pos.X=2*(y+5);
pos.Y=x+1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void gotoxy2(int x,int y)//位置函数(右边棋盘)(行为x 列为y)
{
COORD pos;
pos.X=2*(y+18);
pos.Y=x+1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
 void check2(int x,int y){
    int k=0,kx,ky,f=1;
    for (int i=0; i<=3; i++){
        if (b2[x+fx[i][0]][y+fx[i][1]]==2) k=i;
        if (b2[x+fx[i][0]][y+fx[i][1]]==1) f=0;
    }
    for (kx=x,ky=y; b2[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]);
    if (b2[kx][ky]==1) f=0;
    if (f){
        int w=0;
        color(12);
        for (kx=x,ky=y; b2[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]){
            gotoxy2(kx,ky);
            a2[kx][ky]="※";
            c2[kx][ky]=12; 
            cout <<"※";
            w++;
        }
        for (kx=x+fx[(k+2)%4][0],ky=y+fx[(k+2)%4][1]; b2[kx][ky]==2; kx+=fx[(k+2)%4][0],ky+=fx[(k+2)%4][1]){
            gotoxy2(kx,ky);
            a2[kx][ky]="※";
            c2[kx][ky]=12; 
            cout <<"※";
            w++;
        }
         if (w>0){
            rest[2][w]--;
            r2--; 
            if (rest[2][w]>0) color(14); else color(11);
            gotoxy2(5-w,16); printf("*%d",rest[2][w]);
        }
    }
}
 int move1(){
    if (r1*r2==0) return(1);
     color(5); gotoxy1(14,4); printf("电脑开炮");
    color(13); gotoxy2(14,4); printf("玩家开炮");
     int kx=now[1][0],ky=now[1][1],lastx,lasty,f=1;
    char ch;
    gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
    while (f){
        ch=getch();
        if (ch=='1' || ch=='a'){kx=now[1][0]+fx[2][0]; ky=now[1][1]+fx[2][1];}
        if (ch=='2' || ch=='s'){kx=now[1][0]+fx[1][0]; ky=now[1][1]+fx[1][1];}
        if (ch=='3' || ch=='d'){kx=now[1][0]+fx[0][0]; ky=now[1][1]+fx[0][1];}
        if (ch=='5' || ch=='w'){kx=now[1][0]+fx[3][0]; ky=now[1][1]+fx[3][1];}
        if (kx>0 && kx<=10 && ky>0 && ky<=10){
            gotoxy2(now[1][0],now[1][1]); color(c2[now[1][0]][now[1][1]]); cout <<a2[now[1][0]][now[1][1]];
            gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
            now[1][0]=kx; now[1][1]=ky;
        }
         if ((ch=='0' || ch==' ')&& b2[kx][ky]<=1){ 
            if (b2[kx][ky]==1){b2[kx][ky]=2; a2[kx][ky]="◎"; c2[kx][ky]=4;}
            if (b2[kx][ky]==0){b2[kx][ky]=4; a2[kx][ky]="  ";}
            gotoxy2(kx,ky); color(c2[kx][ky]); cout <<a2[kx][ky];
            f=0;
            check2(kx,ky);
            color (7); gotoxy2(12,4); cout <<"(";  color(6); cout <<ky; color(7); cout <<","; color(2); cout <<kx;color(7); cout<<")  ";
            if (b2[kx][ky]==2) move1();
        }
         if (ch=='8' || ch=='g'){
            for (int i=1; i<=10; i++) for (int j=1; j<=10; j++)
                if (b2[i][j]==1){
                    gotoxy2(i,j);
                    color(10);
                    printf("Ω");
                }
            char ccc=getch();
            for (; ccc!='8' && ccc!='g'; ccc=getch());
            for (int i=1; i<=10; i++)for (int j=1; j<=10; j++){
                gotoxy2(i,j);
                color(c2[i][j]);
                cout <<a2[i][j];
            }
            gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
        }
         if (ch=='4' || ch=='q') return(0);
    }
    return(1);
}
 
 int ok(int x,int y){
    int nnn=0;
    if (b1[x][y]==2 || b1[x][y]==4 || b1[x][y]==5) return(0);
    for (int i=0; i<=7; i++){
        if (b1[x+fx[i][0]][y+fx[i][1]]==2) nnn++;
        if (b1[x+fx[i][0]][y+fx[i][1]]==5) return(0);
    }
    if (nnn>1) return(0);
    return(1);
}
 void check1(int x,int y) {
    int k=0,kx,ky,f=1;
    for (int i=0; i<=3; i++){
        if (b1[x+fx[i][0]][y+fx[i][1]]==2) k=i;
        if (b1[x+fx[i][0]][y+fx[i][1]]==1) f=0;
    }
    for (kx=x,ky=y; b1[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]);
    if (b1[kx][ky]==1) f=0;
     if (f){
        int w=0;
        color(12);
        for (kx=x,ky=y; b1[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]){
            gotoxy1(kx,ky);
            b1[kx][ky]=5;
            a1[kx][ky]="※";
            c1[kx][ky]=12; 
            cout <<"※";
            w++;
        }
        for (kx=x+fx[(k+2)%4][0],ky=y+fx[(k+2)%4][1]; b1[kx][ky]==2; kx+=fx[(k+2)%4][0],ky+=fx[(k+2)%4][1]){
            gotoxy1(kx,ky);
            b1[kx][ky]=5;
            a1[kx][ky]="※";
            c1[kx][ky]=12; 
            cout <<"※";
            w++;
        }
         if (w>0){
            rest[1][w]--;
            r1--; 
            if (rest[1][w]>0) color(14); else color(11);
            gotoxy1(5-w,-5); 
            printf("%d*",rest[1][w]);
        }
    }
}
 void move2(){
    if (r1*r2==0) return;
     color(13); gotoxy1(14,4); printf("电脑开炮");
    color(5); gotoxy2(14,4); printf("玩家开炮");
     Sleep(750);
    int kx=0,ky=0,over=0;
     while (tail>head){
        head++;
        kx=fd[head][0]; ky=fd[head][1];
        if (ok(kx,ky)){over=1; break;}
    }   
    while (!over){
        kx=rand()%(10)+1;
        ky=rand()%(10)+1;
        if (ok(kx,ky)) over=1;
    }
     if (b1[kx][ky]==1){b1[kx][ky]=2; a1[kx][ky]="◎"; c1[kx][ky]=4;}
    if (b1[kx][ky]==0){b1[kx][ky]=4; a1[kx][ky]="  ";}
     gotoxy1(kx,ky); color(11); printf("⊕"); Sleep(600);
    gotoxy1(kx,ky); color(c1[kx][ky]); cout <<a1[kx][ky];
    color (7); gotoxy1(12,4); cout <<"(";  color(6); cout <<ky; color(7); cout <<","; color(2); cout <<kx;color(7); cout<<")  ";
     check1(kx,ky);
     if ((b1[kx][ky]==2 || b1[kx][ky]==5)&& r1*r2>0){
        int i=rand()%(4);
        for (int ii=0; ii<=3; ii++){
            int px=kx+fx[i][0],py=ky+fx[i][1];
            if (px>0 && px<=10 && py>0 && py<=10){
                tail++;
                fd[tail][0]=px;
                fd[tail][1]=py;
            }
            i=(i+1)%4;
        }
        move2();
    }
}
 void put(){
    int k=4;
    while (k--){
        for (int i=1; i<=4-k; i++){
            int f1=0,f2=0;
            int dir1,dir2;
            dir1=rand()%(2);
            dir2=rand()%(2);
            while (!f1){
                f1=1;
                int lx=rand()%(10)+1;
                int ly=rand()%(10)+1;
                for(int nx=lx-1; nx<=lx+fx[dir1][0]*k+1; nx++)
                    for (int ny=ly-1; ny<=ly+fx[dir1][1]*k+1; ny++)
                        if(b1[nx][ny]==1){f1=0; break;}
                 for (int nx=lx; nx<=lx+fx[dir1][0]*k; nx++)
                    for (int ny=ly; ny<=ly+fx[dir1][1]*k; ny++)
                        if (b1[nx][ny]==3){f1=0; break;}
                 if (f1){
                    for (int jx=lx,jy=ly; jx<=lx+fx[dir1][0]*k && jy<=ly+fx[dir1][1]*k; jx+=fx[dir1][0],jy+=fx[dir1][1]){
                        b1[jx][jy]=1;
                        c1[jx][jy]=15;
                        color(15);
                        gotoxy1(jx,jy); printf("□");
                    }
                }
            }
            while (!f2){
                f2=1;
                int lx=rand()%(10)+1;
                int ly=rand()%(10)+1;
                for(int nx=lx-1; nx<=lx+fx[dir2][0]*k+1; nx++)
                    for (int ny=ly-1; ny<=ly+fx[dir2][1]*k+1; ny++)
                        if(b2[nx][ny]==1){f2=0; break;}
                 for (int nx=lx; nx<=lx+fx[dir2][0]*k; nx++)
                    for (int ny=ly; ny<=ly+fx[dir2][1]*k; ny++)
                        if (b2[nx][ny]==3){f2=0; break;}
                 if (f2){
                    for (int jx=lx,jy=ly; jx<=lx+fx[dir2][0]*k && jy<=ly+fx[dir2][1]*k; jx+=fx[dir2][0],jy+=fx[dir2][1])
                        b2[jx][jy]=1;
                }
            }
            int a=1;
        }
    }
}
 void reset(){
    system("cls");
    color(15);gotoxy(18,10); printf("按 0 重排战船; 按任意键开始与电脑对战"); 
     color(9);
    gotoxy(0,9 ); printf("玩家海域");
    gotoxy(0,22); printf("电脑海域");
     for (int i=1; i<=4; i++) rest[1][i]=rest[2][i]=5-i;
    for (int i=1; i<=10; i++){
        b1[0][i]=b1[i][0]=b2[0][i]=b2[i][0]=3;
        b1[11][i]=b1[i][11]=b2[11][i]=b2[i][11]=3;
    }
    color(8);
    for (int i=1; i<=10; i++)for (int j=1; j<=10; j++) c1[i][j]=c2[i][j]=8;
    for (int i=1; i<=10; i++)for (int j=1; j<=10; j++){
        b1[i][j]=b2[i][j]=0;
        a1[i][j]="□"; gotoxy1(i,j); cout <<a1[i][j];
        a2[i][j]="□"; gotoxy2(i,j); cout <<a2[i][j];
    }
    color(14);
    gotoxy1(1,-5); printf("%d*□□□□",rest[1][4]);
    gotoxy1(2,-5); printf("%d*□□□  ",rest[1][3]);
    gotoxy1(3,-5); printf("%d*□□    ",rest[1][2]);
    gotoxy1(4,-5); printf("%d*□      ",rest[1][1]);
    gotoxy2(4,12); printf("      □*%d",rest[2][1]);
    gotoxy2(3,12); printf("    □□*%d",rest[2][2]);
    gotoxy2(2,12); printf("  □□□*%d",rest[2][3]);
    gotoxy2(1,12); printf("□□□□*%d",rest[2][4]);
     color(2); for (int i=1; i<=10; i++){gotoxy1(i,11); cout <<i; gotoxy2(i,11); cout <<i;}
    color(6); for (int i=1; i<=10; i++){gotoxy1(11,i); cout <<i; gotoxy2(11,i); cout <<i;}
    color(7);   gotoxy1(12,4); printf("( , )"); gotoxy2(12,4); printf("( , )");
     put();
     now[0][0]=now[0][1]=now[1][0]=now[1][1]=1;
    r1=r2=10;
     char res=getch(); if (res=='0') reset();
}
 int main(){
     int gameover=1;
    while (gameover){
        srand(time(NULL));
        reset();
        gotoxy(18,10); printf("                                        ");
        int haha=0; 
        while (r1*r2){
            if (!move1()){haha=1; break;}          //玩家(haha==1说明中途退出)
            move2();                               //电脑 
        }
        gotoxy(18,0);
        if (haha) printf("怎么中途退出了...\n\n");
        else if (r1==0) printf("很遗憾,你输了...\n\n");
        else if (r2==0) printf("恭喜你,你赢了!!!\n\n");
        printf("按1退出;  按其它键继续\n>>");
        if (getch()=='1') gameover=0;
    }
}

  

#字棋
include<cstdio>
#include<windows.h>
#include<ctime>
int a[4][4],i,j,xc,yc,mouse=0,ok=0,record[2][9],foot=9,winner,first=0,who=0;
void Place(const int x, const int y) 
{ COORD PlaceCursorHere;PlaceCursorHere.X = y;PlaceCursorHere.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), PlaceCursorHere);
return;
}
void color(int x)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);}
int search(int x0,int y0,int x,int y)
{
mouse=GetAsyncKeyState(VK_LBUTTON);
POINT pt; HWND h=GetForegroundWindow(); GetCursorPos(&pt); ScreenToClient(h,&pt);
if(pt.x>=x0&&pt.y>=y0&&pt.x<=x&&pt.y<=y)
{
if(mouse!=0) {Sleep(100); return 2;} else return 1;
}
else return 0;
}
bool check(int x)
{
int b=0,c=0,d=0,e=0;
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++) {b+=a[i][j]; c+=a[j][i];} d+=a[i][i]; e+=a[i][4-i];
if(b==x||c==x||d==x||e==x) return true; b=0; c=0;
}
return false;
}
void pcmove()
{
int x=10,b=0,c=0,d=0,e=0; xc=0; yc=0;
while(x>0)
{
for(i=1;i<=3;i++)
{
b=0; c=0; for(j=1;j<=3;j++) {b+=a[i][j]; c+=a[j][i];} d+=a[i][i]; e+=a[i][4-i];
if(b==x) {for(j=1;j<=3;j++) if(a[i][j]==0) {xc=i; yc=j; return;}} if(c==x) {for(j=1;j<=3;j++) if(a[j][i]==0) {xc=j; yc=i; return;}}
if(d==x) {for(j=1;j<=3;j++) if(a[j][j]==0) {xc=yc=j; return;}} if(e==x) {for(j=1;j<=3;j++) if(a[j][4-j]==0) {xc=j; yc=4-j; return;}}
} x-=8;
}
if(a[2][2]==0) {xc=yc=2; return;} x=2;
while(x>0) {for(i=1;i<=3;i+=x) for(j=1;j<=3;j+=x) if(a[i][j]==0) {xc=i; yc=j; return;} x--;}
}
void show()
{
int x=foot;
for(i=1;i<=3;i++) for(j=1;j<=3;j++) if(a[i][j]!=0) {if(a[i][j]==1) color(15); else color(11); Place(2*i-1,4*j-2); printf("●");}
color(15); Place(7,0);
if(who==0) {if(foot%2==1) printf("1号"); else printf("2号");} else printf("电脑");
if(who==0||first==1) x--;
printf("下子:(%d,%d)",record[0][8-x],record[1][8-x]);
}
void button(int x)
{
if(x<3)
{
Place(x*3,15); printf("┌┄┄┐");
Place(x*3+1,17); if(x==0){if(ok==0) printf("开始"); else printf("悔棋");} if(x==1) printf("重来"); if(x==2) printf("退出");
Place(x*3+2,15); printf("└┄┄┘");
}
if(x>2&&x<6)
{
Place(10,(x-4)*7); printf("┌┄┐");
Place(11,(x-4)*7+2); if(x==4) printf("是"); else printf("否");
Place(12,(x-4)*7); printf("└┄┘");
}
if(x>5&&x<8)
{
Place(10,(x-6)*12); printf("┌┄┄┄┄┐");
Place(11,(x-6)*12+2); if(x==6) printf("人机对战"); else printf("人人对战");
Place(12,(x-6)*12); printf("└┄┄┄┄┘");
}
if(x>7)
{
Place(10,(x-8)*12); printf("┌┄┄┄┄┐");
Place(11,(x-8)*12+2); if(x==8) printf(" 我先手 "); else printf("电脑先手");
Place(12,(x-8)*12); printf("└┄┄┄┄┘");
}
}
void menu(int x)
{
int k,l;
if(x==0)
{
if(ok==0) {ok=1; return;}
else if(9-foot>1)
{
foot+=2; for(i=9-foot;i<=11-foot;i++) {a[record[0][i]][record[1][i]]=0; record[0][i]=record[1][i]=0;}
for(i=1;i<=3;i++) for(j=1;j<=3;j++) {Place(2*i-1,4*j-2); printf(" ");} show();
}
}
if(x>0&&x<3)
{
for(l=10;l<=12;l++) for(j=1;j<=22;j++) {Place(l,j); printf(" ");}
Place(9,1); printf("你想"); if(x==1) printf("重来吗?"); if(x==2) printf("退出吗?");
button(4); button(5);
while(1)
{
mouse=GetAsyncKeyState(VK_LBUTTON);
for(i=0;i<=1;i++)
{
k=search(7+i*55,165,40+i*55,200);
if(k!=2) {if(k==1) color(15); else color(7); button(i+4);}
else 
{for(l=9;l<=12;l++) for(j=1;j<=12;j++) {Place(l,j); printf(" ");}
if(i==0) {if(x==1) ok=2; else exit(0);} return;
} 
}
Sleep(50);
}
}
if(x>2&&x<5) {if(x==3) {who=1; return;} else {who=0; return;}}
if(x>4) {if(x==5) {first=0; return;} else {first=1; return;}}
}
void click()
{
for(i=0;i<=2;i++) 
{ mouse=GetAsyncKeyState(VK_LBUTTON);
int k=search(125,i*50+5,175,i*50+40);
if(k!=2) {if(k==1) color(15); else color(7); button(i); color(7);}
else{menu(i); return;} 
}
Sleep(50);
}
void humove()
{
while(1)
{
for(i=1;i<=3;i++) for(j=1;j<=3;j++) if(search(7+(i-1)*32,7+(j-1)*32,7+i*32,7+j*32)==2&&a[j][i]==0)
{if(who==0&&foot%2!=1) a[j][i]=5; else a[j][i]=1; record[0][9-foot]=j; record[1][9-foot]=i; return;} click(); if(ok==2) return;
}
}
void replace()
{
int k,l,p,q;
Place(7,0); for(i=1;i<=15;i++) printf(" "); for(i=1;i<=3;i++) for(j=1;j<=3;j++) {Place(2*i-1,4*j-2); printf(" "); a[i][j]=0;}
for(i=0;i<2;i++) for(j=0;j<9;j++) record[i][j]=0; foot=9; winner=0; first=0; who=0; ok=1; button(6); button(7);
while(1)
{
for(i=0;i<=1;i++)
{
mouse=GetAsyncKeyState(VK_LBUTTON); k=search(i*80+7,165,i*80+103,200); q=search(125,105,175,140);
if(k!=2) {if(k==1) color(15); else color(7); button(i+6); color(7);} 
else 
{
menu(i+3); for(l=10;l<=12;l++) for(j=1;j<=22;j++) {Place(l,j); printf(" ");}
if(who==1)
{
button(7); button(8);
while(1)
{
for(j=0;j<=1;j++)
{
mouse=GetAsyncKeyState(VK_LBUTTON); k=search(j*80+7,165,j*80+103,200); q=search(125,105,175,140);
if(k!=2) {if(k==1) color(15); else color(7); button(j+8); color(7);}
else{menu(j+5); for(l=10;l<=12;l++) for(p=1;p<=22;p++) {Place(l,p); printf(" ");} return;}
if(q!=2) {if(q==1) color(15); else color(7); button(2); color(7);} else menu(2);
} Sleep(50);
}
}
return;
}
if(q!=2) {if(q==1) color(15); else color(7); button(2); color(7);} else menu(2);
}
Sleep(50);
}
}
int main()
{
printf("┌─┬─┬─┐\n\n├─┼─┼─┤\n\n├─┼─┼─┤\n\n└─┴─┴─┘\n\n");
for(i=0;i<3;i++) button(i);
while(ok==0) click();
while(1)
{
replace();
while(foot>0&&ok!=0)
{
if(first!=1) {humove(); show(); if(check(3)) {winner=1; ok=0; break;} foot--; if(foot<=0||ok==0||ok==2) break;}
if(who==0&&check(15)) {winner=2;ok=0;break;}
if(who!=0) {pcmove(); record[0][9-foot]=xc; record[1][9-foot]=yc; a[xc][yc]=5; show(); if(check(15)) {winner=2;ok=0;} foot--; first=0;}
}
if(ok==2) {ok=1; continue;} Place(7,0); for(i=1;i<=15;i++) printf(" ");
Place(7,4); color(15); if(winner==0) printf("平局!");
if(who!=0) {if(winner==1) printf("你赢了!"); if(winner==2) printf("你输了!"); Sleep(50);}
else {if(winner==1) printf("1号赢了!"); if(winner==2) printf("2号赢了!"); Sleep(50);}
ok=0; while(ok==0) click();
}
}

  

事件三子棋
//转自:https://www.luogu.com.cn/paste/c1fvaio2
//作者:https://www.luogu.com.cn/user/217233
/*
制作者:SqrtSecond
版本号:v1.1.9 
v1.1.9更新内容:
压行 

v1.1.8更新内容:
修复了一些bug 

v1.1.7更新内容:
增加了设置页面和两个功能

v1.1.6更新内容:
1.增强了人机程序
2.修复了一些bug
3.更新了单人游戏的操作系统 

v1.1.5更新内容:
1.修改了棋盘边框系统,使64位电脑与32位电脑兼容
2.修改了键盘的控制系统 
3.增加新功能:按Enter或空格键可快速跳过剧情。
4.更新了5次神秘事件之后的buff特效
5.新增了人机系统和单人游戏

可以转载,但请务必注明出处!
*/
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int Speed=3,pianhao=1;
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
#define color(COLOR) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),COLOR);
void putss(string a)
{
	while(KEY_DOWN('\r')||KEY_DOWN(' '));
	bool flag=true;int len=a.length();
	for(int i=0;i<len-1;++i)
	{
		if(KEY_DOWN('\r')||KEY_DOWN(' '))flag=false;
		putchar(a[i]);
		if(flag)Sleep(Speed*10);
	}
	putchar(a[len-1]);
	while(KEY_DOWN('\r')||KEY_DOWN(' '));
}
int win1,win2,AIturn;bool flag,p;
int game(int turn);
void hint();
int Setting()
{
	system("cls");
	puts("速度调节——s\n");
	puts("键盘偏好——k\n");
	puts("退出——e\n");
	while(true)
	{
		if(KEY_DOWN('E')){while(KEY_DOWN('E'));return 0;}
		if(KEY_DOWN('S'))
		{
			while(true)
			{
				system("cls");
				color(112);for(int i=1;i<=6-Speed;++i)puts("  ");
				color(7);for(int i=6-Speed+1;i<=5;++i)puts("");
				printf("当前速度:%d\n",6-Speed);
				puts("按方向上下键进行设置,E键退出\n");
				while(true)
				{
					if(KEY_DOWN(VK_UP))
					{
						while(KEY_DOWN(VK_UP));
						Speed++;
						if(Speed==6)Speed=5;
						break;
					}
					if(KEY_DOWN(VK_DOWN))
					{
						while(KEY_DOWN(VK_DOWN));
						Speed--;
						if(Speed==0)Speed=1;
						break;
					}
					if(KEY_DOWN('E')){while(KEY_DOWN('E'));return 1;}
				}
			}
		}
		if(KEY_DOWN('K'))
		{
			while(true)
			{
				system("cls");
				puts("按左右键进行设置,E键退出\n");
				puts(pianhao==0?"当前偏好:wsad控制方向,空格键放置棋子":"当前偏好:方向键控制方向,Enter键放置棋子");
				puts("\n注:本设置仅在单人游戏时有效");
				while(true)
				{
					if(KEY_DOWN(VK_LEFT)||KEY_DOWN(VK_RIGHT))
					{
						pianhao=1-pianhao;
						while(KEY_DOWN(VK_LEFT)||KEY_DOWN(VK_RIGHT));
						break;
					}
					if(KEY_DOWN('E')){while(KEY_DOWN('E'));return 1;}
				}
			}
		}
	}
}
int home()
{
	system("cls");
	puts("主菜单\n");
	puts("开始游戏 —— s\n");
	puts("游戏说明 —— h\n");
	puts("设置 —— p\n");
	puts("退出 —— e\n");
	puts("制作人:SqrtSecond\n");
	puts("(P.S.按Enter或空格键可快速跳过剧情)"); 
	while(true)
	{
		if(KEY_DOWN('E'))
		{
			while(true)
			{
				system("cls");
				puts("确定要离开吗?\n");
				puts("是 —— y\n");
				puts("否 —— n\n");
				while(true)
				{
					if(KEY_DOWN('N'))return 1;
					if(KEY_DOWN('Y'))
					{
						system("cls");
						puts("qwq");
						return 0;
					}
				}
			}
		}
		if(KEY_DOWN('H'))
		{
			hint();
			return 1;
		}
		if(KEY_DOWN('P'))
		{
			while(Setting());
			return 1;
		}
		if(KEY_DOWN('S'))
		{
			system("cls");
			putss("那么,开始游戏吧!\n");system("pause");
			system("cls");
			puts("你要玩什么模式?\n");
			puts("单人,人机先走——a\n");
			puts("单人,人机后走——b\n");
			puts("双人——c\n");
			win1=win2=0;p=0;
			while(true)
			{
				if(KEY_DOWN('A'))AIturn=1,p=1;
				if(KEY_DOWN('B'))AIturn=-1,p=1;
				if(KEY_DOWN('C'))AIturn=0,p=1;
				if(p)
				{
					putss("好的,开始吧!");system("pause");
					int r=1;
					while(true)
					{r=-game(r);if(r==0)break;}
					return 1;
				}
			}
		}
	}
}
void hint()
{
	system("cls");
	putss("首先,这是一个双人游戏。\n");system("pause");
	putss("基本规则和标准的三子棋相同。\n");system("pause");
	putss("双方需要每人轮流下一手。\n");system("pause");
	putss("每人下完一手后,都会触发一个随机的事件。\n");system("pause");
	putss("有可能会消除场上已有的棋子……\n");system("pause");
	putss("但也有可能帮你多下一手棋!\n");system("pause");
	putss("这正是这个游戏的好玩之处。\n");system("pause");
	putss("也很靠运气。\n");system("pause");
	putss("另外……\n");system("pause");
	putss("别触发5次神秘事件,否则后果自负……\n");system("pause");
	putss("准备好了就开始吧!\n");system("pause");
	return;
}
int mp[5][5],X,Y;
void putchess()
{
	system("cls");
	printf("比分:%d:%d\n\n",win1,win2);
	puts("◤      ◥");
	for(int i=1;i<=3;++i)
	{
		printf("  ");
		for(int j=1;j<=3;++j)
		{
			if(X==i&&Y==j)color(112);
			printf(mp[i][j]==1?"×":mp[i][j]==-1?"○":"  ");
			if(X==i&&Y==j)color(7);
		}
		puts("  "); 
	}
	puts("◣      ◢");
}
int l;
int win()
{
	l=0;
	for(int i=1;i<=3;++i)
	{
		if(mp[i][1]+mp[i][2]+mp[i][3]==3)l=1;
		if(mp[i][1]+mp[i][2]+mp[i][3]==-3)l=-1;
		if(mp[1][i]+mp[2][i]+mp[3][i]==3)l=1;
		if(mp[1][i]+mp[2][i]+mp[3][i]==-3)l=-1;
	}
	if(mp[1][1]+mp[2][2]+mp[3][3]==3)l=1;
	if(mp[1][1]+mp[2][2]+mp[3][3]==-3)l=-1;
	if(mp[1][3]+mp[2][2]+mp[3][1]==3)l=1;
	if(mp[1][3]+mp[2][2]+mp[3][1]==-3)l=-1;
	if(l==0)
	{
		l=2;
		for(int i=1;i<=3;++i)for(int j=1;j<=3;++j)if(mp[i][j]==0)l=0;
	}
	if(l==2)
	{
		putchess();
		printf("恭喜双方打成平局!\n");system("pause");
		return true;
	}
	if(l!=0)
	{
		putchess();
		printf("%s获得了胜利!\n",l==1?(AIturn==1?"人机":AIturn==-1?"玩家":"玩家1"):(AIturn==-1?"人机":AIturn==1?"玩家":"玩家2"));system("pause");
		l==1?win1++:win2++;
		return true;
	}
	return false;
}
int xx,yy,h,boom,rx,ry,rz;
void effect(int playyer)
{
	rx=rand()%12+1;putchess();
	puts("事件发生!\n");system("pause");
	if(rx<=4)
	{
		ry=rand()%3+1;rz=rand()%3+1;mp[ry][rz]=0;
		putchess();printf("消除格子(%d,%d)!\n",ry,rz);
	}
	else if(rx==5)
	{
		ry=rand()%3+1;mp[ry][1]=mp[ry][2]=mp[ry][3]=0;
		putchess();printf("消除第%d行!\n",ry);
	}
	else if(rx==6)
	{
		ry=rand()%3+1;mp[1][ry]=mp[2][ry]=mp[3][ry]=0;
		putchess();printf("消除第%d列!\n",ry);
	}
	else if(rx==7)
	{
		mp[1][1]=mp[2][2]=mp[3][3]=0;
		putchess();printf("消除左上到右下的对角线!\n");
	}
	else if(rx==8)
	{
		mp[1][3]=mp[2][2]=mp[3][1]=0;
		putchess();printf("消除右上到左下的对角线!\n");
	}
	else if(rx==9)
	{
		do
		{
			ry=rand()%3+1;
			rz=rand()%3+1;
		}while(mp[ry][rz]);
		mp[ry][rz]=h;
		putchess();printf("帮你下一手(%d,%d)!\n",ry,rz);
	}
	else if(rx==10)
	{
		ry=rand()%2;
		if(ry)
		{
			for(int i=1;i<=3;++i)for(int j=1;j<=3;++j)mp[i][j]=-mp[i][j];
			putchess();printf("反转局势!!!");h=-h;
		}
		else puts("无事发生!(偷笑)");
	}
	else
	{
		boom++;
		if(boom==5)
		{
			system("color 4F");printf("神秘事件×%d!!!\n",boom);
			boom=0;system("pause");
			putss("5次神秘事件凑齐了……\n");Sleep(Speed*1000);
			putss("Windows的数据遭受了毁灭性的打击!!!\n");Sleep(Speed*1000);
			for(int i=1;i<=50;++i){system("color 2C");system("color AE");system("color 7A");system("color E4");system("color 58");system("color B6");}
			system("color 4F");
			for(int i=1;i<=3;++i)for(int j=1;j<=3;++j)mp[i][j]=0;
			putchess();
			MessageBox(NULL,"您的Windows可能出现了点问题。","Windows系统自动提示",MB_OK+48);
			MessageBox(NULL,"Windows正在尝试修复您的系统中……","Windows系统自动提示",MB_OK+64);
			MessageBox(NULL,"系统内部存储器已被破坏!","Windows系统自动提示",MB_OK+48);
			putss("数据已被破坏……请重新开始……\n");Sleep(Speed*1000);h=-1;
		}
		else printf("神秘事件×%d!!!\n",boom);
	}
	system("pause");
	if(rx>=11)system("color 07");
}
/*
x=1,2,3,4(1/3):随机消除一个格子
x=5(1/12):随机消除一行
x=6(1/12):随机消除一列
x=7(1/12):消除左上到右下的对角线
x=8(1/12):消除左上到右下的对角线
x=9(1/12):帮自己下一手
x=10(1/12):反转局势或无事发生 
x=11,12(1/6):神秘事件 
*/
bool player1(){return (((h==1&&AIturn!=-1)||(h==-1&&AIturn==-1))&&pianhao==1)||(((h==1&&AIturn!=1)||(h==-1&&AIturn==1))&&pianhao==0);}
void puthint(){printf("现在轮到%s(执%s)了,你要下在哪一行,哪一列?%s\n",h==1?(AIturn==1?"人机":AIturn==-1?"玩家":"玩家1"):(AIturn==-1?"人机":AIturn==1?"玩家":"玩家2"),h==1?"×":"○",player1()?"(用wsad控制方向,空格键放置棋子)":"(用方向键控制方向,Enter键放置棋子)");}
int AI(int t)
{
	for(int i=1;i<=3;++i)
	{
		if(mp[i][1]+mp[i][2]+mp[i][3]==2*t)return mp[i][1]==0?i*3+1:mp[i][2]==0?i*3+2:i*3+3;
		if(mp[1][i]+mp[2][i]+mp[3][i]==2*t)return mp[1][i]==0?1*3+i:mp[2][i]==0?2*3+i:3*3+i;
	}
	if(mp[1][1]+mp[2][2]+mp[3][3]==2*t)return mp[1][1]==0?4:mp[2][2]==0?8:12;
	if(mp[1][3]+mp[2][2]+mp[3][1]==2*t)return mp[1][3]==0?6:mp[2][2]==0?8:10;//判断己方二子连珠
	for(int i=1;i<=3;++i)
	{
		if(mp[i][1]+mp[i][2]+mp[i][3]==-2*t)return mp[i][1]==0?i*3+1:mp[i][2]==0?i*3+2:i*3+3;
		if(mp[1][i]+mp[2][i]+mp[3][i]==-2*t)return mp[1][i]==0?1*3+i:mp[2][i]==0?2*3+i:3*3+i;
	}
	if(mp[1][1]+mp[2][2]+mp[3][3]==-2*t)return mp[1][1]==0?4:mp[2][2]==0?8:12;
	if(mp[1][3]+mp[2][2]+mp[3][1]==-2*t)return mp[1][3]==0?6:mp[2][2]==0?8:10;//判断对方二子连珠
	if(mp[2][2]==0)return 8;//判中心 
	if(mp[1][1]+mp[2][2]+mp[3][3]==t&&(mp[1][1]==0||mp[2][2]==0))return mp[2][2]==0?8:mp[1][1]==0?4:12;
	if(mp[1][3]+mp[2][2]+mp[3][1]==t&&(mp[1][3]==0||mp[2][2]==0))return mp[2][2]==0?8:mp[1][3]==0?6:10;
	for(int i=1;i<=3;++i)
	{
		if(mp[i][1]+mp[i][2]+mp[i][3]==t&&(mp[i][1]==0||mp[i][2]==0))return mp[i][1]==0?i*3+1:mp[i][3]==0?i*3+3:i*3+2;
		if(mp[1][i]+mp[2][i]+mp[3][i]==t&&(mp[1][i]==0||mp[2][i]==0))return mp[1][i]==0?1*3+i:mp[3][i]==0?3*3+i:2*3+i;//判断己方一子连珠 
	}//判己方一子连珠
	return mp[1][1]==0?4:mp[1][3]==0?6:mp[3][1]==0?10:mp[3][3]==0?12:mp[1][2]==0?5:mp[2][1]==0?7:mp[2][3]==0?9:11;
}
int game(int turn)
{
	boom=0;h=turn;memset(mp,0,sizeof(mp));
	while(true)
	{
		X=Y=2;putchess();
		if(h!=AIturn)
		{
			puthint();
			while(((KEY_DOWN('W')||KEY_DOWN('S')||KEY_DOWN('A')||KEY_DOWN('D')||KEY_DOWN(' '))&&player1())||((KEY_DOWN(VK_UP)||KEY_DOWN(VK_DOWN)||KEY_DOWN(VK_LEFT)||KEY_DOWN(VK_RIGHT)||KEY_DOWN('\r'))&&!player1()));
			while(true)
			{
				if((KEY_DOWN('W')&&player1())||(KEY_DOWN(VK_UP)&&!player1()))
				{
					X=(X+1)%3+1;
					putchess();puthint();
					while((KEY_DOWN('W')&&player1())||(KEY_DOWN(VK_UP)&&!player1()));
				}
				if((KEY_DOWN('A')&&player1())||(KEY_DOWN(VK_LEFT)&&!player1()))
				{
					Y=(Y+1)%3+1;
					putchess();puthint();
					while((KEY_DOWN('A')&&player1())||(KEY_DOWN(VK_LEFT)&&!player1()));
				}
				if((KEY_DOWN('S')&&player1())||(KEY_DOWN(VK_DOWN)&&!player1()))
				{
					X=(X%3)+1;
					putchess();puthint();
					while((KEY_DOWN('S')&&player1())||(KEY_DOWN(VK_DOWN)&&!player1()));
				}
				if((KEY_DOWN('D')&&player1())||(KEY_DOWN(VK_RIGHT)&&!player1()))
				{
					Y=(Y%3)+1;
					putchess();puthint();
					while((KEY_DOWN('D')&&player1())||(KEY_DOWN(VK_RIGHT)&&!player1()));
				}
				if((KEY_DOWN(' ')&&player1())||(KEY_DOWN('\r')&&!player1()))
				{
					while((KEY_DOWN(' ')&&player1())||(KEY_DOWN('\r')&&!player1()));
					if(!mp[X][Y])break;
				}
			}
		}
		else
		{
			puts("人机计算中……");
			int m=AI(AIturn),y=(m+2)%3+1,x=(m-y)/3;
			if(x==y&&x==2)Sleep(Speed*100);
			else if(x+y==3||x+y==5)
			{
				Sleep(Speed*50);
				X=x;Y=y;putchess();puts("人机计算中……");Sleep(Speed*50);
			}
			else
			{
				Sleep(Speed*33.33);
				X=x;putchess();puts("人机计算中……");Sleep(Speed*33.33);
				Y=y;putchess();puts("人机计算中……");Sleep(Speed*33.33);
			}
		}
		mp[X][Y]=h;X=Y=4;
		if(win())break;
		effect(h);   
		if(win())break;
		h=-h;
	}
	while(true)
	{
		system("cls");
		puts("要再玩一局吗?\n");
		puts("是 —— y\n");
		puts("否 —— n\n");
		while(true)
		{
			if(KEY_DOWN('N'))
			{
				system("cls");
				putss("正在计算最终得分……\n");
				Sleep(Speed*666.66);
				if(win1!=win2)
				{
					putss("最终的胜利者是:\n");Sleep(Speed*333.33);
					printf("%s!\n",win1>win2?(AIturn==1?"人机":AIturn==-1?"玩家":"玩家1"):(AIturn==-1?"人机":AIturn==1?"玩家":"玩家2"));system("pause");
				}
				else
				{
					putss("最终结果是……\n");Sleep(Speed*333.33);
					puts("平局!");system("pause");
				}
				printf("你们的比分为:%d:%d。\n",win1,win2);system("pause");
				putss("欢迎下次再玩!\n");system("pause");
				return 0;
			}
			if(KEY_DOWN('Y'))return h;
		}
	}
}
int main()
{
	srand(time(NULL));
	while(home());
	return 0;
}

  

双人围棋
//转自:https://www.luogu.com.cn/paste/c1fvaio2
//作者:https://www.luogu.com.cn/user/217233
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<ctime>
using namespace std;
const int n=19,rangzi=7;//棋盘大小,让子子数
int x,y,turn,a[101][101],vis[101][101],vist[101][101],ans,p;char g;bool flag;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
bool dfs1(int x,int y,int u){
	if(x==0||y==0||x==n+1||y==n+1||a[x][y]==3-u)return true;
	if(a[x][y]==0)return false;
	vis[x][y]=true;
	for(int i=0;i<=3;++i)if(!vis[x+dx[i]][y+dy[i]]&&!dfs1(x+dx[i],y+dy[i],u))return false;
	return true;
}
void dfs2(int x,int y,int u){
	if(x==0||y==0||x==n+1||y==n+1||a[x][y]!=u)return;
	a[x][y]=0;for(int i=0;i<=3;++i)dfs2(x+dx[i],y+dy[i],u);
}
bool dfs3(int x,int y){
	if(x==0||y==0||x==n+1||y==n+1||a[x][y]==1)return true;
	if(a[x][y]==2)return false;
	vis[x][y]=true;
	for(int i=0;i<=3;++i)if(!vis[x+dx[i]][y+dy[i]]&&!dfs3(x+dx[i],y+dy[i]))return false;
	return true;
}
void dfs4(int x,int y){
	if(x==0||y==0||x==n+1||y==n+1||vist[x][y]||a[x][y]==2)return;
	ans++;vist[x][y]=1;
	if(a[x][y]==0){a[x][y]=3;for(int i=0;i<=3;++i)dfs4(x+dx[i],y+dy[i]);}
}
void putchess(){
	system("cls");
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			putchar(i==x&&j==y?'>':' ');
			putchar(a[i][j]==3?',':a[i][j]==0?((i==4||i==n-3||2*i==n+1)&&(j==4||j==n-3||2*j==n+1))?'*':'.':a[i][j]==1?'@':'O');
		}
		putchar('\n');
	}
}
bool control(char g){
	x=(g=='w'?x+n-2:g=='s'?x:x-1)%n+1;
	y=(g=='a'?y+n-2:g=='d'?y:y-1)%n+1;
	return g==' ';
}
int main(){
	x=y=(n+1)/2;turn=1;
	while(true){
		putchess();puts("按三下P结束游戏。");
		g=_getch();
		if(g=='p'){
			p++;if(p==3)break;continue;
		}else p=0;
		if(control(g)){
			if(a[x][y]!=0)continue;
			a[x][y]=turn;flag=false;
			for(int i=0;i<=3;++i){
				memset(vis,0,sizeof(vis));
				if(a[x+dx[i]][y+dy[i]]==3-turn&&dfs1(x+dx[i],y+dy[i],3-turn))flag=true,dfs2(x+dx[i],y+dy[i],3-turn);
			}
			if(!flag&&dfs1(x,y,turn)){a[x][y]=0;continue;}
			turn=3-turn;
		}
	}
	p=0;
	while(true){
		putchess();puts("请清除所有死子;按三下p结束清除。");
		g=_getch();
		if(g=='p'){
			p++;if(p==3)break;continue;
		}else p=0;
		if(control(g)){a[x][y]=0;continue;}
	}
	for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){
		memset(vis,0,sizeof(vis));
		if(dfs3(i,j))dfs4(i,j);
	}
	putchess();printf("黑棋%d目,白棋%d目,%s赢了!",ans,n*n-ans,ans*2-rangzi>n*n?"黑棋":"白棋");
	Sleep(3000);
}

  

中国象棋
#include <iostream>
#include <memory.h>
#include <cmath>
using namespace std;//存储结构:chess类是基类,派生类是各种棋子,在chessboard类中用chess的指针调用各个棋子
class chessboard;
class chess{
private:
    int id;//等级
public:
    chess(int i):id(i){}
    int get(){return id;}
    virtual bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy)=0;
    virtual ~chess(){};//虚析构
};
 class chessboard{
private:
    chess *c[10][9];
    char chessword[15][4]={"帅","相","炮","士","車","馬","兵","","卒","马","车","仕","砲","象","将"};//名字
public:
    chessboard(){memset(c, NULL, sizeof(c));};//把指针初始化为零指针
    void init();
    chess* get(int x,int y){return c[x][y];}
    int getid(int x,int y){ if(c[x][y]!=NULL) return c[x][y]->get();return 0;}
    void show();
    void play();
    bool move(int startx,int starty,int aimx,int aimy);
    ~chessboard();//析构函数
    static bool end;//判断结束
    static int player;
};
 bool chessboard::end=true;
int chessboard::player=-1;
 bool chessboard::move(int startx,int starty,int aimx,int aimy){
    if(startx>=0&&startx<10&&starty>=0&&starty<9//初步判断传入的点是否符合规则
       &&aimx>=0&&aimx<10&&aimy>=0&&aimy<9
       &&getid(startx,starty)&&getid(startx,starty)*player>0
       &&c[startx][starty]->judge_move(*this,startx,starty,aimx,aimy)){
        if(c[aimx][aimy]!=NULL) delete c[aimx][aimy];//吃子
        c[aimx][aimy]=c[startx][starty];
        c[startx][starty]=NULL;
    player*=-1;
    return true;
    }
    cout<<"走法错误,不符合规则"<<endl;
    return false;
}
 class horse : public chess{//马的实现
public:
    horse(int i) : chess((i==0?-2:2)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&(tempx*tempx+tempy*tempy==5)&&!cb.get(startx+tempx/2,starty+tempy/2))
        return true;
        return false;
    }
};
 class soldier : public chess{//兵(卒)的实现
public:
    soldier(int c) : chess((c==0?-1:1)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&sid*tempx<=0){
            if(abs(tempx)==1&&tempy==0) return true;
            if(abs(tempy)==1&&tempx==0)
                if((startx/5==0&&sid>0)||(startx/5==1&&sid<0)) return true;
            return false;
        }
        return false;
    }
};
 class general : public chess{//帅(将)的实现
public:
    general(int c) : chess((c==0?-7:7)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&tempy*tempy+tempx*tempx==1&&aimx%7>=0&&aimx%7<=2&&aimy>=3&&aimy<=5)
            return true;
        return false;
    }
    ~general(){chessboard::end=false;}
};
 class elephant : public chess{//象(相)的实现
public:
    elephant(int c) : chess((c==0?-6:6)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&tempy*tempy+tempx*tempx==8&&startx/5==aimx/5&&!cb.get(startx+tempx/2,starty+tempy/2))
            return true;
        return false;
    }
};
 class cannon : public chess{//炮的实现
public:
    cannon(int c) : chess((c==0?-5:5)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&!(tempx&&tempy)&&(tempx+tempy)){
            int tot=0;
            if(tempx!=0){
                int sign=tempx>0?1:-1;
                for(int i=1;i<abs(tempx);i++)
                    if(cb.get(startx+sign*i,starty)) tot++;
            }
            else{
                int sign=tempy>0?1:-1;
                for(int i=1;i<abs(tempy);i++)
                    if(cb.get(startx,starty+sign*i)) tot++;
            }
            if(!aid)
            {if(!tot) return true;}
            else
            {if(tot==1) return true;}
        }
        return false;
    }
};
 class guard: public chess{//士(仕)的实现
public:
    guard(int c) : chess((c==0?-4:4)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&tempy*tempy+tempx*tempx==2&&aimx%7>=0&&aimx%7<=2&&aimy>=3&&aimy<=5)
            return true;
        return false;
    }
};
 class rook : public chess{//车的实现
public:
    rook(int c) : chess((c==0?-3:3)){}
    bool judge_move(chessboard &cb,int startx,int starty,int aimx,int aimy){
        int tempx=aimx-startx,tempy=aimy-starty;
        int sid=cb.getid(startx, starty),aid=cb.getid(aimx, aimy);
        if(sid*aid<=0&&!(tempx&&tempy)&&(tempx+tempy)){
            if(tempx!=0){
                int sign=tempx>0?1:-1;
                for(int i=1;i<abs(tempx);i++)
                    if(cb.get(startx+sign*i,starty)) return false;
            }
            else{
                int sign=tempy>0?1:-1;
                for(int i=1;i<abs(tempy);i++)
                    if(cb.get(startx,starty+sign*i)) return false;
            }
                return true;
        }
        return false;
    }
};
 chessboard :: ~chessboard(){
    for(int i=0;i<10;i++)
        for(int j=0;j<9;j++)
            if(c[i][j]!=NULL){
                delete c[i][j];
                c[i][j]=NULL;
            }
}
 void chessboard :: init(){//初始化,棋子的生成
    c[0][0]=new rook(0);        c[0][8]=new rook(0);
    c[0][1]=new horse(0);       c[0][7]=new horse(0);
    c[0][2]=new elephant(0);    c[0][6]=new elephant(0);
    c[0][3]=new guard(0);       c[0][5]=new guard(0);
    c[0][4]=new general(0);     c[9][4]=new general(1);
    c[2][1]=new cannon(0);      c[2][7]=new cannon(0);
    c[3][0]=new soldier(0);     c[3][2]=new soldier(0);
    c[3][4]=new soldier(0);     c[3][6]=new soldier(0);
    c[3][8]=new soldier(0);     c[6][8]=new soldier(1);
    c[6][0]=new soldier(1);     c[6][2]=new soldier(1);
    c[6][4]=new soldier(1);     c[6][6]=new soldier(1);
    c[7][1]=new cannon(1);      c[7][7]=new cannon(1);
    c[9][0]=new rook(1);        c[9][8]=new rook(1);
    c[9][1]=new horse(1);       c[9][7]=new horse(1);
    c[9][2]=new elephant(1);    c[9][6]=new elephant(1);
    c[9][3]=new guard(1);       c[9][5]=new guard(1);
}
 void chessboard :: show(){
    cout<<"吴  零一二三四五六七八"<<endl<<endl;
    char num[10][4]={"零","一","二","三","四","五","六","七","八","九"};
    for(int i=0;i<10;i++){
        if(i==5) cout<<"    ——楚 河 汉 界———"<<endl;
        cout<<num[i]<<"  ";
        for(int j=0;j<9;j++){
            if(c[i][j]!=NULL)
            cout<<chessword[c[i][j]->get()+7];
            else if((i==1&&j==4)||(i==8&&j==4))
                cout<<"米";
            else
                cout<<"十";
        }
        cout<<endl;
    }
}
 void chessboard::play(){
    this->init();
    this->show();
    do{
       int startx,starty,aimx,aimy;
        int sid,aid;
        do{
            sid=aid=0;
            cout<<"请输入起始棋子位置与目标位置的坐标:"<<endl;
            cin>>startx>>starty>>aimx>>aimy;
        }while(!this->move(startx,starty,aimx,aimy));
        this->show();
    }while(chessboard::end);
    cout<<"结束,赢家是Player"<<(chessboard::player==1?1:2)<<endl;
}
 int main(){
    chessboard C;
    C.play();
}

  

五子棋AI
#include <cstdio>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <cstring>
using namespace std;
#define Forij(x) for(int i=1;i<=x;i++)for(int j=1;j<=x;j++)
#define N 25 
typedef long long LL;
LL fx[4][2]={{1,1},{1,0},{0,1},{1,-1}};
LL Q,GG;
string C[20]={"●","○","﹢","═","║","╔","╚","╗","╝","•"};//╋
void color(LL a){//颜色函数
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void gotoxy(LL x,LL y){
    COORD pos;
    pos.X=2*x;
    pos.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
 struct Gomoku{
    LL m[50][50],nx,ny;
    void reset(){
        system("cls");
        memset(m,-1,sizeof(m));
        color(7);
        for (LL i=1; i<=N; i++){
            gotoxy(0,i);cout<<C[4]; gotoxy(N+1,i);cout<<C[4];
            gotoxy(i,0);cout<<C[3]; gotoxy(i,N+1);cout<<C[3];
        }
        gotoxy(0,0);cout<<C[5]; gotoxy(0,N+1);cout<<C[6];
        gotoxy(N+1,0);cout<<C[7]; gotoxy(N+1,N+1);cout<<C[8];
        color(3);
        Forij(N){
            gotoxy(i,j); cout<<C[2];
        }
        nx=ny=N/2+1; gotoxy(nx,ny);
    }
     void _drop(LL x,LL i,LL j){
        m[i][j]=x;
        gotoxy(i,j);
        color(15); cout<<C[x];
    }
     LL check(){
        Forij(N){
            for (LL Fx=0,tmp,lst,xx,yy; Fx<4; Fx++) if(m[i][j]!=-1){
                xx=i,yy=j,tmp=0,lst=m[i][j];
                for (LL k=1; k<=5; k++){
                    if (xx>N || yy>N) break;
                    if (m[xx][yy]==(lst^1)){break;}
                    if (m[xx][yy]==lst) tmp++;
                    xx+=fx[Fx][0],yy+=fx[Fx][1];
                }
                if (tmp==5){
                    return lst;
                }
            }
        }
        return -1;
    }
    LL arnd(LL x,LL y){
        LL cnt=0;
        for (LL i=x-1; i<=x+1; i++) if (i>0 && i<=N)
            for (LL j=y-1; j<=y+1; j++) if (j>0 && j<=N)
                if (m[i][j]>-1) cnt++;
        return cnt;
    }
    void get_val(LL x,LL y,LL &val){
        val=0;
        Forij(N){
            for (LL Fx=0,tmp,tk,xx,yy; Fx<4; Fx++){
                xx=i,yy=j,tmp=tk=0;
                for (LL k=1; k<=5; k++){
                    if (xx>N || yy>N){tmp=0; break;}
                    if (m[xx][yy]==(x^1)){tmp=0; break;}
                    if (m[xx][yy]==x) tmp++,tk+=(1<<(k-1));
                    xx+=fx[Fx][0],yy+=fx[Fx][1];
                }
                switch(tmp){
                    case 5:
                        val+=8000000000; break; 
                    case 4:
                        val+=1000+350*y; break;
                    case 3:
                        val+=(tk==14)?(300+600*y):(300+200*y); break;
                    case 2:
                        val+=3+2*y; break;
                    case 1:
                        val+=1+y; break;
                }
            }
        }
    }
     void AI(LL x){
        LL best,brnd,bi,bj,v1,v2,kkk;
        best=-2147483647;
        brnd=-2147483647;
        Forij(N) if (m[i][j]==-1){
            m[i][j]=x;
            get_val(x,10,v1); //gotoxy(N+5,N/2);printf("%d                ",v1);
            get_val(x^1,80,v2); //gotoxy(N+5,N/2+1);printf("%d             ",v2);
            if (v1-v2>best) bi=i,bj=j,best=v1-v2;
            if (v1-v2==best)
                if ((kkk=arnd(i,j))>brnd)
                    brnd=kkk,bi=i,bj=j;
            m[i][j]=-1;
        }
        _drop(x,bi,bj);
    }
     void HM(LL x){
        char ch=getch();
        for (;;ch=getch()){
            if (ch=='w') {if (ny>1) ny--;}
            else if (ch=='s') {if (ny<N) ny++;}
            else if (ch=='a') {if (nx>1) nx--;}
            else if (ch=='d') {if (nx<N)nx++;}
            else if (m[nx][ny]==-1){_drop(x,nx,ny); return;}
            gotoxy(nx,ny);
        }
    }
} A;
 int main(){
    for (;;){
        A.reset();
        for (GG=-1;;){
            gotoxy(A.nx,A.ny);
            A.HM(0); GG=A.check(); if (GG>-1) break;
            A.AI(1); GG=A.check(); if (GG>-1) break;
        }
        gotoxy(5,N+3);
        if (GG==0) printf("AI_1 win!");
        if (GG==1) printf("AI_2 wins!");
        while (kbhit()) getch();
        Sleep(500);
        gotoxy(5,N+3);
        printf("Press anything to continue.");
        getch();
    }
}

  

ABS五子棋(win7+win10)
作者:/user/297831
转自:/discuss/362406

//win7版本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<time.h>
#include<conio.h>
#include<windows.h>
#include<ctime>
using namespace std;
struct coordinate{
	int X,Y;
}Coor1[626],Coor2[626];
char Getin=' ';
int Map[25][25],Sum1,Sum2;
int Map1[25][25]; 
void No(){
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
	CursorInfo.bVisible = false; //隐藏控制台光标
	SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
}
void _Coordinate_(int x,int y){
    HANDLE winHandle;//句柄
    COORD pos = {x,y};
    winHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    //设置光标位置 
    SetConsoleCursorPosition(winHandle,pos); 
}
int Hrong(int x,int y,int n){
	if(Map[x][y]==n)	return 5;
}
void Nturn(){
	int x1[10],y1[10];
	for(int i=Sum1-1;i>=0;i--){
		int x=Coor2[i].X,y=Coor2[i].Y,Emc=0;
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==2){	x1[0]++;y1[0]++;Emc++;}
		if(Emc==2&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=5+3*Hrong(x1[0]+1,y1[0]+1,2);}
		if(Emc==3&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=50+90*Hrong(x1[0]+1,y1[0]+1,2);}
		if(Emc==4&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=500;}
		Emc=0;
		while(Map[x1[1]][y1[1]]==2){	x1[1]--;y1[1]++;Emc++;}
		if(Emc==2&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=5+3*Hrong(x1[1]-1,y1[1]+1,2);}
		if(Emc==3&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=50+90*Hrong(x1[1]-1,y1[1]+1,2);}
		if(Emc==4&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=500;}
		Emc=0;
		while(Map[x1[2]][y1[2]]==2){	x1[2]++;y1[2]--;Emc++;}
		if(Emc==2&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=5+3*Hrong(x1[2]+1,y1[2]-1,2);}
		if(Emc==3&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=50+90*Hrong(x1[2]+1,y1[2]-1,2);}
		if(Emc==4&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=500;}
		Emc=0; 
		while(Map[x1[3]][y1[3]]==2){	x1[3]--;y1[3]--;Emc++;}
		if(Emc==2&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=5+3*Hrong(x1[3]-1,y1[3]-1,2);}
		if(Emc==3&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=50+90*Hrong(x1[3]-1,y1[3]-1,2);}
		if(Emc==4&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=500;}
		Emc=0;
		while(Map[x1[4]][y1[4]]==2){	x1[4]++;Emc++;}
		if(Emc==2&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=5+3*Hrong(x1[4]+1,y1[4],2);}
		if(Emc==3&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=50+90*Hrong(x1[4]+1,y1[4],2);}
		if(Emc==4&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=500;}
		Emc=0;
		while(Map[x1[5]][y1[5]]==2){	x1[5]--;Emc++;}
		if(Emc==2&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=5+3*Hrong(x1[5]-1,y1[5],2);}
		if(Emc==3&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=50+90*Hrong(x1[5]-1,y1[5],2);}
		if(Emc==4&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=500;}
		Emc=0;
		while(Map[x1[6]][y1[6]]==2){	y1[6]--;Emc++;}
		if(Emc==2&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=5+3*Hrong(x1[6],y1[6]-1,2);}
		if(Emc==3&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=50+90*Hrong(x1[6],y1[6]-1,2);}
		if(Emc==4&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=500;}
		Emc=0;
		while(Map[x1[7]][y1[7]]==2){	y1[7]++;Emc++;}
		if(Emc==2&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=5+3*Hrong(x1[7],y1[7]+1,2);}
		if(Emc==3&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=50+90*Hrong(x1[7],y1[7]+1,2);}
		if(Emc==4&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=500;}
	}
}
void Uturn(){
	int x1[10],y1[10];
	for(int i=Sum1-1;i>=0;i--){
		int x=Coor1[i].X,y=Coor1[i].Y,Emc=0;
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==1){	x1[0]++;y1[0]++;Emc++;}
		if(Emc==2&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=5+4*Hrong(x1[0]+1,y1[0]+1,1);}
		if(Emc==3&&Map[x-1][y-1]==0&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=45+2*Hrong(x1[0]+1,y1[0]+1,1);}
		if(Emc==4&&Map[x-1][y-1]==2&&Map[x1[0]][y1[0]]==0){Map1[x1[0]][y1[0]]+=55;}
		Emc=0;
		while(Map[x1[1]][y1[1]]==1){	x1[1]--;y1[1]++;Emc++;}
		if(Emc==2&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=5+4*Hrong(x1[1]-1,y1[1]+1,1);}
		if(Emc==3&&Map[x+1][y-1]==0&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=45+2*Hrong(x1[1]-1,y1[1]+1,1);}
		if(Emc==4&&Map[x+1][y-1]==2&&Map[x1[1]][y1[1]]==0){Map1[x1[1]][y1[1]]+=55;}
		Emc=0;
		while(Map[x1[2]][y1[2]]==1){	x1[2]++;y1[2]--;Emc++;}
		if(Emc==2&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=5+4*Hrong(x1[2]+1,y1[2]-1,1);}
		if(Emc==3&&Map[x-1][y+1]==0&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=45+2*Hrong(x1[2]+1,y1[2]-1,1);}
		if(Emc==4&&Map[x-1][y+1]==2&&Map[x1[2]][y1[2]]==0){Map1[x1[2]][y1[2]]+=55;}
		Emc=0; 
		while(Map[x1[3]][y1[3]]==1){	x1[3]--;y1[3]--;Emc++;}
		if(Emc==2&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=5+4*Hrong(x1[3]-1,y1[3]-1,1);}
		if(Emc==3&&Map[x+1][y+1]==0&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=45+2*Hrong(x1[3]-1,y1[3]-1,1);}
		if(Emc==4&&Map[x+1][y+1]==2&&Map[x1[3]][y1[3]]==0){Map1[x1[3]][y1[3]]+=55;}
		Emc=0;
		while(Map[x1[4]][y1[4]]==1){	x1[4]++;Emc++;}
		if(Emc==2&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=5+4*Hrong(x1[4]+1,y1[4],1);}
		if(Emc==3&&Map[x-1][y]==0&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=45+2*Hrong(x1[4]+1,y1[4],1);}
		if(Emc==4&&Map[x-1][y]==2&&Map[x1[4]][y1[4]]==0){Map1[x1[4]][y1[4]]+=55;}
		Emc=0;
		while(Map[x1[5]][y1[5]]==1){	x1[5]--;Emc++;}
		if(Emc==2&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=5+4*Hrong(x1[5]-1,y1[5],1);}
		if(Emc==3&&Map[x+1][y]==0&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=45+2*Hrong(x1[5]-1,y1[5],1);}
		if(Emc==4&&Map[x+1][y]==2&&Map[x1[5]][y1[5]]==0){Map1[x1[5]][y1[5]]+=55;}
		Emc=0;
		while(Map[x1[6]][y1[6]]==1){	y1[6]--;Emc++;}
		if(Emc==2&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=5+4*Hrong(x1[6],y1[6]-1,1);}
		if(Emc==3&&Map[x][y+1]==0&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=45+2*Hrong(x1[6],y1[6]-1,1);}
		if(Emc==4&&Map[x][y+1]==2&&Map[x1[6]][y1[6]]==0){Map1[x1[6]][y1[6]]+=55;}
		Emc=0;
		while(Map[x1[7]][y1[7]]==1){	y1[7]++;Emc++;}
		if(Emc==2&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=5+4*Hrong(x1[7],y1[7]+1,1);}
		if(Emc==3&&Map[x][y-1]==0&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=45+2*Hrong(x1[7],y1[7]+1,1);}
		if(Emc==4&&Map[x][y-1]==2&&Map[x1[7]][y1[7]]==0){Map1[x1[7]][y1[7]]+=55;}
	}
} 
void ESET(){
	for(int i=2;i<23;i++)
		for(int j=2;j<23;j++){
			if(Map[i][j]==0&&Map[i+1][j]!=0&&Map[i-1][j]==Map[i+1][j]&&(Map[i+2][j]==0||Map[i+2][j]==Map[i+1][j])&&(Map[i-2][j]==0||Map[i-2][j]==Map[i-1][j]))
				Map1[i][j]+=5;
			if(Map[i][j]==0&&Map[i][j+1]!=0&&Map[i][j-1]==Map[i][j+1]&&(Map[i][j+2]==0||Map[i][j+2]==Map[i][j+1])&&(Map[i][j-2]==0||Map[i][j-2]==Map[i][j-1]))
				Map1[i][j]+=5;
			if(Map[i][j]==0&&Map[i+1][j+1]!=0&&Map[i-1][j-1]==Map[i+1][j+1]&&(Map[i+2][j+2]==0||Map[i+2][j+2]==Map[i+1][j+1])&&(Map[i-2][j-2]==0||Map[i-2][j-2]==Map[i-1][j-1]))
				Map1[i][j]+=5;
			if(Map[i][j]==0&&Map[i-1][j+1]!=0&&Map[i+1][j-1]==Map[i-1][j+1]&&(Map[i-2][j+2]==0||Map[i-2][j+2]==Map[i-1][j+1])&&(Map[i+2][j-2]==0||Map[i+2][j-2]==Map[i+1][j-1]))
				Map1[i][j]+=5;
		}
} 
void AI(){
	if(Sum1==0){
		Map[12][12]=2;
		Coor2[Sum2].X=12;
		Coor2[Sum2++].Y=12;
		return;
	}
	for(int i=0;i<25;i++)
		for(int j=0;j<25;j++)
			Map1[i][j]=0;
	int x1[10],y1[10],Ax,Ay,Max=0;
	ESET();
	Uturn();
	Nturn();
	for(int i=Sum1-1;i>=0;i--){
		int x=Coor1[i].X,y=Coor1[i].Y,Emc[10]={0};
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==1){	x1[0]++;y1[0]++;Emc[0]++;}
		while(Map[x1[1]][y1[1]]==1){	x1[1]--;y1[1]++;Emc[1]++;}
		while(Map[x1[2]][y1[2]]==1){	x1[2]++;y1[2]--;Emc[2]++;}
		while(Map[x1[3]][y1[3]]==1){	x1[3]--;y1[3]--;Emc[3]++;}
		while(Map[x1[4]][y1[4]]==1){	x1[4]++;Emc[4]++;}
		while(Map[x1[5]][y1[5]]==1){	x1[5]--;Emc[5]++;}
		while(Map[x1[6]][y1[6]]==1){	y1[6]--;Emc[6]++;}
		while(Map[x1[7]][y1[7]]==1){	y1[7]++;Emc[7]++;}
		for(int j=0;j<8;j++)
			if(Map[x1[j]][y1[j]]==0)	Map1[x1[j]][y1[j]]+=Emc[j]; 
	}
	for(int i=Sum2-1;i>=0;i--){
		int x=Coor2[i].X,y=Coor2[i].Y,Emc[10]={0};
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==2){	x1[0]++;y1[0]++;Emc[0]++;}
		while(Map[x1[1]][y1[1]]==2){	x1[1]--;y1[1]++;Emc[1]++;}
		while(Map[x1[2]][y1[2]]==2){	x1[2]++;y1[2]--;Emc[2]++;}
		while(Map[x1[3]][y1[3]]==2){	x1[3]--;y1[3]--;Emc[3]++;}
		while(Map[x1[4]][y1[4]]==2){	x1[4]++;Emc[4]++;}
		while(Map[x1[5]][y1[5]]==2){	x1[5]--;Emc[5]++;}
		while(Map[x1[6]][y1[6]]==2){	y1[6]--;Emc[6]++;}
		while(Map[x1[7]][y1[7]]==2){	y1[7]++;Emc[7]++;}
		for(int j=0;j<8;j++)
			if(Map[x1[j]][y1[j]]==0)	Map1[x1[j]][y1[j]]+=Emc[j];
	}
	for(int i=0;i<25;i++)
		for(int j=0;j<25;j++)
			if(Map1[i][j]>Max){
				Max=Map1[i][j];
				Ax=i;
				Ay=j;
			}
	Map[Ax][Ay]=2;
	Coor2[Sum2].X=Ax;
	Coor2[Sum2++].Y=Ay;
	return;
}
void Win(){
	int x1[10],y1[10],Max1=0,Max2=0;
	for(int i=0,e=0;i<Sum1;i++){
		int x=Coor1[i].X,y=Coor1[i].Y;
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==1){	x1[0]++;y1[0]++;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[1]][y1[1]]==1){	x1[1]--;y1[1]++;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[2]][y1[2]]==1){	x1[2]++;y1[2]--;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[3]][y1[3]]==1){	x1[3]--;y1[3]--;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[4]][y1[4]]==1){	x1[4]++;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[5]][y1[5]]==1){	x1[5]--;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[6]][y1[6]]==1){	y1[6]--;e++;}
		Max1=max(e,Max1);
		e=0;
		while(Map[x1[7]][y1[7]]==1){	y1[7]++;e++;}
		Max1=max(e,Max1);
		e=0;
		if(Max1>=5){
			cout<<"电脑就是给智障,你赢了!!!"; 
			getchar();
			exit(0);
		}
	}
	for(int i=0,e=0;i<Sum2;i++){
		int x=Coor2[i].X,y=Coor2[i].Y;
		for(int j=0;j<10;j++){x1[j]=x;y1[j]=y;}
		while(Map[x1[0]][y1[0]]==2){	x1[0]++;y1[0]++;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[1]][y1[1]]==2){	x1[1]--;y1[1]++;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[2]][y1[2]]==2){	x1[2]++;y1[2]--;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[3]][y1[3]]==2){	x1[3]--;y1[3]--;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[4]][y1[4]]==2){	x1[4]++;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[5]][y1[5]]==2){	x1[5]--;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[6]][y1[6]]==2){	y1[6]--;e++;}
		Max2=max(e,Max2);
		e=0;
		while(Map[x1[7]][y1[7]]==2){	y1[7]++;e++;}
		Max2=max(e,Max2);
		e=0;
		if(Max2>=5){
			cout<<"你就是给智障,电脑赢了!!!";
			getchar();
			exit(0); 
		}
	}
}
void start(bool a){
	char in=0;
	int X=12,Y=12;
	bool Flag=1;
	system("mode con cols=51 lines=27");
	if(a){
		while(in!='\n'){
			_Coordinate_(0,0);
			for(int i=0;i<25;i++){
				for(int j=0;j<25;j++){
					if(i==X&&j==Y){cout<<"╳";continue;}
					if(Map[i][j]==0){cout<<"╋";continue;}
				}
				cout<<"\n";
			}
			in=getch();
			if(in=='w')	X--;
			if(in=='s')	X++;
			if(in=='a')	Y--;
			if(in=='d')	Y++;
			if(in==' '){Map[X][Y]=1;Coor1[Sum1].X=X;Coor1[Sum1++].Y=Y;break;}
		}
	}while(1){
		_Coordinate_(0,0);
		if(Flag)	AI();
		for(int i=0;i<25;i++){
			for(int j=0;j<25;j++){
				if(i==X&&j==Y){cout<<"╳";continue;}
				if(Map[i][j]==2){cout<<"○";continue;}
				if(Map[i][j]==1){cout<<"●";continue;}
				if(Map[i][j]==0){cout<<"╋";continue;}
			}
			cout<<"\n";
		}if(Flag)	Win();
		in=getch();
		Flag=0; 
		if(in=='w'){X--;Flag=0;}
		if(in=='s'){X++;Flag=0;} 
		if(in=='a'){Y--;Flag=0;} 
		if(in=='d'){Y++;Flag=0;} 
		if(in==' '){
			if(Map[X][Y])	Flag=0;
			else{
				Map[X][Y]=1;
				Flag=1;
				Coor1[Sum1].X=X;
				Coor1[Sum1++].Y=Y;
			}
		}
	}
}
void manu1(){
	_Coordinate_(0,0);
	cout<<"■■■■■■■■■■\n";
	cout<<"■   1.先手       ■\n";
	cout<<"■   2.后手       ■\n"; 
	cout<<"■■■■■■■■■■";
	while(1){
		char in=getch();
		if(in=='1')	start(1);
		if(in=='2')	start(0);
	}
}
void manu(){
	system("cls");
	cout<<"■■■■■■■■■■\n";
	cout<<"■   abs五子棋    ■\n";
	cout<<"■   1.开局       ■\n";
	cout<<"■■■■■■■■■■";
	while(1){
		char in=getch();
		if(in=='1')	manu1();
	}
}
int main(){
	system("mode con cols=21 lines=5");
	No();
	manu();
	return 0;
}

  

扫雷
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<conio.h>
#include<windows.h>
#include<cstdlib>
#include<ctime>
using namespace std;
#define MAXN 35
#define MIDX 10
#define MIDY 40
#define CG 25
#define CK 80
int G,K,Lnum,Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数
int nx,ny;//现在光标所在的位置
bool QR=0,Lose=0,is_flag_true[MAXN][MAXN];//QR为确认模式是否打开,Lose为是否输,第三个是这个位置上的旗是否放对
char map[MAXN][MAXN],tmap[MAXN][MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图
int map1[MAXN][MAXN],mapc[MAXN][MAXN];//map1为数字的地图,其中0代表空地,-1为雷,1-8为周围雷的个数
//mapc为当前格子的颜色
int col[10]={240,249,242,252,241,244,243,240,248};//col[i]表示windows扫雷中i的颜色,col[0]为空格的颜色
int d[10][4]={{0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//8个方向
bool ZB;//作弊是否打开
/*各种函数*/
 void color(int);//颜色
void gto(int,int);//光标位置
void make();//制作随机地图
void print();//打印地图等
bool check(int,int);//判断坐标是否合法
bool is_win();//判断是否赢
bool is_lose();//是否输
void dfs(int,int);//用深搜来打开方块
void st(int,int);//试探,即windows扫雷中的左右键同时按
void flag(int,int);//小旗
void bj(int,int);//标记
void swt();//确认模式
void again();//重新开始
void zb();//作弊模式
void mainmain();//主函数
void print_real_map();//打印最终的地图
void begin();//各种操作
int main()
{
mainmain();
}
void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void gto(int x,int y)
{
COORD pos;pos.X=y;pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void make()
{
for(int i=1;i<=G;i++)
for(int j=1;j<=K;j++)
map[i][j]='#';//初始化
for(int i=1;i<=Lnum;i++)
{
int x=rand()%G+1,y=rand()%K+1;
while(map[x][y]=='O')
x=rand()%G+1,y=rand()%K+1;
map[x][y]='O';
}//随机放雷
 for(int i=1;i<=G;i++)
for(int j=1;j<=K;j++)
{
if(map[i][j]=='O')map1[i][j]=-1,mapc[i][j]=240;//如果是雷
else
{
for(int k=1;k<=8;k++)
if(map[i+d[k][0]][j+d[k][1]]=='O')
map1[i][j]++;//计算周围雷的个数
mapc[i][j]=col[map1[i][j]];//根据格子上的数设置颜色
}
}
for(int i=1;i<=G;i++)
for(int j=1;j<=K;j++)
if(mapc[i][j]==0)//空地
mapc[i][j]=240;
}
void print()
{
system("cls");
gto(0,MIDY-4); color(233); printf("扫雷");
color(240);
gto(1,MIDY);
for(int i=2;i<=G+1;i++)
{
gto(i,0);
for(int j=1;j<=K;j++)
printf("#"),tmap[i-1][j]='#';//初始化玩家所看到的地图
}
gto(2,0);
nx=2,ny=0;
color(15);
printf("@");
color(15);
gto(2,2*K+5);printf("-----规则-----");
gto(3,2*K+5);printf("wasd:选择位置");
gto(4,2*K+5);printf("空格:打开");
gto(5,2*K+5);printf("1键:试探周围8个方块,如果其中有雷则不会打开,无");
gto(6,2*K+5);printf(" 雷或旗帜标对了则会将周围无雷的位置打开,");
gto(7,2*K+5);printf(" 如果试探时周围有标错的旗帜,则会游戏失败");
gto(8,2*K+5);printf(" 必须额外确认一次,以便查看周围被试探的区域");
gto(9,2*K+5);printf("2键:放置/取消小旗(F)");
gto(10,2*K+5);printf("3键:放置/取消标记(?)");
gto(11,2*K+5);printf("4键:打开/关闭确认模式,即每次操作需再按一次确认");
gto(12,2*K+5);printf("5键:打开/关闭作弊模式,即显示原本地图");
gto(13,2*K+5);printf("0键:重新开始");//打印规则
gto(G+4,0);printf("-----操作提示-----\n");
printf("请选择方块进行操作");
gto(1,2*K+10);color(12);printf("剩余小旗数:%d",Wnum=Lnum);
}
bool check(int x,int y){return y>=0&&y<K&&x>=2&&x<G+2;}
//因为地图是从2行0列开始打的,而地图是从1行1列开始存的,所以gto(x,y)走到的是map[x-1][y+1]
bool is_win()
{
int cnt=0;
for(int i=1;i<=G;i++)
for(int j=1;j<=K;j++)
if(map[i][j]=='#'&&map1[i][j]==-1)
cnt++;
if(cnt==Lnum) return 1;
//所有没被打开的方块都是雷=>胜利
for(int i=1;i<=G;i++)
for(int j=1;j<=K;j++)
if((tmap[i][j]!='F'&&map1[i][j]==-1)||(tmap[i][j]=='F'&&map1[i][j]!=-1))
return 0;
return 1;
//所有雷都标有旗
}
bool is_lose(){return Lose;}
void dfs(int x,int y)
{
if(map1[x-1][y+1]>0)//只要边界全部是数字就return
{
gto(x,y),color(mapc[x-1][y+1]),printf("%d",map1[x-1][y+1]);
tmap[x-1][y+1]=map1[x-1][y+1]+'0';
return;
}
gto(x,y);color(255);
tmap[x-1][y+1]=' ';
printf(" ");//因为下面判断了雷,上面判断了数字,这里就一定是空地
for(int i=1;i<=8;i++)
{
int xx=x+d[i][0]-1,yy=y+d[i][1]+1;//这里的xx和yy是在map中的,而不是gto中的
if(check(xx+1,yy-1)&&tmap[xx][yy]=='#'&&map1[xx][yy]!=-1)//所以check和dfs的参数要变化
dfs(xx+1,yy-1);
}
}
void st(int x,int y)
{
for(int i=1;i<=8;i++)
{
int xx=x+d[i][0],yy=y+d[i][1];
if(check(xx,yy))
{
gto(xx,yy);
if(tmap[xx-1][yy+1]!='#')
color(mapc[xx-1][yy+1]-128);//减去128使周围的8个格子的背景颜色变为灰色
else
color(112);//这里特判一下'#',应该可以不用
printf("%c",tmap[xx-1][yy+1]);
}
}
gto(G+5,0),color(15),printf("请确认 ");
//试探必须额外确认一次,规则上有说
char c=getch();
if(c=='1')
{
for(int i=1;i<=8;i++)
{
int xx=x+d[i][0],yy=y+d[i][1];
if(check(xx,yy))
if(tmap[xx-1][yy+1]=='F'&&map1[xx-1][yy+1]!=-1)//试探时有格子的小旗标错了=>失败
{
Lose=1;
return;
}
}
for(int i=1;i<=8;i++)
{
int xx=x+d[i][0],yy=y+d[i][1];
if(check(xx,yy))
if(map1[xx-1][yy+1]==-1&&tmap[xx-1][yy+1]!='F')//试探是有格子为雷=>取消打开
return;
}
for(int i=1;i<=8;i++)
{
int xx=x+d[i][0],yy=y+d[i][1];
if(check(xx,yy)&&tmap[xx-1][yy+1]=='#')//打开周围8个格子
dfs(xx,yy);
}
}
}
void flag(int x,int y)
{
x-=1,y+=1;
if(tmap[x][y]=='F')//原本为小旗=>取消小旗
{
tmap[x][y]='#';mapc[x][y]=240;
gto(x+1,y-1),color(240),printf("#");
Wnum++;//更新小旗数
}
else//否则就放置小旗
{
is_flag_true[x][y]=map1[x][y]==-1;//判断小旗是否放对
tmap[x][y]='F';mapc[x][y]=253;
gto(x+1,y-1),color(253),printf("F");
Wnum--;//更新小旗数
}
gto(1,2*K+10);color(12);printf("剩余小旗数: ");
gto(1,2*K+22);printf("%d",Wnum);//更新小旗数
}
void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true
{
x-=1,y+=1;
if(tmap[x][y]=='?')
{
gto(x+1,y-1),color(240),printf("#");
tmap[x][y]='#';mapc[x][y]=240;
}
else
{
if(tmap[x][y]=='F')//如果原本这个位置上是小旗,而你把它变为了标记,就要更新小旗数
{
Wnum++;
gto(1,2*K+10);color(12);printf("剩余小旗数: ");
gto(1,2*K+22);printf("%d",Wnum);
}
gto(x+1,y-1),color(240),printf("?");
tmap[x][y]='?';mapc[x][y]=240;
}
}
void swt(){QR=!QR;}
void zb()
{
if(ZB)//如果本来作弊打开了就把作弊地图清除
{
for(int i=1;i<=G;i++)
{
gto(i+1,K+2);
for(int j=1;j<=K;j++)
color(15),printf(" ");
}
ZB=0;
}
else//否则打印作弊地图
{
for(int i=1;i<=G;i++)
{
gto(i+1,K+2);
for(int j=1;j<=K;j++)
{
color(mapc[i][j]);
if(map1[i][j]==-1) printf("O");
else if(map1[i][j]>0) printf("%d",map1[i][j]);
else printf(" ");
}
}
ZB=1;
}
}
void again()
{
G=K=Lnum=nx=ny=Lose=ZB=0;
QR=0;
memset(is_flag_true,0,sizeof(is_flag_true));
memset(map,0,sizeof(map));
memset(tmap,0,sizeof(tmap));
memset(map1,0,sizeof(map1));
memset(mapc,0,sizeof(mapc));
color(15);
system("cls");//初始化
mainmain();
}
void begin()//各种操作
{
char c=getch(); 
gto(G+5,0),color(15),printf("请选择方块进行操作");
color(240);
if(c=='w'&&check(nx-1,ny))
{
gto(nx,ny);
if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')
color(mapc[nx-1][ny+1]);
printf("%c",tmap[nx-1][ny+1]);
gto(nx-=1,ny);color(15);printf("@");
}
else if(c=='s'&&check(nx+1,ny))
{
gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
gto(nx+=1,ny);color(15);printf("@");
}
else if(c=='a'&&check(nx,ny-1))
{
gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
gto(nx,ny-=1);color(15);printf("@");
}
else if(c=='d'&&check(nx,ny+1))
{
gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
gto(nx,ny+=1);color(15);printf("@");
}
//上下左右移动
else
{
if(c==' '&&(!(tmap[nx-1][ny+1]<='9'&&tmap[nx-1][ny+1]>='0'))&&tmap[nx-1][ny+1]!='F')
{
mapc[nx-1][ny+1]=col[map1[nx-1][ny+1]];//如果本来放了标记,mapc[nx-1][ny+1]的颜色为黑色,在打开时里面的颜色却不一定是黑色
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()==' ')
{
if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
dfs(nx,ny);
}
}
else
{
if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
dfs(nx,ny);
}
}
else if(c=='1')
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='1') st(nx,ny);
}
else st(nx,ny);
for(int i=1;i<=8;i++)
{
int xx=nx+d[i][0],yy=ny+d[i][1];
if(check(xx,yy))
{
gto(xx,yy);
if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]);
else color(240);
printf("%c",tmap[xx-1][yy+1]);
}
}
}
else if(c=='2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='2') flag(nx,ny);
}
else flag(nx,ny);
}
else if(c=='3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='3') bj(nx,ny);
}
else bj(nx,ny);
}
else if(c=='4')
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='4') swt();
}
else swt();
}
else if(c=='5')
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='5') zb();
}
else zb();
}
else if(c=='0')
{
if(QR)
{
gto(G+5,0),color(15),printf("请确认 ");
if(getch()=='0') again();
}
else again();
}
}
}
void mainmain()
{
system("mode con cols=120 lines=35");//设置窗口大小
srand((unsigned)time(NULL));
int mode;
printf("1.初级\n2.中级\n3.高级\n4.自定义\n");
scanf("%d",&mode);if(mode>4) mode=4;
if(mode==1) G=9,K=9,Lnum=10;
else if(mode==2) G=16,K=16,Lnum=40;
else if(mode==3) G=16,K=30,Lnum=99;//三种等级的参数
else
{
printf("请输入雷区高度:");scanf("%d",&G);
printf("请输入雷区宽度:");scanf("%d",&K);
printf("请输入雷个数(建议不超过总大小的三分之一):");scanf("%d",&Lnum);
if(G>24) G=24;if(K>30) K=30;
if(G<9) G=9;if(K<9) K=9;
if(Lnum<10) Lnum=10;if(Lnum>G*K*9/10) Lnum=G*K*9/10;
//控制参数的范围,最后一个if是雷的数量不超过地图大小的9/10
}
make();
print();
while(1)
{
begin();
bool f1=is_win(),f2=is_lose();
if(f1||f2)
{
gto(0,0);
if(f1)
color(202),gto(0,0),printf("你 赢 了!!是否重来?(y/n)");
if(f2)
color(137),gto(0,0),printf("你 输 了!!是否重来?(y/n)");//输赢
print_real_map();
char c=getch();
if(c=='y'||c=='Y') again();
else
{
color(15);
system("cls");
gto(MIDX,MIDY-5);
printf("欢迎下次再来");
return;
}
}
}
}
void print_real_map()
{
color(240);
for(int i=1;i<=G;i++)
{
gto(i+1,0);
for(int j=1;j<=K;j++)
{
if(tmap[i][j]=='F'&&is_flag_true[i][j]==0)//如果旗标错了显示红色的X
color(252),printf("X");
else if(map1[i][j]==-1)//雷为黑色O
color(240),printf("O");
else if(map1[i][j]==0)//空
color(240),printf(" ");
else//数字
color(mapc[i][j]),printf("%d",map1[i][j]);
}
}}

  

三国杀
#include<iostream>
#include<time.h>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
struct pai
{
int paifu;
int huase;
int yanse;
int dianshu;
int leixing;
int changdu;
void Kanpai()
{
if(paifu==0||paifu==1);
else
printf("牌副参数错误!\n");
switch(huase)
{
case 0:cout<<"黑桃";break;
case 1:cout<<"红桃";break;
case 2:cout<<"草花";break;
case 3:cout<<"方片";break;
case -1:cout<<"无色";break;
default:printf("花色错误!\n");break;
}
switch(dianshu)
{
case 0:cout<<"A ";break;
case 1:cout<<"2 ";break;
case 2:cout<<"3 ";break;
case 3:cout<<"4 ";break;
case 4:cout<<"5 ";break;
case 5:cout<<"6 ";break;
case 6:cout<<"7 ";break;
case 7:cout<<"8 ";break;
case 8:cout<<"9 ";break;
case 9:cout<<"10 ";break;
case 10:cout<<"J ";break;
case 11:cout<<"Q ";break;
case 12:cout<<"K ";break;
case -1:cout<<"无点数";break;
default:printf("点数错误!\n");break;
}
switch(leixing)
{
case 101:cout<<"【杀】"<<endl;break;
case 102:cout<<"【闪】"<<endl;break;
case 103:cout<<"【桃】"<<endl;break;
case 201:cout<<"【过河拆桥】"<<endl;break;
case 202:cout<<"【顺手牵羊】"<<endl;break;
case 203:cout<<"【无中生有】"<<endl;break;
case 204:cout<<"【决斗】"<<endl;break;
case 205:cout<<"【借刀杀人】"<<endl;break;
case 206:cout<<"【桃园结义】"<<endl;break;
case 207:cout<<"【五谷丰登】"<<endl;break;
case 208:cout<<"【南蛮入侵】"<<endl;break;
case 209:cout<<"【万箭齐发】"<<endl;break;
case 210:cout<<"【无懈可击】"<<endl;break;
case 251:cout<<"【乐不思蜀】"<<endl;break;
case 252:cout<<"【闪电】"<<endl;break;
case 301:cout<<"【诸葛连弩(1)】"<<endl;break;
case 302:cout<<"【雌雄双股剑(2)】"<<endl;break;
case 303:cout<<"【青釭剑(2)】"<<endl;break;
case 304:cout<<"【青龙偃月刀(3)】"<<endl;break;
case 305:cout<<"【丈八蛇矛(3)】"<<endl;break;
case 306:cout<<"【贯石斧(3)】"<<endl;break;
case 307:cout<<"【方天画戟(4)】"<<endl;break;
case 308:cout<<"【麒麟弓(5)】"<<endl;break;
case 331:cout<<"【八卦阵】"<<endl;break;
case 361:cout<<"【赤兔(-1)】"<<endl;break;
case 362:cout<<"【大宛(-1)】"<<endl;break;
case 363:cout<<"【紫辛(-1)】"<<endl;break;
case 381:cout<<"【爪黄飞电(+1)】"<<endl;break;
case 382:cout<<"【的卢(+1)】"<<endl;break;
case 383:cout<<"【绝影(+1)】"<<endl;break;
default:printf("类型参数错误!");break;
}
}
};
void Qishixipai(pai A[2][4][13],pai paidui[104])
{
int i,m,x,y,z,a[104]={0};
srand((unsigned)time(NULL));
for(i=1;i<=104;i++)
{
while(a[m=rand()%104]);
a[m]=i;
}
for(i=0;i<=103;i++)
{
x=(a[i]-1)/52;
y=((a[i]-1)-52*x)/13;
z=(a[i]-1)%13;
paidui[i]=A[x][y][z];
}
}
void Xipai(pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
int i,m,a[104]={0};
srand((unsigned)time(NULL));
for(i=1;i<=(*qipaishu);i++)
{
while(a[m=rand()%(*qipaishu)]);
a[m]=i;
}
for(i=0;i<=((*qipaishu)-1);i++)
{
paidui[i]=qipaidui[a[i]];
qipaidui[a[i]].leixing=-1;
(*paiduishu)++;
(*qipaishu)--;
}
for(i=(*paiduishu);i<=103;i++)paidui[i].leixing=-1;
}
pai Mo1pai(pai A[104],int *x,pai B[104],int*y,int *b)
{
pai p;
if((*x)==0)Xipai(A,x,B,y);
else if((*x)<0)printf("摸牌参数错误!");
else;
p=A[104-(*x)];
(*x)--;
(*b)++;
return(p);
}
struct wujiang
{
char name;
int tili;
int tilishangxian;
int shoupaishangxian;
int huihekaishi;
int panding;
int mopai;
int chupai;
int qipai;
int huihejieshu;
int juese;
pai shoupai[20];
int shoupaishu;
pai zhuangbei[4];
int zhuangbeishu;
pai pandingpai[3];
int pandingshu;
int juli[1];
void Kanshoupai()
{
printf("玩家当前手牌:\n");
if(shoupaishu)
{
int m;
for(m=0;m<=(shoupaishu-1);m++)
{
printf("%d ",m);
(shoupai[m]).Kanpai();
}
}
else printf("空城!\n");
printf("\n");
}
void Kanzhuangbei()
{
if(juese)printf("玩家");
else printf("电脑");
printf("当前装备:\n");
printf("0 武器: ");
if((zhuangbei[0]).leixing==-1)printf("空\n");
else (zhuangbei[0]).Kanpai();
printf("1 防具: ");
if((zhuangbei[1]).leixing==-1)printf("空\n");
else (zhuangbei[1]).Kanpai();
printf("2 进攻马: ");
if((zhuangbei[2]).leixing==-1)printf("空\n");
else (zhuangbei[2]).Kanpai();
printf("3 防御马: ");
if((zhuangbei[3]).leixing==-1)printf("空\n");
else (zhuangbei[3]).Kanpai();
printf("\n");
}
void Kanpandingpai()
{
if(juese)printf("玩家");
else printf("电脑");
printf("当前判定区:\n");
if((pandingpai[0]).leixing==-1)printf("空\n");
else
{
printf("0 ");
(pandingpai[0]).Kanpai();
if((pandingpai[1]).leixing==-1);
else
{
printf("1 ");
(pandingpai[1]).Kanpai();
if((pandingpai[2]).leixing==-1);
else
{
printf("2 ");
(pandingpai[2]).Kanpai();
}
}
}
}
};
void Mopai(int*shoupaishu,pai shoupai[20],pai A[104],int *x,pai B[104],int*y,int juese)
{
if(juese)printf("玩家从牌堆摸2张牌\n");
else printf("电脑从牌堆摸2张牌\n");
pai p;
p=Mo1pai(A,x,B,y,shoupaishu);
shoupai[*shoupaishu-1]=p;
pai q;
q=Mo1pai(A,x,B,y,shoupaishu);
shoupai[*shoupaishu-1]=q;
int m;
if(juese)
{
printf("玩家当前手牌:\n");
for(m=0;m<=(*shoupaishu-1);m++)
{
printf("%d ",m);
(shoupai[m]).Kanpai();
}
}
printf("牌堆还剩%d张牌!\n\n",*x);
}
void Qishishoupai(wujiang *w,pai A[104],int *x,pai B[104],int*y)
{
pai a;
a=Mo1pai(A,x,B,y,&((*w).shoupaishu));
(*w).shoupai[(*w).shoupaishu-1]=a;
pai b;
b=Mo1pai(A,x,B,y,&((*w).shoupaishu));
(*w).shoupai[(*w).shoupaishu-1]=b;
pai c;
c=Mo1pai(A,x,B,y,&((*w).shoupaishu));
(*w).shoupai[(*w).shoupaishu-1]=c;
pai d;
d=Mo1pai(A,x,B,y,&((*w).shoupaishu));
(*w).shoupai[(*w).shoupaishu-1]=d;
int m;
if((*w).juese)printf("玩家从牌堆摸4张牌\n");
else printf("电脑从牌堆摸4张牌\n");
if((*w).juese)
{
printf("玩家当前手牌:\n");
for(m=0;m<=((*w).shoupaishu-1);m++)
{
printf("%d ",m);
((*w).shoupai[m]).Kanpai();
}
}
printf("牌堆还剩%d张牌!\n\n",*x);
}
void Panding(pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
paidui[*paiduishu].Kanpai();
qipaidui[*qipaishu]=paidui[*paiduishu];
(*paiduishu)--;
(*qipaishu)++;
}
pai Zhangba(wujiang*w,pai qipaidui[104],int*qipaishu)
{
int x,y;
pai p;
for(;;)
{
int i,j;
printf("请输入任意两张手牌之前的编号,以空格隔开,以回车结束!\n");
scanf("%d",&x);
scanf("%d",&y);
if((x>=0)&&(x<(*w).shoupaishu)&&(y>=0)&&(y<(*w).shoupaishu-1))
{
switch((((*w).shoupai[x].huase)%2)+(((*w).shoupai[y].huase)%2))
{
case 0:p.yanse=0;break;
case 2:p.yanse=1;break;
case 1:p.yanse=2;break;
default:printf("【丈八蛇矛】函数参数错误!\n");
}
qipaidui[*qipaishu]=(*w).shoupai[x];
(*w).shoupai[x].leixing=-1;
((*w).shoupaishu)--;
(*qipaishu)++;
qipaidui[*qipaishu]=(*w).shoupai[y];
(*w).shoupai[y].leixing=-1;
((*w).shoupaishu)--;
(*qipaishu)++; printf("弃牌数:%d",*qipaishu);
for(i=0;i<=(((*w).shoupaishu)+1);i++)
{
if((*w).shoupai[i].leixing==-1)
{
for(j=i+1;j<=(((*w).shoupaishu)+2);j++)
(*w).shoupai[j-1]=(*w).shoupai[j];
i--;
}
}
printf("玩家把:\n");
qipaidui[(*qipaishu)-2].Kanpai();
qipaidui[(*qipaishu)-1].Kanpai();
printf("当作一张");
switch(p.yanse)
{
case 0:printf("黑色");break;
case 2:printf("红色");break;
case 1:printf("无色");break;
default:printf("绿色");break;
}
printf("无点数的【杀】");
p.dianshu=-1;
p.leixing=101;
return p;
break;
}
printf("你将两张空气当作一张空气属性的【杀】使用或打出!\n");
}
}
int Xuanpai(wujiang*w,int t)
{
int x;
if((*w).juese)
{
for(;;)
{
printf("出牌请输入手牌之前的编号,以回车结束!\n如果你想结束出牌阶段,请输入“-1”,以回车结束!\n");
scanf("%d",&x);
if((x>=-1&&x<((*w).shoupaishu))||((x==100)&&((*w).zhuangbei[0].leixing==305)))
{
return x;
break;
}
printf("你打出了一张空气!\n");
}
}
else return t;
}
pai Panpai(wujiang*w1,int*sha,int y,pai qipaidui[104],int*qipaishu)
{
pai p,q;
p.leixing=0;
q.leixing=-1;
if(y==-1)return q;
else
{
if(y==100)
{
if((*sha)>0)
{
q=Zhangba(w1,qipaidui,qipaishu);
printf("使用!\n");
return q;
}
else
{
printf("当前回合使用【杀】的次数已用尽,你也不能使用【丈八蛇矛】效果!\n");
return p;
}
}
switch((*w1).shoupai[y].leixing)
{
case 101:
if(((*sha)>0)||((*w1).zhuangbei[0].leixing==301))
{
if(((*w1).zhuangbei[0].leixing==301))printf("武器【诸葛连弩】效果被触发!\n");
return (*w1).shoupai[y];
break;
}
else
{
if((*w1).juese)printf("当前回合使用【杀】的次数已用尽,你不能使用【杀】!\n");
return p;break;
}
case 102:
if((*w1).juese)
printf("当前不需要响应任何操作,你不能主动打出【闪】!\n");
return p;break;
case 103:
if(((*w1).tili)<((*w1).tilishangxian))
{
return (*w1).shoupai[y];
break;
}
else
{
if((*w1).juese)
printf("你并未受伤,不能对自己使用【桃】!\n");
}
return p;break;
case 210:
if((*w1).juese)
printf("当前不需要响应任何锦囊,你不能主动打出【无懈可击】!\n");
return p;break;
case 201:
case 202:
case 203:
case 204:
case 205:
case 206:
case 207:
case 208:
case 209:
case 251:
case 252:
case 301:
case 302:
case 303:
case 304:
case 305:
case 306:
case 307:
case 308:
case 331:
case 361:
case 362:
case 363:
case 381:
case 382:
case 383:return (*w1).shoupai[y];break;
default:printf("手牌类型参数错误!\n");return p;break;
}
}
}
int Mubiao(pai p,wujiang *w1,wujiang *w2,int*sha)
{
int x;
switch(p.leixing)
{
case 101:
if((*w1).juese)
{
printf("请选择【杀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x==0)
{
if((*w1).zhuangbei[0].changdu>=(*w1).juli[0])
{
(*sha)--;
return((*w2).juese);
}
else
{
printf("武器长度不够!\n");
return -2;
}
}
else
{
printf("目标错误!\n");
return -2;
}
}
else
{
if((*w1).zhuangbei[0].changdu>=(*w1).juli[0])
{
(*sha)--;
return((*w2).juese);
}
else return -2;
}
break;
case 103:return((*w1).juese);break;
case 201:
if((*w1).juese)
{
printf("请选择【过河拆桥】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x==0)
{
if((*w2).shoupaishu||(*w2).zhuangbeishu||(*w2).pandingshu)return((*w2).juese);
else
{
printf("目标没有牌!\n");
return -2;
}
}
else
{
printf("目标错误!\n");
return -2;
}
}
else return((*w2).juese);
break;
case 202:
if((*w1).juese)
{
printf("请选择【顺手牵羊】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x==0)
{
if(((*w2).shoupaishu||(*w2).zhuangbeishu||(*w2).pandingshu)&&((*w1).juli[0]<=1))return((*w2).juese);
else
{
printf("目标没有牌!\n");
return -2;
}
}
else
{
printf("目标错误!\n");
return -2;
}
}
else
{
if((*w1).juli[0]<=1)return((*w2).juese);
else return -2;
}
break;
case 203:
return((*w1).juese);break;
case 204:
if((*w1).juese)
{
printf("请选择【决斗】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x==0)return((*w2).juese);
else
{
printf("目标错误!\n");
return -2;
}
}
else return((*w2).juese);
break;
case 205:
int y;
if((*w1).juese)
{
printf("请选择【借刀杀人】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x!=0)
{
printf("目标错误!\n");
return -2;
}
else
{
if(((*w2).zhuangbei[0]).leixing<=300||((*w2).zhuangbei[0]).leixing>=331)
{
printf("目标装备区里没有武器!\n");
return -2;
}
else
{
printf("请选择【杀】的目标!\n提示:【杀】的目标必须在【借刀杀人】的目标的攻击范围之内!\n输入目标前的编号,以回车结束!\n0 玩家\n");
scanf("%d",&y);
if(y!=0)
{
printf("目标错误!\n");
return -2;
}
else
{
if(((*w2).zhuangbei[0].changdu)<(*w2).juli[0])
{
printf("武器距离不够!\n");
return -2;
}
else
return((*w2).juese);
}
}
}
}
else
{
if(((*w2).zhuangbei[0]).leixing<=300||((*w2).zhuangbei[0]).leixing>=331)return -2;
else
{
if(((*w2).zhuangbei[0].changdu)<(*w2).juli[0])return -2;
else return((*w2).juese);
}
}
break;
case 206:
case 207:return 99;break;
case 208:
case 209:return 100;break;
case 251:
if((*w1).juese)
{
printf("请选择【乐不思蜀】的目标!\n输入目标前的编号,以回车结束!\n0 电脑1\n");
scanf("%d",&x);
if(x==0)
{
int i;
for(i=0;i<=2;i++)
{
if((*w2).pandingpai[i].leixing==251)
i=-1;
break;
}
if(i==-1)
{
printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n");
return -2;
}
else return((*w2).juese);
}
else
{
printf("目标错误!\n");
return -2;
}
}
else
{
int i;
for(i=0;i<=2;i++)
{
if((*w2).pandingpai[i].leixing==251)
i=-1;
break;
}
if(i==-1)return -2;
else return((*w2).juese);
}
break;
case 252:
int i;
for(i=0;i<=2;i++)
{
if((*w1).pandingpai[i].leixing==252)
i=-1;
break;
}
if(i==-1)
{
if((*w1).juese)printf("目标判定区里不能同时存在两张相同的延时类锦囊!\n");
return -2;
}
else return ((*w1).juese);
break;
case 301:
case 302:
case 303:
case 304:
case 305:
case 306:
case 307:
case 308:
case 331:
case 361:
case 362:
case 363:
case 381:
case 382:
case 383:return((*w1).juese);break;
default:return -2;break;
}
}
void Da1pai(wujiang *w1,wujiang*w2,pai qipaidui[104],int *qipaishu,int x)
{
int i;
if((x<0||x>=((*w1).shoupaishu))&&x!=100)
printf("你的牌呢?!\n");
else
{
switch(((*w1).shoupai)[x].leixing)
{
case 101:
case 102:
case 103:
case 201:
case 202:
case 203:
case 204:
case 205:
case 206:
case 207:
case 208:
case 209:
case 210:
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
break;
case 251:
for(i=1;i>=0;i--)(*w2).pandingpai[i+1]=(*w2).pandingpai[i];
(*w2).pandingpai[0]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
((*w2).pandingshu)++;
break;
case 252:
for(i=1;i>=0;i--)(*w1).pandingpai[i+1]=(*w1).pandingpai[i];
(*w1).pandingpai[0]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
((*w1).pandingshu)++;
break;
case 301:
case 302:
case 303:
case 304:
case 305:
case 306:
case 307:
case 308:
if((*w1).zhuangbei[0].leixing==-1)((*w1).zhuangbeishu)++;
else
{
qipaidui[*qipaishu]=((*w1).zhuangbei)[0];
(*qipaishu)++;
}
(*w1).zhuangbei[0]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
break;
case 331:
if((*w1).zhuangbei[1].leixing==-1)((*w1).zhuangbeishu)++;
else
{
qipaidui[*qipaishu]=((*w1).zhuangbei)[1];
(*qipaishu)++;
}
(*w1).zhuangbei[1]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
break;
case 361:
case 362:
case 363:
if((*w1).zhuangbei[2].leixing==-1)((*w1).zhuangbeishu)++;
else
{
qipaidui[*qipaishu]=((*w1).zhuangbei)[2];
(*qipaishu)++;
}
(*w1).zhuangbei[2]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
break;
case 381:
case 382:
case 383:
if((*w1).zhuangbei[3].leixing==-1)((*w1).zhuangbeishu)++;
else
{
qipaidui[*qipaishu]=((*w1).zhuangbei)[3];
(*qipaishu)++;
}
(*w1).zhuangbei[3]=(*w1).shoupai[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
break;
default:break;
}
}
}
void Miaoshu(pai p,int juese,int duixiang)
{
if(juese==0)printf("电脑");
else if(juese==1)printf("玩家");
else printf("角色参数错误!\n");
if(p.leixing<=300&&p.leixing>100)
{
switch(duixiang)
{
case -1:printf("打出");break;
case 0:printf("对电脑使用");break;
case 1:printf("对玩家使用");break;
case 99:printf("使用");break;
case 100:printf("对所有人使用");break;
default:printf("对象参数错误\n");break;
}
}
else if(p.leixing>=301&&p.leixing<=400)
printf("装备");
else printf("你出的是什么东西?\n");
p.Kanpai();
if(!juese&&(p.leixing==101||p.leixing==204||p.leixing==205||p.leixing==207||p.leixing==208||p.leixing==209))printf("请响应!\n");
}
int Wuxie(pai *p,wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu,int a)
{
int x;
if((*w1).juese)
{
printf("是否使用【无懈可击】响应?\n\n");
for(;;)
{
(*w1).Kanshoupai();
printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n");
scanf("%d",&x);
if(x==-1)
{
for(x=0;x<((*w2).shoupaishu);x++)
{
if((*w2).shoupai[x].leixing==210)
{
printf("电脑使用");
((*w2).shoupai)[x].Kanpai();
printf("对象是");
(*p).Kanpai();
(*p)=((*w2).shoupai)[x];
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
a++;
break;
}
}
break;
}
else if((*w1).shoupai[x].leixing==210)
{
printf("玩家使用");
((*w1).shoupai)[x].Kanpai();
printf("对象是");
(*p).Kanpai();
(*p)=((*w1).shoupai)[x];
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(int i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
(*w1).Kanshoupai();
a++;
break;
}
else printf("你确定你使用的是【无懈可击】?\n");
}
}
else
{
printf("是否使用【无懈可击】响应?\n");
for(;;)
{
(*w2).Kanshoupai();
printf("如果要使用【无懈可击】请输入手牌之前编号,不需要请输入“-1”,以回车结束!\n");
scanf("%d",&x);
if(x==-1)break;
else if((*w2).shoupai[x].leixing==210)
{
printf("玩家使用");
((*w2).shoupai)[x].Kanpai();
printf("对象是");
(*p).Kanpai();
(*p)=((*w2).shoupai)[x];
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
(*w2).Kanshoupai();
a++;
break;
}
else printf("你确定你使用的是【无懈可击】?\n");
}
}
return a;
}
int Qiutao(wujiang*w,pai qipaidui[104],int*qipaishu)
{
int x;
if((*w).juese)
{
for(;;)
{
printf("如果要使用【桃】请输入手牌之前的编号,不需要请输入“-1”,以回车结束!\n");
scanf("%d",&x);
if(x==-1)
{
return -1;
break;
}
else if((*w).shoupai[x].leixing==103)
{
qipaidui[*qipaishu]=((*w).shoupai)[x];
for(int i=x+1;i<=((*w).shoupaishu);i++)((*w).shoupai)[i-1]=((*w).shoupai)[i];
((*w).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
else printf("你确定你使用的是【桃】?\n");
}
}
else
{
for(x=0;x<((*w).shoupaishu);x++)
{
if((*w).shoupai[x].leixing==103)
{
qipaidui[*qipaishu]=((*w).shoupai)[x];
for(int i=x+1;i<=((*w).shoupaishu);i++)((*w).shoupai)[i-1]=((*w).shoupai)[i];
((*w).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
}
return -1;
}
}
int Binsi(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu)
{
if(((*w2).tili)>0)return 0;
else
{
int i;
if((*w1).juese)
{
for(;;)
{
printf("电脑濒死,是否使用【桃】?\n");
i=Qiutao(w1,qipaidui,qipaishu);
if(i==0)((*w2).tili)++;
if((i==-1)||((*w2).tili>0))break;
}
if((*w2).tili>0)return 0;
else
{
for(;;)
{
i=Qiutao(w2,qipaidui,qipaishu);
if(i==0)((*w2).tili)++;
if((i==-1)||((*w2).tili>0))break;
}
if((*w2).tili>0)return 0;
else return -1;
}
}
else
{
for(;;)
{
printf("玩家濒死,是否使用【桃】?\n");
i=Qiutao(w2,qipaidui,qipaishu);
if(i==0)((*w2).tili)++;
if((i==-1)||((*w2).tili>0))break;
}
if((*w2).tili>0)return 0;
else return -1;
}
}
}
int Shan(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
int x;
if((*w2).juese)
{
if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing!=303))
{
for(;;)
{
int m;
printf("是否发动【八卦阵】防具效果?\n0 否\n1 是\n请输入选项之前的编号,以回车结束!\n");
scanf("%d",&m);
if(m==1)
{
Panding(paidui,paiduishu,qipaidui,qipaishu);
if(qipaidui[(*qipaishu)-1].huase%2)
{
printf("【八卦阵】判定成功!\n");
return 0;
}
}
else if(m==0)
{
printf("【八卦阵】判定失败!\n");
break;
}
else printf("你确定你输入的是“0”或“1”?\n");
}
}
else if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing==303))printf("【青釭剑】锁定技被触发!\n");
for(;;)
{
printf("请输入手牌之前的编号,或者输入“-1”放弃打出【闪】,以回车结束!\n");
scanf("%d",&x);
if(x==-1)
{
return -1;
break;
}
else if((*w2).shoupai[x].leixing==102)
{
printf("玩家打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
else printf("你确定你打出的是【闪】?\n");
}
}
else
{
if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing!=303))
{
Panding(paidui,paiduishu,qipaidui,qipaishu);
if(qipaidui[(*qipaishu)-1].huase%2)
{
printf("【八卦阵】判定成功!\n");
return 0;
}
else printf("【八卦阵】判定失败!\n");
}
else if(((*w2).zhuangbei[1].leixing==331)&&((*w1).zhuangbei[0].leixing==303))printf("【青釭剑】锁定技被触发!\n");
int i;
for(x=0;x<((*w2).shoupaishu);x++)
{
if((*w2).shoupai[x].leixing==102)
{
printf("电脑打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
}
return -1;
}
}
int Sha(wujiang *w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
int x;
if((*w2).juese)
{
printf("请打出【闪】响应【杀】!否则你将受到1点伤害!\n");
x=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(x==-1)
{
int i;
((*w2).tili)--;
printf("电脑对玩家造成1点伤害!\n");
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
}
else if(x==0&&((*w1).zhuangbei[0].leixing==306))
{
int i;
if(((*w1).shoupaishu)>=2)
{
printf("电脑弃掉:\n");
((*w1).shoupai)[0].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[0];
for(i=1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
((*w1).shoupai)[0].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[0];
for(i=1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
printf("发动【贯石斧】武器效果使【杀】造成伤害!\n");
((*w2).tili)--;
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
}
else return 0;
}
else if(x==0&&((*w1).zhuangbei[0].leixing==304))
{
int i;
for(x=0;x<((*w1).shoupaishu);x++)
{
if((*w1).shoupai[x].leixing==101)
{
printf("电脑发动【青龙偃月刀】效果对玩家使用");
((*w1).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
return i;
break;
}
}
return 0;
}
}
else
{
x=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(x==-1)
{
if((*w1).zhuangbei[0].leixing==308)
{
for(;;)
{
printf("是否发动【麒麟弓】武器效果?\n0 否\n1 是\n");
scanf("%d",&x);
if(x==1)
{
if(((*w2).zhuangbei[2].leixing==-1)&&((*w2).zhuangbei[3].leixing==-1))
{
printf("电脑根本没有马,射你妹的马啊!\n");
break;
}
else
{
for(;;)
{
printf("0 ");
((*w2).zhuangbei[2]).Kanpai();
printf("1 ");
((*w2).zhuangbei[3]).Kanpai();
printf("请选择要弃掉的马,输入之前的编号,以回车结束!\n");
scanf("%d",&x);
if((x==0)&&((*w2).zhuangbei[2].leixing!=-1))
{
printf("你弃掉了电脑的");
((*w2).zhuangbei)[2].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[2];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[2].leixing=-1;
((*w2).juli[0])++;
break;
}
else if((x==1)&&((*w2).zhuangbei[3].leixing!=-1))
{
printf("你弃掉了电脑的");
((*w2).zhuangbei)[3].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[3];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[3].leixing=-1;
((*w1).juli[0])--;
break;
}
else printf("射你妹的马!");
}
break;
}
}
else if(x==0)break;
else printf("键盘上的“0”和“1”被你吃了吗?\n");
}
}
int i;
((*w2).tili)--;
printf("玩家对电脑造成1点伤害!\n");
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
}
else if(x==0&&((*w1).zhuangbei[0].leixing==306))
{
for(;;)
{
printf("是否发动【贯石斧】武器效果?\n0 否\n1 是\n");
scanf("%d",&x);
if(x==1)
{
int i;
if((*w1).shoupaishu+(*w1).zhuangbeishu<=2)
{
printf("你除了【贯石斧】以外连2张牌都没有,发动你妹的效果!\n");
break;
}
else
{
printf("请分别弃掉两张牌!\n");
for(i=0;i<=2;i++)
{
for(;;)
{
printf("请选择区域:\n0 手牌\n1 装备\n");
scanf("%d",&x);
if(x==0&&((*w1).shoupaishu==0))printf("你根本没有手牌,弃你妹啊!\n");
else if(x==1&&((*w1).zhuangbeishu==1))printf("你根本没有别的装备,弃你妹啊!\n");
else if(x>=0&&x<=1)break;
else printf("键盘上的“0”和“1”被你吃了吗?\n");
}
if(x==0)
{
for(;;)
{
(*w1).Kanshoupai();
printf("弃牌请输入手牌之前的编号,以回车结束!\n");
scanf("%d",&x);
if(x>=0&&x<((*w1).shoupaishu))break;
else printf("弃你妹的手牌!\n");
}
printf("你弃掉了");
((*w1).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
}
else
{
for(;;)
{
(*w1).Kanzhuangbei();
printf("请输入装备之前的编号,以回车键结束!\n");
scanf("%d",&x);
if((((*w1).zhuangbei[x]).leixing!=-1)&&(x>=0)&&(x<=3))
{
printf("你弃掉了");
((*w1).zhuangbei)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).zhuangbei)[x];
((*w1).zhuangbeishu)--;
(*qipaishu)++;
((*w1).zhuangbei)[x].leixing=-1;
break;
}
else printf("弃你妹的装备!\n");
}
}
}
}
printf("玩家发动【贯石斧】武器效果使【杀】造成伤害!\n");
((*w2).tili)--;
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
break;
}
else if(x==0)break;
else printf("键盘上的“0”和“1”被你吃了吗?\n");
}
}
else if(x==0&&((*w1).zhuangbei[0].leixing==304))
{
for(;;)
{
printf("是否发动【青龙偃月刀】武器效果?\n0 否\n1 是\n");
scanf("%d",&x);
if(x==1)
{
for(;;)
{
printf("请对电脑使用一张【杀】!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
(*w1).Kanshoupai();
scanf("%d",&x);
if(x==-1)
{
return 0;
break;
}
else if((*w1).shoupai[x].leixing==101)
{
int i;
printf("玩家对电脑使用");
((*w1).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
return i;
break;
}
else printf("你确定你打出的是【杀】?\n");
}
}
else if(x==0)
{
return 0;
break;
}
else printf("你确定你输入的是“0”或“1”?\n");
}
}
else return 0;
}
return 0;
}
void Tao(wujiang*w1)
{
((*w1).tili)++;
if((*w1).juese)printf("玩家");
else printf("电脑");
printf("恢复了1点体力!\n");
if(((*w1).tili)>((*w1).tilishangxian))printf("你被撑死了!\n");
}
void Chai(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu)
{
int i,x,y;
if((*w1).juese)
{
for(;;)
{
if((*w2).shoupaishu+(*w2).zhuangbeishu+(*w2).pandingshu==0)
{
printf("对方空城,拆你妹啊!\n");
break;
}
else
{
printf("请选择想拆的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n");
scanf("%d",&x);
if(x==0&&((*w2).shoupaishu==0))printf("你拆掉了一张空气!\n");
else if(x==1&&((*w2).zhuangbeishu==0))printf("你拆掉了一张空气!\n");
else if(x==2&&((*w2).pandingshu==0))printf("你拆掉了一张空气!\n");
else if(x>=0&&x<=2)break;
else printf("你拆掉了太空区里的一张牌!\n");
}
}
switch(x)
{
case 0:
srand((unsigned)time(NULL));
y=rand()%((*w2).shoupaishu);
printf("你弃掉了电脑的");
((*w2).shoupai)[y].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[y];
for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
break;
case 1:
for(;;)
{
(*w2).Kanzhuangbei();
printf("请输入装备之前的编号,以回车键结束!\n");
scanf("%d",&y);
if((((*w2).zhuangbei[y]).leixing!=-1)&&(y>=0)&&(y<=3))
{
printf("你弃掉了电脑的");
((*w2).zhuangbei)[y].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[y];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[y].leixing=-1;
if(!y)((*w2).zhuangbei)[y].changdu=1;
else if(y==2)((*w2).juli[0])++;
else if(y==3)((*w1).juli[0])--;
break;
}
else printf("你弃掉了一张空气!\n");
}
break;
case 2:
for(;;)
{
(*w2).Kanpandingpai();
printf("请输入判定牌之前的编号,以回车键结束!\n");
scanf("%d",&y);
if((*w2).pandingpai[y].leixing!=-1)
{
printf("你弃掉了电脑的");
((*w2).pandingpai)[y].Kanpai();
qipaidui[*qipaishu]=((*w2).pandingpai)[y];
((*w2).pandingshu)--;
(*qipaishu)++;
((*w2).pandingpai)[y].leixing=-1;
break;
}
else printf("你弃掉了一张空气!\n");
}
break;
default:break;
}
}
else
{
if((*w2).zhuangbeishu)
{
if((*w2).zhuangbei[1].leixing!=-1)
{
printf("电脑弃掉了玩家的");
((*w2).zhuangbei)[1].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[1];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[1].leixing=-1;
}
else if((*w2).zhuangbei[3].leixing!=-1)
{
printf("电脑弃掉了玩家的");
((*w2).zhuangbei)[3].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[3];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[3].leixing=-1;
((*w1).juli[0])--;
}
else if((*w2).zhuangbei[0].leixing!=-1)
{
printf("电脑弃掉了玩家的");
((*w2).zhuangbei)[0].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[0];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[0].leixing=-1;
((*w2).zhuangbei)[0].changdu=1;
}
else
{
printf("电脑弃掉了玩家的");
((*w2).zhuangbei)[2].Kanpai();
qipaidui[*qipaishu]=((*w2).zhuangbei)[2];
((*w2).zhuangbeishu)--;
(*qipaishu)++;
((*w2).zhuangbei)[2].leixing=-1;
((*w2).juli[0])++;
}
}
else
{
srand((unsigned)time(NULL));
y=rand()%((*w2).shoupaishu);
printf("电脑弃掉了玩家的手牌");
((*w2).shoupai)[y].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[y];
for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
}
}
}
void Qian(wujiang *w1,wujiang *w2)
{
int i,x,y;
if((*w1).juese)
{
for(;;)
{
if((*w2).shoupaishu+(*w2).zhuangbeishu+(*w2).pandingshu==0)
{
printf("对方空城啦!你牵走了一张寂寞!\n");
break;
}
else
{
printf("请选择想牵的区域,输入选项之前的编号,以回车结束!\n0 手牌\n1 装备区\n2 判定区\n");
scanf("%d",&x);
if(x==0&&((*w2).shoupaishu==0))printf("你牵走了一张空气!\n");
else if(x==1&&((*w2).zhuangbeishu==0))printf("你牵走了一张空气!\n");
else if(x==2&&((*w2).pandingshu==0))printf("你牵走了一张空气!\n");
else if(x>=0&&x<=2)break;
else printf("你牵走了太空区里的一张牌!\n");
}
}
switch(x)
{
case 0:
srand((unsigned)time(NULL));
y=rand()%((*w2).shoupaishu);
printf("你牵走了电脑的");
((*w2).shoupai)[y].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).shoupai)[y];
for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
((*w1).shoupaishu)++;
break;
case 1:
for(;;)
{
(*w2).Kanzhuangbei();
printf("请输入装备之前的编号,以回车键结束!\n");
scanf("%d",&y);
if((((*w2).zhuangbei[y]).leixing!=-1)&&(y>=0)&&(y<=3))
{
printf("你牵走了电脑的");
((*w2).zhuangbei)[y].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[y];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[y].leixing=-1;
if(!y)((*w2).zhuangbei[y]).changdu=1;
else if(y==2)((*w2).juli[0])++;
else if(y==3)((*w1).juli[0])--;
break;
}
else printf("你弃掉了一张空气!\n");
}
break;
case 2:
for(;;)
{
(*w2).Kanpandingpai();
printf("请输入判定牌之前的编号,以回车键结束!\n");
scanf("%d",&y);
if((*w2).pandingpai[y].leixing!=-1)
{
printf("你牵走了电脑的");
((*w2).pandingpai)[y].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).pandingpai)[y];
((*w2).pandingshu)--;
((*w1).shoupaishu)++;
((*w2).pandingpai)[y].leixing=-1;
break;
}
else printf("你牵走了一张空气!\n");
}
break;
default:break;
}
}
else
{
if((*w2).zhuangbeishu)
{
if((*w2).zhuangbei[1].leixing!=-1)
{
printf("电脑牵走了玩家的");
((*w2).zhuangbei)[1].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[1];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[1].leixing=-1;
}
else if((*w2).zhuangbei[3].leixing!=-1)
{
printf("电脑牵走了玩家的");
((*w2).zhuangbei)[3].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[3];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[3].leixing=-1;
((*w1).juli[0])--;
}
else if((*w2).zhuangbei[0].leixing!=-1)
{
printf("电脑牵走了玩家的");
((*w2).zhuangbei)[0].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[0].leixing=-1;
((*w2).zhuangbei)[0].changdu=1;
}
else
{
printf("电脑牵走了玩家的");
((*w2).zhuangbei)[2].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[2];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[2].leixing=-1;
((*w2).juli[0])--;
}
}
else
{
srand((unsigned)time(NULL));
y=rand()%((*w2).shoupaishu);
printf("电脑牵走了玩家的手牌");
((*w2).shoupai)[y].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).shoupai)[y];
for(i=y+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
((*w1).shoupaishu)++;
}
}
}
void Wuzhong(wujiang*w1,pai A[104],int *x,pai B[104],int*y)
{
Mopai(&((*w1).shoupaishu),(*w1).shoupai,A,x,B,y,(*w1).juese);
}
int Juedou(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu)
{
int i,j,x;
if((*w1).juese)
{
for(;;)
{
j=0;
for(x=0;x<((*w2).shoupaishu);x++)
{
if((*w2).shoupai[x].leixing==101)
{
printf("电脑打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
}
if(!j)
{
printf("玩家对电脑造成1点伤害!\n");
((*w2).tili)--;
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
break;
}
j=0;
for(;;)
{
printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
if(((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
(*w1).Kanshoupai();
scanf("%d",&x);
if(x==-1)
{
int i;
((*w1).tili)--;
printf("电脑对玩家造成1点伤害!\n");
i=Binsi(w2,w1,qipaidui,qipaishu);
return i;
break;
}
else if(((*w1).zhuangbei[0].leixing==305)&&x==100)
{
pai p=Zhangba(w1,qipaidui,qipaishu);
p.paifu=-1;
printf("打出!\n");
j=1;
break;
}
else if((*w1).shoupai[x].leixing==101)
{
printf("玩家打出");
((*w1).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
else printf("你确定你打出的是【杀】?\n");
}
}
}
else
{
for(;;)
{
j=0;
for(;;)
{
printf("请打出一张【杀】响应【决斗】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
if(((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
(*w2).Kanshoupai();
scanf("%d",&x);
if(x==-1)
{
int i;
((*w2).tili)--;
printf("电脑对玩家造成1点伤害!\n");
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
break;
}
else if(((*w2).zhuangbei[0].leixing==305)&&x==100)
{
pai p=Zhangba(w2,qipaidui,qipaishu);
p.paifu=-1;
printf("打出!\n");
j=1;
break;
}
else if((*w2).shoupai[x].leixing==101)
{
printf("玩家打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
else printf("你确定你打出的是【杀】?\n");
}
j=0;
for(x=0;x<((*w1).shoupaishu);x++)
{
if((*w1).shoupai[x].leixing==101)
{
printf("电脑打出");
((*w1).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w1).shoupai)[x];
for(int i=x+1;i<=((*w1).shoupaishu);i++)((*w1).shoupai)[i-1]=((*w1).shoupai)[i];
((*w1).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
}
if(!j)
{
printf("玩家对电脑造成1点伤害!\n");
((*w2).tili)--;
i=Binsi(w2,w1,qipaidui,qipaishu);
return i;
break;
}
}
}
}
int Jiedao(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
int i,j=0,x;
if((*w1).juese)
{
for(x=0;x<((*w2).shoupaishu);x++)
{
if((*w2).shoupai[x].leixing==101)
{
printf("电脑对玩家使用");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
}
if(j)
{
i=Sha(w2,w1,paidui,paiduishu,qipaidui,qipaishu);
return i;
printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
}
else
{
printf("电脑放弃使用【杀】,玩家获得电脑的武器");
(*w2).zhuangbei[0].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[0].leixing=-1;
((*w2).zhuangbei)[0].changdu=1;
(*w1).Kanshoupai();
return 0;
}
}
else
{
for(;;)
{
printf("请对电脑使用一张【杀】,否则电脑将获得你的武器!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
if(((*w2).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
(*w2).Kanshoupai();
scanf("%d",&x);
if(x==-1)break;
else if(((*w2).zhuangbei[0].leixing==305)&&x==100)
{
pai p=Zhangba(w2,qipaidui,qipaishu);
p.paifu=-1;
printf("使用!\n");
j=1;
break;
}
else if((*w2).shoupai[x].leixing==101)
{
printf("玩家对电脑使用");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
j=1;
break;
}
else printf("你确定你使用的是【杀】?\n");
}
if(j)
{
i=Sha(w2,w1,paidui,paiduishu,qipaidui,qipaishu);
return i;
printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
}
else
{
printf("玩家放弃使用【杀】,电脑获得玩家的武器");
((*w2).zhuangbei)[0].Kanpai();
(*w1).shoupai[(*w1).shoupaishu]=((*w2).zhuangbei)[0];
((*w2).zhuangbeishu)--;
((*w1).shoupaishu)++;
((*w2).zhuangbei)[0].leixing=-1;
((*w2).zhuangbei)[0].changdu=1;
return 0;
}
}
}
void Taoyuan(wujiang*w)
{
if((*w).tili<(*w).tilishangxian)
{
((*w).tili)++;
if((*w).juese)printf("玩家");
else printf("电脑");
printf("恢复1点体力!\n");
}
}
void Kaipai(pai paidui[104],int* paiduishu,int renshu,pai wugu[10])
{
int i;
printf("五谷丰登开牌:\n");
for(i=1;i<=renshu;i++)
{
wugu[i-1]=paidui[104-(*paiduishu)];
(*paiduishu)--;
printf("%d ",i-1);
wugu[i-1].Kanpai();
}
}
void Qupai(pai wugu[10],wujiang*w)
{
int i,x;
printf("五谷丰登开牌:\n");
for(i=0;(wugu[i].leixing)!=-1;i++)
{
printf("%d ",i);
wugu[i].Kanpai();
}
if((*w).juese)
{
for(;;)
{
printf("请选择你想要的卡牌,输入卡牌之前的编号,以回车结束!\n");
scanf("%d",&x);
if(wugu[x].leixing!=-1)
{
printf("玩家选择");
wugu[x].Kanpai();
(*w).shoupai[(*w).shoupaishu]=wugu[x];
((*w).shoupaishu)++;
for(i=x+1;i<=9;i++)wugu[i-1]=wugu[i];
wugu[9].leixing=-1;
break;
}
printf("你选择了一张空气加入手牌!");
}
}
else
{
printf("电脑选择");
wugu[0].Kanpai();
(*w).shoupai[(*w).shoupaishu]=wugu[0];
((*w).shoupaishu)++;
for(i=1;i<=9;i++)wugu[i-1]=wugu[i];
wugu[9].leixing=-1;
}
}
void Rengpai(pai wugu[10],pai qipaidui[104],int*qipaishu)
{
int i;
for(i=0;wugu[i].leixing!=-1;i++)
{
qipaidui[*qipaishu]=wugu[i];
(*qipaishu)++;
wugu[i].leixing=-1;
}
}
int Nanman(wujiang*w1,wujiang*w2,pai qipaidui[104],int*qipaishu)
{
int i,x;
if((*w1).juese)
{
for(x=0;x<((*w2).shoupaishu);x++)
{
if((*w2).shoupai[x].leixing==101)
{
printf("电脑打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(int i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
}
printf("玩家对电脑造成1点伤害!\n");
((*w2).tili)--;
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
}
else
{
for(;;)
{
printf("请打出一张【杀】响应【南蛮入侵】,否则你将受到1点伤害!\n请输入手牌之前的编号,或者输入“-1”放弃出【杀】,以回车结束!\n");
if(((*w2).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
(*w2).Kanshoupai();
scanf("%d",&x);
if(x==-1)
{
int i;
((*w2).tili)--;
printf("电脑对玩家造成1点伤害!\n");
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
break;
}
else if(((*w2).zhuangbei[0].leixing==305)&&x==100)
{
pai p=Zhangba(w2,qipaidui,qipaishu);
p.paifu=-1;
printf("使用!\n");
return 0;
break;
}
else if((*w2).shoupai[x].leixing==101)
{
printf("玩家打出");
((*w2).shoupai)[x].Kanpai();
qipaidui[*qipaishu]=((*w2).shoupai)[x];
for(i=x+1;i<=((*w2).shoupaishu);i++)((*w2).shoupai)[i-1]=((*w2).shoupai)[i];
((*w2).shoupaishu)--;
(*qipaishu)++;
return 0;
break;
}
else printf("你确定你打出的是【杀】?\n");
}
}
}
int Wanjian(wujiang*w1,wujiang*w2,pai paidui[104],int*paiduishu,pai qipaidui[104],int*qipaishu)
{
int i;
i=Shan(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(i==-1)
{
i=Binsi(w1,w2,qipaidui,qipaishu);
return i;
}
else return 0;
}
int Chupai(pai paidui[104],pai qipaidui[104],int *paiduishu,int*qipaishu,wujiang*w1,wujiang*w2,pai yuanshipaidui[2][4][13])
{
pai p1;
int sha=1;int y=-1,i,t=((*w1).shoupaishu)-1;
for(;;t--)
{
if((*w1).juese)
{
printf("\n电脑当前手牌数:%d\n",((*w2).shoupaishu));
(*w2).Kanzhuangbei();
(*w1).Kanshoupai();
(*w1).Kanzhuangbei();
}
int j=0;
if((*w1).juese&&((*w1).zhuangbei[0].leixing==305))printf("如果想发动【丈八蛇矛】效果,请输入“100”,以回车结束!\n");
y=Xuanpai(w1,t);
p1=Panpai(w1,&sha,y,qipaidui,qipaishu);
if((p1).leixing==-1)break;
else if((p1).leixing==0)continue;
else
{
int duixiang;
duixiang=Mubiao(p1,w1,w2,&sha);
if(duixiang==-2)continue;
else
{
Da1pai(w1,w2,qipaidui,qipaishu,y);
Miaoshu(p1,((*w1).juese),duixiang);
if(!((*w1).juese))
{
printf("\n电脑当前手牌数:%d\n",((*w1).shoupaishu));
(*w1).Kanzhuangbei();
(*w2).Kanshoupai();
(*w2).Kanzhuangbei();
}
switch(p1.leixing)
{
case 101:
i=Sha(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(i==-1){return -1;break;}
if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
break;
case 103:
Tao(w1);
break;
case 201:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Chai(w1,w2,qipaidui,qipaishu);
else;
if((*w1).juese)(*w1).Kanshoupai();
break;
case 202:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Qian(w1,w2);
else;
if((*w1).juese)(*w1).Kanshoupai();
break;
case 203:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Wuzhong(w1,paidui,paiduishu,qipaidui,qipaishu);
else;
break;
case 204:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))
{
i=Juedou(w1,w2,qipaidui,qipaishu);
if(i==-1)return -1;
if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
}
break;
case 205:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))
{
i=Jiedao(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(i==-1)return -1;
if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
}
break;
case 206:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Taoyuan(w1);
j=0;
for(;;)
{
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Taoyuan(w2);
break;
case 207:
pai wugu[10];
for(i=1;i<=10;i++)wugu[i-1].leixing=-1;
Kaipai(paidui,paiduishu,2,wugu);
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Qupai(wugu,w1);
for(;;)
{
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))Qupai(wugu,w2);
Rengpai(wugu,qipaidui,qipaishu); printf("弃牌数:%d\n",*qipaishu);
break;
case 208:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))
{
i=Nanman(w1,w2,qipaidui,qipaishu);
if(i==-1)return -1;
if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
}
break;
case 209:
for(;;)
{
i=Wuxie(&p1,w1,w2,qipaidui,qipaishu,0);
if(!i)break;
j++;
i=Wuxie(&p1,w2,w1,qipaidui,qipaishu,0);
if(!i)break;
j++;
}
if(!(j%2))
{
i=Wanjian(w1,w2,paidui,paiduishu,qipaidui,qipaishu);
if(i==-1)return -1;
if((*w1).juese)printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w1).tili,(*w1).tilishangxian,(*w2).tili,(*w2).tilishangxian);
else printf("玩家当前体力值:%d/%d\n电脑当前体力值:%d/%d\n",(*w2).tili,(*w2).tilishangxian,(*w1).tili,(*w1).tilishangxian);
}
break;
case 361:
case 362:
case 363:
((*w1).juli[0])--;break;
case 381:
case 382:
case 383:
((*w2).juli[0])++;break;
default:break;
}
printf("\n");
}
}
}
return 0;
}
void Qipai(pai shoupai[20],int *shoupaishu,pai qipaidui[104],int *qipaishu,int juese,int *shoupaishangxian)
{
int x;
if((*shoupaishu)>(*shoupaishangxian))
{
if(juese!=1&&juese!=0)printf("身份参数错误!");
int q=(*shoupaishu)-(*shoupaishangxian);
int i,j;
for(j=1;j<=q;j++)
{
for(;;)
{
if(juese)
{
printf("弃牌请输入手牌之前的编号,以回车结束!\n注:一次只能弃一张牌\n");
printf("手牌数:%d\n",*shoupaishu);
scanf("%d",&x);
if(x>=0&&x<(*shoupaishu))break;
else printf("你弃掉了一张空气!\n");
}
else
{
srand((unsigned)time(NULL));
x=rand()%(*shoupaishu);
break;
}
}
qipaidui[*qipaishu]=shoupai[x];
for(i=x+1;i<=(*shoupaishu);i++)shoupai[i-1]=shoupai[i];
(*shoupaishu)--;
if(juese)printf("弃牌阶段玩家弃置");
else printf("弃牌阶段电脑弃置");
qipaidui[*qipaishu].Kanpai();
(*qipaishu)++;
int m;
if(juese)
{
printf("玩家当前手牌:\n");
for(m=0;m<=(*shoupaishu-1);m++)
{
printf("%d ",m);
(shoupai[m]).Kanpai();
}
} printf("弃牌堆:%d\n",*qipaishu);
}
}
}
int Huihe(pai A[104],pai B[104],int *x,int *y,pai yuanshipaidui[2][4][13],wujiang *w1,wujiang *w2)
{
printf("\n回合开始阶段……\n");
switch((*w1).huihekaishi)
{
case 0:break;
default:printf("回合开始阶段参数错误!\n");break;
}
printf("判定阶段……\n");
int K=0;
if((*w1).pandingshu>0)
{
int i,j;
for(;(*w1).pandingshu;)
{
switch((*w1).pandingpai[0].leixing)
{
case 251:printf("【乐不思蜀】开始判定……\n"); break;
case 252:printf("【闪电】开始判定……\n");break;
default:printf("【??】开始判定……\n");break;
}
j=0;
pai p=((*w1).pandingpai[0]);
for(;;)//在判定之前询问【无懈】
{
i=Wuxie(&p,w2,w1,B,y,0);
if(!i)break;
j++;
i=Wuxie(&p,w1,w2,B,y,0);
if(!i)break;
j++;
}
switch((*w1).pandingpai[0].leixing)
{
case 251:
if(!(j%2))
{
printf("【乐不思蜀】的判定牌是:");
Panding(A,x,B,y);
if((B[(*y)-1].huase)!=1)
{
printf("【乐不思蜀】判定成功!\n");
if((*w1).juese)printf("玩家");
else printf("电脑");
printf("跳过出牌阶段!\n");
K=-1;
}
else printf("【乐不思蜀】判定失败!\n");
}
B[*y]=(*w1).pandingpai[0];
((*w1).pandingshu)--;
(*w1).pandingpai[0]=(*w1).pandingpai[1];
(*w1).pandingpai[1]=(*w1).pandingpai[2];
(*w1).pandingpai[2].leixing=-1;
(*y)++;
break;
case 252:
if(!(j%2))
{
printf("【闪电】的判定牌是:");
Panding(A,x,B,y);
if((B[(*y)-1].huase==0)&&(B[(*y)-1].dianshu>=1)&&(B[(*y)-1].dianshu<=8))
{
printf("【闪电】判定成功!\n");
if((*w1).juese)printf("玩家");
else printf("电脑");
printf("受到3点雷电伤害!");
((*w1).tili)=((*w1).tili)-3;
i=Binsi(w2,w1,B,y);
B[*y]=(*w1).pandingpai[0];
((*w1).pandingshu)--;
(*w1).pandingpai[0]=(*w1).pandingpai[1];
(*w1).pandingpai[1]=(*w1).pandingpai[2];
(*w1).pandingpai[2].leixing=-1;
(*y)++;
if(i==-1)return -1;
}
else
{
printf("【闪电】判定失败!\n");
(*w2).pandingpai[2]=(*w2).pandingpai[1];
(*w2).pandingpai[1]=(*w2).pandingpai[0];
(*w2).pandingpai[0]=(*w1).pandingpai[0];
(*w1).pandingpai[0]=(*w1).pandingpai[1];
(*w1).pandingpai[1]=(*w1).pandingpai[2];
(*w1).pandingpai[2].leixing=-1;
((*w1).pandingshu)--;
((*w2).pandingshu)++;
}
break;
}
default:printf("判定牌错误!");
} printf("弃牌数:%d\n",*y);
}
}
else if(!((*w1).pandingshu));
else printf("判定阶段参数错误!\n");
printf("摸牌阶段……\n");
switch((*w1).mopai)
{
case 0:Mopai(&((*w1).shoupaishu),(*w1).shoupai,A,x,B,y,(*w1).juese);break;
case -1:break;
default:printf("摸牌阶段参数错误!\n");break;
}
if(K==-1)goto M;
printf("出牌阶段……\n");
switch((*w1).chupai)
{
case 0:
{
int i;
i=Chupai(A,B,x,y,w1,w2,yuanshipaidui);
if(i==-1)
{
return -1;
break;
}
else break;
}
case -1:break;
default:printf("出牌阶段参数错误!\n");break;
}
M:
printf("弃牌阶段……\n");
switch((*w1).qipai)
{
case 0:
Qipai((*w1).shoupai,&((*w1).shoupaishu),B,y,(*w1).juese,&((*w1).tili));break;
default:printf("弃牌阶段参数错误!\n");break;
}
printf("回合结束阶段……\n");
switch((*w1).huihejieshu)
{
case 0:break;
default:printf("回合结束阶段参数错误!\n");break;
}
return 0;
}
int main()
{
void Kanshoupai(pai p);
pai yuanshipaidui[2][4][13],qipaidui[104],paidui[104];
wujiang wanjia,com;
com.tili=wanjia.tili=5;
com.tilishangxian=wanjia.tilishangxian=5;
com.huihekaishi=wanjia.huihekaishi=0;
com.panding=wanjia.panding=0;
com.mopai=wanjia.mopai=0;
com.chupai=wanjia.chupai=0;
com.qipai=wanjia.qipai=0;
com.huihejieshu=wanjia.huihejieshu=0;
com.shoupaishu=wanjia.shoupaishu=0;
com.pandingshu=wanjia.pandingshu=0;
com.zhuangbeishu=wanjia.zhuangbeishu=0;
com.juese=0;wanjia.juese=1;
pai p;
p.leixing=-1;
com.zhuangbei[0]=com.zhuangbei[1]=com.zhuangbei[2]=com.zhuangbei[3]=wanjia.zhuangbei[0]=wanjia.zhuangbei[1]=wanjia.zhuangbei[2]=wanjia.zhuangbei[3]=p;
com.zhuangbei[0].changdu=wanjia.zhuangbei[0].changdu=1;
com.pandingpai[0]=com.pandingpai[1]=com.pandingpai[2]=wanjia.pandingpai[0]=wanjia.pandingpai[1]=wanjia.pandingpai[2]=p;
com.juli[0]=wanjia.juli[0]=1;
int a,b,c;
for(a=0;a<=1;a++)
{
for(b=0;b<=3;b++)
{
for(c=0;c<=12;c++)
{
yuanshipaidui[a][b][c].paifu=a;
yuanshipaidui[a][b][c].huase=b;
yuanshipaidui[a][b][c].dianshu=c;
}
}
}
yuanshipaidui[0][0][0].leixing=204;
yuanshipaidui[0][0][1].leixing=331;
yuanshipaidui[0][0][2].leixing=201;
yuanshipaidui[0][0][3].leixing=201;
yuanshipaidui[0][0][4].leixing=304;yuanshipaidui[0][0][4].changdu=3;
yuanshipaidui[0][0][5].leixing=251;
yuanshipaidui[0][0][6].leixing=101;
yuanshipaidui[0][0][7].leixing=101;
yuanshipaidui[0][0][8].leixing=101;
yuanshipaidui[0][0][9].leixing=101;
yuanshipaidui[0][0][10].leixing=202;
yuanshipaidui[0][0][11].leixing=201;
yuanshipaidui[0][0][12].leixing=208;
yuanshipaidui[0][1][0].leixing=209;
yuanshipaidui[0][1][1].leixing=102;
yuanshipaidui[0][1][2].leixing=103;
yuanshipaidui[0][1][3].leixing=103;
yuanshipaidui[0][1][4].leixing=308;yuanshipaidui[0][1][4].changdu=5;
yuanshipaidui[0][1][5].leixing=103;
yuanshipaidui[0][1][6].leixing=103;
yuanshipaidui[0][1][7].leixing=103;
yuanshipaidui[0][1][8].leixing=103;
yuanshipaidui[0][1][9].leixing=101;
yuanshipaidui[0][1][10].leixing=101;
yuanshipaidui[0][1][11].leixing=103;
yuanshipaidui[0][1][12].leixing=102;
yuanshipaidui[0][2][0].leixing=204;
yuanshipaidui[0][2][1].leixing=101;
yuanshipaidui[0][2][2].leixing=101;
yuanshipaidui[0][2][3].leixing=101;
yuanshipaidui[0][2][4].leixing=101;
yuanshipaidui[0][2][5].leixing=101;
yuanshipaidui[0][2][6].leixing=101;
yuanshipaidui[0][2][7].leixing=101;
yuanshipaidui[0][2][8].leixing=101;
yuanshipaidui[0][2][9].leixing=101;
yuanshipaidui[0][2][10].leixing=101;
yuanshipaidui[0][2][11].leixing=205;
yuanshipaidui[0][2][12].leixing=205;
yuanshipaidui[0][3][0].leixing=204;
yuanshipaidui[0][3][1].leixing=102;
yuanshipaidui[0][3][2].leixing=102;
yuanshipaidui[0][3][3].leixing=102;
yuanshipaidui[0][3][4].leixing=102;
yuanshipaidui[0][3][5].leixing=101;
yuanshipaidui[0][3][6].leixing=101;
yuanshipaidui[0][3][7].leixing=101;
yuanshipaidui[0][3][8].leixing=101;
yuanshipaidui[0][3][9].leixing=101;
yuanshipaidui[0][3][10].leixing=102;
yuanshipaidui[0][3][11].leixing=103;
yuanshipaidui[0][3][12].leixing=101;
yuanshipaidui[1][0][0].leixing=252;
yuanshipaidui[1][0][1].leixing=302;yuanshipaidui[1][0][1].changdu=2;
yuanshipaidui[1][0][2].leixing=202;
yuanshipaidui[1][0][3].leixing=202;
yuanshipaidui[1][0][4].leixing=383;
yuanshipaidui[1][0][5].leixing=303;yuanshipaidui[1][0][5].changdu=2;
yuanshipaidui[1][0][6].leixing=208;
yuanshipaidui[1][0][7].leixing=101;
yuanshipaidui[1][0][8].leixing=101;
yuanshipaidui[1][0][9].leixing=101;
yuanshipaidui[1][0][10].leixing=210;
yuanshipaidui[1][0][11].leixing=305;yuanshipaidui[1][0][11].changdu=3;
yuanshipaidui[1][0][12].leixing=362;
yuanshipaidui[1][1][0].leixing=206;
yuanshipaidui[1][1][1].leixing=102;
yuanshipaidui[1][1][2].leixing=207;
yuanshipaidui[1][1][3].leixing=207;
yuanshipaidui[1][1][4].leixing=361;
yuanshipaidui[1][1][5].leixing=251;
yuanshipaidui[1][1][6].leixing=203;
yuanshipaidui[1][1][7].leixing=203;
yuanshipaidui[1][1][8].leixing=203;
yuanshipaidui[1][1][9].leixing=101;
yuanshipaidui[1][1][10].leixing=203;
yuanshipaidui[1][1][11].leixing=201;
yuanshipaidui[1][1][12].leixing=381;
yuanshipaidui[1][2][0].leixing=301;yuanshipaidui[1][2][0].changdu=1;
yuanshipaidui[1][2][1].leixing=331;
yuanshipaidui[1][2][2].leixing=201;
yuanshipaidui[1][2][3].leixing=201;
yuanshipaidui[1][2][4].leixing=382;
yuanshipaidui[1][2][5].leixing=251;
yuanshipaidui[1][2][6].leixing=208;
yuanshipaidui[1][2][7].leixing=101;
yuanshipaidui[1][2][8].leixing=101;
yuanshipaidui[1][2][9].leixing=101;
yuanshipaidui[1][2][10].leixing=101;
yuanshipaidui[1][2][11].leixing=210;
yuanshipaidui[1][2][12].leixing=210;
yuanshipaidui[1][3][0].leixing=301;yuanshipaidui[1][3][0].changdu=1;
yuanshipaidui[1][3][1].leixing=102;
yuanshipaidui[1][3][2].leixing=202;
yuanshipaidui[1][3][3].leixing=202;
yuanshipaidui[1][3][4].leixing=306;yuanshipaidui[1][3][4].changdu=3;
yuanshipaidui[1][3][5].leixing=102;
yuanshipaidui[1][3][6].leixing=102;
yuanshipaidui[1][3][7].leixing=102;
yuanshipaidui[1][3][8].leixing=102;
yuanshipaidui[1][3][9].leixing=102;
yuanshipaidui[1][3][10].leixing=102;
yuanshipaidui[1][3][11].leixing=307;yuanshipaidui[1][3][11].changdu=4;
yuanshipaidui[1][3][12].leixing=363;
int paiduishu=104;
int qipaishu=0;
printf("游戏开始!\n");
Qishixipai(yuanshipaidui,paidui);
Qishishoupai(&wanjia,paidui,&(paiduishu),qipaidui,&(qipaishu));
Qishishoupai(&com,paidui,&(paiduishu),qipaidui,&(qipaishu));
int i;
for(;;)
{
i=Huihe(paidui,qipaidui,&paiduishu,&qipaishu,yuanshipaidui,&wanjia,&com);
if(i==-1)break;
i=Huihe(paidui,qipaidui,&paiduishu,&qipaishu,yuanshipaidui,&com,&wanjia);
if(i==-1)break;
}}

  

推箱子4
//转自:https://www.luogu.com.cn/paste/2wljsz87
//作者:https://www.luogu.com.cn/user/454526
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include <windows.h>
using namespace std;
void Game_Menu(HANDLE hout);
void Game_description(HANDLE hout);
void gotoxy(HANDLE hout, int x, int y);
int DrawMap(HANDLE hout);
void Move(HANDLE hout);
int finish();
void setmap(int n);
void color(int m);
bool flag = true;
int pass = 1;
#define R 10
#define C 10
#define framex 20
#define framey 14 
int map[R][C] = {0};
//关卡1 
int map1[R][C] = {
{ 0,0,1,1,1,0,0,0 },
{ 0,0,1,3,1,0,0,0 },
{ 0,0,1,0,1,1,1,1 },
{ 1,1,1,0,0,4,3,1 },
{ 1,3,4,4,0,1,1,1 },
{ 1,1,1,5,4,1,0,0 },
{ 0,0,0,1,3,1,0,0 },
{ 0,0,0,1,1,1,0,0 }
};
//地图 2(关卡2)
int map2[R][C]={
{1,1,1,1,1,0,0,0,0,0},
{1,5,0,0,1,0,0,0,0,0},
{1,0,4,4,1,0,1,1,1,0},
{1,0,4,0,1,0,1,3,1,0},
{1,1,1,0,1,1,1,3,1,0},
{0,1,1,0,0,0,0,3,1,0},
{0,1,0,0,0,1,0,0,1,0},
{0,1,0,0,0,1,1,1,1,0},
{0,1,1,1,1,1,0,0,0,0}
};
//地图 3(关卡3)
int map3[R][C]={
{ 0,0,0,1,1,1,1,1,1,1 },
{ 0,0,1,1,0,0,1,0,5,1 },
{ 0,0,1,0,0,0,1,0,0,1 },
{ 0,0,1,4,0,4,0,4,0,1 },
{ 0,0,1,0,4,1,1,0,0,1 },
{ 1,1,1,0,4,0,1,0,1,1 },
{ 1,3,3,3,3,3,0,0,1,0 },
{ 1,1,1,1,1,1,1,1,1,0 },
};
void Game_Menu(HANDLE hout){//游戏开始菜单 
  system("cls");
  gotoxy(hout, framex, 1);
  cout << "*******************";
  gotoxy(hout, framex, 3);
  cout << "   推箱子    ";
  gotoxy(hout, framex, 5);
  cout << "  按s或S开始   ";
  gotoxy(hout, framex, 7);
  cout << "  按q或Q退出   ";
  gotoxy(hout, framex, 9);
  cout << "游戏前关闭中文输入 ";
  gotoxy(hout, framex, 11);
  cout << "*******************";
  _getch();
};
void Game_description(HANDLE hout){//操作提示 
  system("cls");
  gotoxy(hout, framex, 1);
  cout << "*****************************";
  gotoxy(hout, framex, 3);
  cout << "   按方向键上下左右移动  ";
  gotoxy(hout, framex, 5);
  cout << " 所有箱子到达目的地游戏胜利 ";
  gotoxy(hout, framex, 7);
  cout << "     按q或Q退出     ";
  gotoxy(hout, framex, 9);
  cout << "*****************************";
};
void gotoxy(HANDLE hout, int x, int y){
  COORD pos;
  pos.X = x;
  pos.Y = y;
  SetConsoleCursorPosition(hout, pos);
};
void print(int i){//根据map值输出相应的图形 
  switch(i){
        case 0:
          color(0x7);
          cout << " "; //空地■★□?◇◆??¤
          break;
          case 1:
          color(8);
          cout << "■";//墙体
          break;
          case 3:
          color(0xE);
          cout << "◇";//目的地
          break;
          case 4:
          color(4);
          cout << "□";//箱子 
          break;
          case 5:
          color(3);
          cout << "♀"; //人
          break;
          case 7:   //4+3  箱子到达目的地
          color(6);  
          cout << "◆";
          break;
          case 8:   //5+3 人与目的地重合
          color(3);
          cout << "♀";
          break;
          default:
          break;
        }
}
int DrawMap(HANDLE hout){//新的关卡开始时载入地图 
  //HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
  gotoxy(hout, framex + C, framey - 3);
  color(0xF);
  cout << "第" << pass << "关";
  //printf("第%d关", pass); 
  for(int i = 0; i < R; i++){
    gotoxy(hout, framex, framey + i);
    for(int j = 0; j < C; j++){
      
      print(map[i][j]);
    }
  }
  return 0;
};
void Move(HANDLE hout){//移动小人 
  int x = 0, y = 0;
  for(int i = 0; i < R; i++){
    for(int j = 0; j < C; j++){
      if(map[i][j] == 5 || map [i] [j] == 8){
        x = i;
        y = j;
        break;
      }
    }
  }
  gotoxy(hout, framex, framey + R);
  color(0xF);
  printf("当前位置:(%d, %d)", x, y);
  int ch = _getch();
  
  switch(ch){
    
    case 'w':
    case 'W':
    case 72:
      if(map[x - 1][y] == 0 || map[x - 1][y] == 3){
        map[x][y] -= 5;
        gotoxy(hout, framex + 2 * y, framey + x);
        print(map[x][y]);
        map[x - 1][y] += 5;
        gotoxy(hout, framex + 2 * y, framey + x - 1);
        print(map[x - 1][y]);
      }
      else if(map[x - 1][y] == 4 || map[x - 1][y] == 7){
        if(map[x - 2][y] == 0 || map[x - 2][y] == 3){
          map[x][y] -= 5;
          gotoxy(hout, framex + 2 * y, framey + x);
          print(map[x][y]);
          map[x - 1][y] += 1;
          gotoxy(hout, framex + 2 * y, framey + x - 1);
          print(map[x - 1][y]);
          map[x - 2][y] += 4;
          gotoxy(hout, framex + 2 * y, framey + x - 2);
          print(map[x - 2][y]);
        }
      }
      break;
    
    case 's':
    case 'S':
    case 80:
      if(map[x + 1][y] == 0 || map[x + 1][y] == 3){
        map[x][y] -= 5;
        gotoxy(hout, framex + 2 * y, framey + x);
        print(map[x][y]);
        map[x + 1][y] += 5;
        gotoxy(hout, framex + 2 * y, framey + x + 1);
        print(map[x + 1][y]);
      }
      else if(map[x + 1][y] == 4 || map[x + 1][y] == 7){
        if(map[x + 2][y] == 0 || map[x + 2][y] == 3){
          map[x][y] -= 5;
          gotoxy(hout, framex + 2 * y, framey + x);
          print(map[x][y]);
          map[x + 1][y] += 1;
          gotoxy(hout, framex + 2 * y, framey + x + 1);
          print(map[x + 1][y]);
          map[x + 2][y] += 4;
          gotoxy(hout, framex + 2 * y, framey + x + 2);
          print(map[x + 2][y]);
        }
      }
      break;
    
    case 'a':
    case 'A':
    case 75:
      if(map[x][y - 1] == 0 || map[x][y - 1] == 3){
        map[x][y] -= 5;
        gotoxy(hout, framex + 2 * y, framey + x);
        print(map[x][y]);
        map[x][y - 1] += 5;
        gotoxy(hout, framex + 2 * y - 2, framey + x);
        print(map[x][y - 1]);
      }
      else if(map[x][y - 1] == 4 || map[x][y - 1] == 7){
        if(map[x][y - 2] == 0 || map[x][y - 2] == 3){
          map[x][y] -= 5;
          gotoxy(hout, framex + 2 * y, framey + x);
          print(map[x][y]);
          map[x][y - 1] += 1;
          gotoxy(hout, framex + 2 * y - 2, framey + x);
          print(map[x][y - 1]);
          map[x][y - 2] += 4;
          gotoxy(hout, framex + 2 * y - 4, framey + x);
          print(map[x][y - 2]);
        }
      }
      break;
    
    case 'd':
    case 'D':
    case 77:
      if(map[x][y + 1] == 0 || map[x][y + 1] == 3){
        map[x][y] -= 5;
        gotoxy(hout, framex + 2 * y, framey + x);
        print(map[x][y]);
        map[x][y + 1] += 5;
        gotoxy(hout, framex + 2 * y + 2, framey + x);
        print(map[x][y + 1]);
      }
      else if(map[x][y + 1] == 4 || map[x][y + 1] == 7){
        if(map[x][y + 2] == 0 || map[x][y + 2] == 3){
          map[x][y] -= 5;
          gotoxy(hout, framex + 2 * y, framey + x);
          print(map[x][y]);
          map[x][y + 1] += 1;
          gotoxy(hout, framex + 2 * y + 2, framey + x);
          print(map[x][y + 1]);
          map[x][y + 2] += 4;
          gotoxy(hout, framex + 2 * y + 4, framey + x);
          print(map[x][y + 2]);
        }
      }
      break;
    case 'q':
    case 'Q':
      flag = false;
    default:
      break;  
  }
};
int finish(){//判断游戏结束 
  for(int i = 0; i < R; i++){
    for(int j = 0; j < C; j++){
      if(map[i][j] == 4)return 0;
    }
  }
  return 1;
};
void setmap(int n){
  switch(n){
    case 1:
      memcpy(map, map1, sizeof(map1));
      break;
    case 2:
      memcpy(map, map2, sizeof(map2));
      break;
    case 3:
      memcpy(map, map3, sizeof(map3));
      break;
  }
};
void color(int m){//改变输出符号的颜色 
  HANDLE consolehend;
  consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(consolehend, m); 
};
int main(){
  HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
  
  Game_Menu(hout);
  char ch = getch();
  setmap(pass);
  Game_description(hout);
  DrawMap(hout);
  if(ch == 'q' || ch == 'Q'){
    return 0;
  }
  while(flag){
    Move(hout);
    if(finish()){  
      DrawMap(hout);
      gotoxy(hout, framex, framey + R);
      cout << " 恭喜,成功过关!";
      gotoxy(hout, framex, framey + R + 2);
      cout << "重玩(R)";
      ch = getch();
      system("cls");
      pass++;
      if(ch == 'r' || ch == 'R')pass--;
      if(pass > 3) { 
        gotoxy(hout, framex, framey);
        cout << " 您已通过全部关卡!";
        getch();
        flag = false;
      } 
      else{
        setmap(pass);
        Game_description(hout);
        DrawMap(hout);
      }
    }
  }
  return 0; 
}

  

推箱子1
/*******************************************
用最简单的C语言语句写个推箱子的程序。
********************************************/
#include <stdio.h>  
#include <conio.h>
#include<stdlib.h> 
 int map[9][11] = {
    {0,1,1,1,1,1,1,1,1,1,0},  //0代表空地
    {0,1,0,0,0,1,0,0,0,1,0},  //1代表墙
    {0,1,0,4,4,4,4,4,0,1,0},  //3代表目的地
    {0,1,0,4,0,4,0,4,0,1,1},  //4代表箱子
    {0,1,0,0,0,0,0,0,4,0,1},  //5代表人 
    {1,1,0,1,1,1,1,0,4,0,1},
    {1,0,8,3,3,3,3,1,0,0,1},  //2 3 4 5 6 7 8 9 1 0
    {1,0,3,3,3,3,3,0,0,1,1},
    {1,1,1,1,1,1,1,1,1,1,0} };
 //绘制地图  //二维数组+switch()
void DrawMap()
{
    //遍历二维数组  //0 打印空格  //1 墙   //3 目的地  //什么结构?
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 11; j++)
        {
            //if  else  switch
            switch (map[i][j])
            {
            case 0:
                printf("  ");
                break;
            case 1:
                printf("■");
                break;
            case 3:
                printf("☆");
                break;
            case 4:
                printf("□");
                break;
            case 5:
                printf("♀");  //5人
                break;
            case 7:     //4 + 3  箱子在目的地中
                printf("★");
                break;
            case 8:     // 5 + 3  人在目的地当中   人?
                printf("♀");
                break;
            }
        }
        printf("\n");
    }
}
void PlayGame()
{
    int r, c;  //人的下标  //
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 11; j++)
        {
            if (map[i][j] == 5||map[i][j]==8)   //i j 人的下标?
            {
                r = i;
                c = j;
            }
        }
    }
     char ch;  //字符变量
    ch = getch();  //键盘的输入保存到字符中
    // getch()     getchar()  接收键盘字符
    // getch()直接接收 不显示回文   getchar()显示回文可以修改 enter键结束
     //根据不同的按键  改变不同的值. 分支.
    switch (ch)
    {
    case 'W':  //W A S D方向   72  80  75  77 虚拟键值 ascii  windowVK_UP VK_TAB VK_RETUNE
    case 'w':
    case 72:
        if (map[r - 1][c] == 0|| map[r - 1][c] == 3) 
        {
            map[r - 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
        {
            if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
            {
                map[r - 2][c] += 4;
                map[r - 1][c] += 1;
                map[r][c] -= 5;
            }
        }
 
         break;
     case 'S':  //enter按键的作用  确认 返回
    case 's':
    case 80:
        if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
        {
            map[r + 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7)
        {
            if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
            {
                map[r + 2][c] += 4;
                map[r + 1][c] += 1;
                map[r][c] -= 5;
            }
        }
        break;
     case 'A':
    case 'a':
    case 75:
        if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3)
        {
            map[r ][c - 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
        {
            if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3)
            {
                map[r ][c - 2] += 4;
                map[r ][c - 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
     case 'D':
    case 'd':
    case 77:
        if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
        {
            map[r][c + 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
        {
            if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
            {
                map[r][c + 2] += 4;
                map[r][c + 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    }
}
int main()  //主函数
{
    while (1)
    {
        system("cls");
        DrawMap();
        PlayGame();
    }
     return 0;
}
 //通过按键来实现游戏  ---> 通过按键来改变二维数组的排列顺序.
//思考一个问题? 地图是二维数组来决定的. 人在哪里  二维数组来决定?
 /************************************************
//人推箱子  
可以动.    怎么办.  改变元素
        1.人的前面是空地
        2.人的前面是目的地
        3.人的前面是箱子
            3.1 箱子的前面是空地
            3.2 箱子的前面是目的地
 
            //盘断二维数组中有几个7
            //没有目的地  不对..  人站在目的地
            //有没有4.
****************************************/

  

推箱子2
#include <stdio.h>     
#include <stdlib.h>    
#include <conio.h>     
int i,j; 
void draw_map(int map[10][12]); //声明画图函数
int main()
{
	system("title 李柏衡");
	char input;   
	int count=0;   //定义记分变量
	int map[10][12] = {{2,2,2,2,2,1,1,1,1,1,2,2},
		{1,1,1,1,2,1,0,0,0,1,1,2},
		{1,0,0,1,1,1,0,1,0,0,1,2},
		{1,0,4,3,3,3,3,3,1,0,1,1},
		{1,0,0,1,1,3,3,3,4,0,0,1},
		{1,0,0,0,0,4,1,1,4,1,0,1},
		{1,0,4,1,4,0,0,0,4,0,0,1},
		{1,1,0,6,0,1,1,1,4,1,0,1},
		{2,1,1,1,1,1,2,1,0,0,0,1},
		{2,2,2,2,2,2,2,1,1,1,1,1}
	};
	while (1)   //死循环,等待用户命令
	{
		system("CLS");
		for (i=0;i<12;i++)
		{
			printf("%d",i);
		}
		printf("\n");
		/*for (i=1;i<10;i++)
		{
			printf("%d\n",i);
		}*/
		printf("\n");
		draw_map(map);
		printf("当前得分:%d\n",count);
		//找初始位置
		for (i=0;i<10;i++)
		{
			for (j=0;j<12;j++)
			{
				if (map[i][j]==6||map[i][j]==9)
					break;
			}
			if (map[i][j]==6||map[i][j]==9)
				break;
		}
		printf("您的当前坐标(%d,%d)",i,j);        
		input = getch();   //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
		switch (input)
		{
		case 'w':
			//如果人前面是空地。  //0代表空地  6代表人  //3代表目的地
			if(map[i-1][j]==0)
			{
				map[i-1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
				if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
					map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
				else
					map[i][j]=0;    //否则原地ID修改为空地ID 。      
			}
			//如果人前面是目的地。
			else if((map[i-1][j]==3)||(map[i-1][j]==9))
			{
				map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
				if(map[i][j]==9) //如果原地也是目的地(ID为)。
					map[i][j]=3; //人走后把原地ID修改回目的地ID。
				else
					map[i][j]=0; //否则原地ID修改为为空地ID
			}
			//如果人前面是箱子。//4代表箱子   //7箱子进入目的地
			else if(map[i-1][j]==4)
			{
				//如果人前面是箱子,而箱子前面是空地。
				if (map[i-2][j]==0)
				{ 
					map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
					//下面是对箱子原地进行判断
					if(map[i-1][j]==7) //如果箱子原地为目的地。
						map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
					else
						map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
					//下面是对人原地进行判断
					if(map[i][j]==9) //如果之前是目的地。
						map[i][j]=3; //人走了之后修改回目的地ID。
					else
						map[i][j]=0; //否则就是空地。
				}
				//如果人的前面是箱子,而箱子前面是目的地。
				else if (map[i-2][j]==3)
				{ 
					map[i-2][j]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
					count++;
					//下面是对箱子原先位置的判断,同上。
					if(map[i-1][j]==7)
						map[i-1][j]=9;
					else
						map[i-1][j]=6;
					//下面是对人原先位置进行判断,同上。
					if(map[i][j]==9)
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			//如果人前面是已经进入某目的地的箱子(ID=7)。
			else if(map[i-1][j]==7)
			{
				//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
				if(map[i-2][j]==0)
				{
					count--;
					map[i-2][j]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
					map[i-1][j]=9;   //人自然而然的就站在了原先的目的地上了。
					//下面是对人原先地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
				//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
				if(map[i-2][j]==3)
				{
					map[i-2][j]=7;   //把箱子推入了另一目的地,自然,ID也应是。
					map[i-1][j]=9;   //人站在了目的地上。
					//下面是对人原先站立地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			break;
		case 's':
			//如果人前面是空地。
			if(map[i+1][j]==0)
			{
				map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
				if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
					map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
				else
					map[i][j]=0;    //否则原地ID修改为空地ID 。      
			}
			//如果人前面是目的地。
			else if(map[i+1][j]==3)
			{
				map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
				if(map[i][j]==9) //如果原地也是目的地(ID为)。
					map[i][j]=3; //人走后把原地ID修改回目的地ID。
				else
					map[i][j]=0; //否则原地ID修改为为空地ID
			}
			//如果人前面是箱子。
			else if(map[i+1][j]==4)
			{
				//如果人前面是箱子,而箱子前面是空地。
				if (map[i+2][j]==0)
				{ 
					map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
					//下面是对箱子原地进行判断
					if(map[i+1][j]==7) //如果箱子原地为目的地。
						map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
					else
						map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
					//下面是对人原地进行判断
					if(map[i][j]==9) //如果之前是目的地。
						map[i][j]=3; //人走了之后修改回目的地ID。
					else
						map[i][j]=0; //否则就是空地。
				}
				//如果人的前面是箱子,而箱子前面是目的地。
				else if (map[i+2][j]==3)
				{ 
					map[i-2][j]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
					count++;
					//下面是对箱子原先位置的判断,同上。
					if(map[i+1][j]==7)
						map[i+1][j]=9;
					else
						map[i+1][j]=6;
					//下面是对人原先位置进行判断,同上。
					if(map[i][j]==9)
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			//如果人前面是已经进入某目的地的箱子(ID=7)。
			else if(map[i+1][j]==7)
			{
				//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
				if(map[i+2][j]==0)
				{
					count--;
					map[i+2][j]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
					map[i+1][j]=9;   //人自然而然的就站在了原先的目的地上了。
					//下面是对人原先地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
				//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
				if(map[i+2][j]==3)
				{
					map[i+2][j]=7;   //把箱子推入了另一目的地,自然,ID也应是。
					map[i+1][j]=9;   //人站在了目的地上。
					//下面是对人原先站立地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			break;
		case 'a':
			//如果人前面是空地。
			if(map[i][j-1]==0)
			{
				map[i][j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
				if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
					map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
				else
					map[i][j]=0;    //否则原地ID修改为空地ID 。      
			}
			//如果人前面是目的地。
			else if(map[i][j-1]==3)
			{
				map[i][j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
				if(map[i][j]==9) //如果原地也是目的地(ID为)。
					map[i][j]=3; //人走后把原地ID修改回目的地ID。
				else
					map[i][j]=0; //否则原地ID修改为为空地ID
			}
			//如果人前面是箱子。
			else if(map[i][j-1]==4)
			{
				//如果人前面是箱子,而箱子前面是空地。
				if (map[i][j-2]==0)
				{ 
					map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
					//下面是对箱子原地进行判断
					if(map[i][j-1]==7) //如果箱子原地为目的地。
						map[i][j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
					else
						map[i][j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
					//下面是对人原地进行判断
					if(map[i][j]==9) //如果之前是目的地。
						map[i][j]=3; //人走了之后修改回目的地ID。
					else
						map[i][j]=0; //否则就是空地。
				}
				//如果人的前面是箱子,而箱子前面是目的地。
				else if (map[i][j-2]==3)
				{ 
					count++;
					map[i][j-2]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
					//下面是对箱子原先位置的判断,同上。
					if(map[i][j-1]==7)
						map[i][j-1]=9;
					else
						map[i][j-1]=6;
					//下面是对人原先位置进行判断,同上。
					if(map[i][j]==9)
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			//如果人前面是已经进入某目的地的箱子(ID=7)。
			else if(map[i][j-1]==7)
			{
				//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
				if(map[i][j-2]==0)
				{
					count--;
					map[i][j-2]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
					map[i][j-1]=9;   //人自然而然的就站在了原先的目的地上了。
					//下面是对人原先地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
				//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
				if(map[i][j-2]==3)
				{
					map[i][j-2]=7;   //把箱子推入了另一目的地,自然,ID也应是。
					map[i][j-1]=9;   //人站在了目的地上。
					//下面是对人原先站立地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			break;
		case 'd':
			//如果人前面是空地。
			if(map[i][j+1]==0)
			{
				map[i][j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
				if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
					map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
				else
					map[i][j]=0;    //否则原地ID修改为空地ID 。      
			}
			//如果人前面是目的地。
			else if(map[i][j+1]==3)
			{
				map[i][j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
				if(map[i][j]==9) //如果原地也是目的地(ID为)。
					map[i][j]=3; //人走后把原地ID修改回目的地ID。
				else
					map[i][j]=0; //否则原地ID修改为为空地ID
			}
			//如果人前面是箱子。
			else if(map[i][j+1]==4)
			{
				//如果人前面是箱子,而箱子前面是空地。
				if (map[i][j+2]==0)
				{ 
					map[i][j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
					//下面是对箱子原地进行判断
					if(map[i][j+1]==7) //如果箱子原地为目的地。
						map[i][j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
					else
						map[i][j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
					//下面是对人原地进行判断
					if(map[i][j]==9) //如果之前是目的地。
						map[i][j]=3; //人走了之后修改回目的地ID。
					else
						map[i][j]=0; //否则就是空地。
				}
				//如果人的前面是箱子,而箱子前面是目的地。
				else if (map[i][j+2]==3)
				{ 
					count++;
					map[i][j+2]=7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
					//下面是对箱子原先位置的判断,同上。
					if(map[i][j+1]==7)
						map[i][j+1]=9;
					else
						map[i][j+1]=6;
					//下面是对人原先位置进行判断,同上。
					if(map[i][j]==9)
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			//如果人前面是已经进入某目的地的箱子(ID=7)。
			else if(map[i][j+1]==7)
			{
				//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
				if(map[i][j+2]==0)
				{
					count--;
					map[i][j+2]=4;   //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
					map[i][j+1]=9;   //人自然而然的就站在了原先的目的地上了。
					//下面是对人原先地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
				//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
				if(map[i][j+2]==3)
				{
					map[i][j+2]=7;   //把箱子推入了另一目的地,自然,ID也应是。
					map[i][j+1]=9;   //人站在了目的地上。
					//下面是对人原先站立地进行判断,方法同上。
					if(map[i][j]==9) 
						map[i][j]=3;
					else
						map[i][j]=0;
				}
			}
			break;
		}
		if(count==8)   //如果分数达到分
		{
			system("CLS"); //清屏
			draw_map(map); 
			break;    //退出死循环
		}
	}
	printf("\n恭喜你,过关了!!\n"); //过关提示
	return 0;
}
void draw_map(int map[10][12])
{
 
	for(i=0;i<10;i++)
	{
		for(j=0;j<12;j++)
		{
			switch(map[i][j])
			{
			case 0:
				printf(" "); //数字代表道路
				break;
			case 1:
				printf("#"); //数字代表墙壁
				break;
			case 2:
				printf(" "); //数字是游戏边框的空白部分
				break;
			case 3:
				printf("!"); //数字代表目的地
				break;
			case 4:
				printf("*"); //数字代表箱子
				break;
			case 7:
				printf("$"); //数字代表箱子进入目的地
				break;
			case 6:
				printf("@"); //数字代表人
				break;
			case 9:
				printf("@"); //数字代表人进入目的地
				break;
			}            
		}
		printf("\n");    //分行输出
	}
}

  

推箱子3
炸了

  

UNO
#include<bits/stdc++.h>
#include<windows.h>
//making 制作中 waiting 等待中 end 完成 
using namespace std;
struct card//卡片(end) 
{
    int color;//1=red 2=blue 3=green 4=yellow 5=black
    int number;//0-9=0-9 10=禁 11=转 12=+2 13=调色 14=+4 
};
struct player//van家(end)
{
    card hand[103];
    int score=0;
    int have=0;
};
 player a[13];
card now;
bool skip=false,turn=true,plus2=true;
int Plus=0;
 card randcard()//随机卡(end)
{
    card s;
    s.number=rand()%15;
    if(s.number>=13) s.color=5;
    else s.color=rand()%4+1;
    return s;
}
void getcard(int n)//获得一张卡(end)
{
    a[n].have++;
    a[n].hand[a[n].have]=randcard();
    return ;
}
void setcolor()//调色(end) 
{
    cout<<"您希望变成什么颜色?\n1 红\n2 蓝\n3 绿\n4 黄\n";
    int change;
    cin>>change;
    now.color=change;
    now.number=-1;
    return ;
}
void usecard(int i,int n)//使用一张卡(end)
{
    now=a[n].hand[i];
    if(a[n].hand[i].number==10) skip=true;
    if(a[n].hand[i].number==11) turn=!turn;
    if(a[n].hand[i].number==12) Plus+=2;
    if(a[n].hand[i].number==13) setcolor();
    if(a[n].hand[i].number==14) 
    {
        Plus+=4;
        plus2=false;
        setcolor();
    }
    card temp;
    temp=a[n].hand[a[n].have];
    a[n].hand[a[n].have]=a[n].hand[i];
    a[n].hand[i]=temp;
    a[n].have--;
    return ;
}
void init()//初始化(end) 
{
    for(int i=1; i<=10; i++) for(int j=1; j<=7; j++) getcard(i);
    return ;
}
int end(int n)//游戏结束判定(end)
{
    for(int i=1; i<=n; i++) if(a[i].have==0) return i;
    return 0;
}
void show(int n,int i)//卡牌展示(end)
{
    switch (a[n].hand[i].color)
    {
        case 1:
            cout<<"红";
            break;
        case 2:
            cout<<"蓝";
            break;
        case 3:
            cout<<"绿";
            break;
        case 4:
            cout<<"黄";
            break;
    }
    if(a[n].hand[i].number<=9)cout<<a[n].hand[i].number<<' ';
    if(a[n].hand[i].number==10)cout<<"禁 ";
    if(a[n].hand[i].number==11)cout<<"转 ";
    if(a[n].hand[i].number==12)cout<<"+2 ";
    if(a[n].hand[i].number==13)cout<<"调色 ";
    if(a[n].hand[i].number==14)cout<<"+4 ";
    return ;
}
void shownow()
{
    switch (now.color)
    {
        case 1:
            cout<<"红";
            break;
        case 2:
            cout<<"蓝";
            break;
        case 3:
            cout<<"绿";
            break;
        case 4:
            cout<<"黄";
            break;
    }
    if(now.number<=9)cout<<now.number<<' ';
    if(now.number==10)cout<<"禁 ";
    if(now.number==11)cout<<"转 ";
    if(now.number==12)cout<<"+2 ";
    if(now.number==13)cout<<"调色 ";
    if(now.number==14)cout<<"+4 ";
    return ;
}
void round(int n)//回合进行(end)
{
    system("cls");
    cout<<n<<"号玩家的回合";
    system("pause"); 
    system("cls");
    if(skip) 
    {
        cout<<n<<"号玩家您被禁了!";
        skip=false;
        return ;
    }
    if(Plus!=0 && plus2)
    {
        cout<<"上家加给你了"<<Plus<<"张牌,您只能出+2 or +4!\n您的手牌有\n";
        for(int i=1; i<=a[n].have; i++) show(n,i);
        cout<<"\n您要出哪张牌?(从左往右的序号)输出0为不出牌,摸牌\n";
        int use;
        cin>>use;
        if(use>a[n].have || (a[n].hand[use].number!=12 && a[n].hand[use].number!=14 && use!=0)) 
        {
            cout<<"无效的手牌!系统默认为0";
            use=0;
        }
        if(use!=0) usecard(use,n);
        else 
        {
            for(int i=1; i<=Plus; i++) getcard(n);
            plus2=true;
        }
        return ;
    }
    if(Plus!=0 && !plus2)
    {
        cout<<"上家加给你了"<<Plus<<"张牌,您只能出+4!\n您的手牌有\n";
        for(int i=1; i<=a[n].have; i++) show(n,i);
        cout<<"\n您要出哪张牌?(从左往右的序号)输出0为不出牌,摸牌\n";
        int use;
        cin>>use;
        if(use>a[n].have || (a[n].hand[use].number!=14 && use!=0)) 
        {
            cout<<"无效的手牌!系统默认为0";
            use=0;
        }
        if(use!=0) usecard(use,n);
        else 
        {
            for(int i=1; i<=Plus; i++) getcard(n);
            plus2=true;
        }
        return ;
    }
    cout<<n<<"号玩家的回合\n您的手牌有\n";
    for(int i=1; i<=a[n].have; i++) show(n,i);
    cout<<"\n上一张牌为";
    shownow();
    cout<<"\n您要出哪张牌?(从左往右的序号)输出0为不出牌,摸牌\n";
    int use;
    cin>>use;
    cout<<"\n";
    if(use>a[n].have || (a[n].hand[use].color!=now.color && a[n].hand[use].color!=5 && use!=0)) 
    {
        cout<<"无效的手牌!系统默认为0\n";
        use=0;
    }
    if(use!=0) usecard(use,n);
    else 
    {
        getcard(n);
        cout<<"您摸了";
        show(n,a[n].have);
        cout<<"\n";
        if(a[n].hand[a[n].have].color==now.color || a[n].hand[a[n].have].number==now.number)
        {
            cout<<"您摸的牌可以出! 按1出牌\n";
            int ans;
            cin>>ans;
            if(ans==1) cout<<"您出了这张牌。\n";
        }
        usecard(use,n);
    }
    return ;
}
int play(int n)//游戏进程(end)
{
    now=randcard();
    while(now.number>=10)now=randcard();
    int i=0;
    while(true)
    {
        system("pause");
        round(i+1);
        if(turn) i=(i+1)%n;
        else if(i==0) i=n-1;
        else i--;
        if(end(n)!=0) break; 
    }
    return end(n);
}
int main()//主程序(end)
{
    int n;
    srand(time(0));
    cout<<"UNO TIME by dead_X\nver1.3.0\n测试版\n由于WarmSnow催更过于勤劳,简化内容已经提前完成,具体请看更新公告\n";
    system("pause");
    cout<<"请输入游戏人数:\n";
    cin>>n;
    init();
    system("cls");
    for(int i=1; i<=100; i++)
    {
        cout<<"Loading......";
        cout<<i<<"%";
        Sleep(5);
        system("cls");
    }
    int ans;
    cout<<"加载完成!\n是否查看游戏规则介绍?是请按1,否请按0\n";
    cin>>ans;
    if(ans==1) cout<<"此功能正在开发中,预计将在2.0.0开发完毕\n";
    cout<<"游戏开始!";
    Sleep(100);
    int res=play(n);
    cout<<n<<"号玩家取得了胜利!";
    return 0;
}

  

王权 V1.1.18
https://www.luogu.com/user/232323
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#include<windows.h>
#include<conio.h>
#define cls system("cls")
#define iv inline void
#define set1 SetConsoleTextAttribute
#define set2 GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY
#define sred FOREGROUND_RED
#define sgreen FOREGROUND_GREEN
#define sblue FOREGROUND_BLUE
#define set set1(set2 | sred | sgreen | sblue)
using namespace std;
using namespace __gnu_pbds;
//宗教,民众,军队,财富! 
struct data{
    string a;//事件过程
    int a1,a2,a3,a4;//Y
    int b1,b2,b3,b4;//N
    string b,c;//b为Y得到技能名称,c为N得到技能名称 
}x[1005];
struct data2{
    int a,b;//起始年,驾崩年 
    string s;//名字 
};
struct data3{
    int a,b;//起始年,结束年
    string s;//我方名字
    int w;//是否胜利 
};
struct data_email{
    string a,b;//发送者、内容 
};
#define SIZe 17
int ra[SIZe*2+1];
int year=1,year2=1,qaq=0,qaq2=0,textspeed=3,Flag=0;
int auto_read=0,auto_file=0;
string version="V1.1.18";
data2 gq[1005];
data3 gq2[1005];
vector<string> banben;//可读版本列表 
vector<string> ach;//普通模式成就列表 
vector<string> skills_2nd;//普通模式技能列表 
vector<string> emails;//收到的邮件 
gp_hash_table<string,string> skills;//普通模式技能效果
gp_hash_table<string,bool> ach_judge;//成就完成判断 
gp_hash_table<string,string> ach_introduce;//成就介绍 
gp_hash_table<string,vector<string> > achs;//成就分类 
gp_hash_table<string,data_email> email_text;//根据标题为key储存发送者与内容
gp_hash_table<string,bool> email_judge;//根据标题为key储存是否已读
template <typename T>
inline string change(T a){stringstream ss;string s;ss.clear();ss.str("");ss<<a;ss>>s;return s;}
iv init()
{
    //可读版本 
    banben.push_back("V1.1.18");
    //普通&AI模式事件 
    x[1]=data{"大臣:国王,敌国的军队来攻打我们了。(Y:出军;N:没有动静)",0,-5,-10,-10,0,-15,0,0,"",""};
    x[2]=data{"传信人:我们的内部出现了内奸,散布虚假消息。(Y:解决;N:没有动静)",10,0,-5,0,-20,-10,0,0,"",""};
    x[3]=data{"大臣:在山下发现金矿。(Y:挖掘;N:没听见)",10,-10,-10,20,0,-10,0,0,"",""};
    x[4]=data{"大臣:我们可以下发民众调查,加善百姓生活。(Y:接受;N:不接受)",5,10,0,-10,0,-10,-5,5,"",""};
    x[5]=data{"军师:敌人可能要来进攻我们了,我们需要操练军队。(Y:接受;N:不接受)",5,-5,20,-10,0,0,0,0,"",""};
    x[6]=data{"传信人:民间出现了很多盗贼。我们最好解决?(Y:解决;N:没有动静)",0,20,-5,-10,0,-5,0,-5,"",""};
    x[7]=data{"大臣:建议造学校,普及知识。(Y:建造;N:没有动静)",10,10,0,-10,-5,0,-5,10,"",""};
    x[8]=data{"马戏团老板:我们能到您的城市演出吗?(Y:能;N:拒绝)",0,10,0,-20,0,-10,5,10,"",""};
    x[9]=data{"大臣:城市污染严重,可栽树否?(Y:栽树;N:没有动静)",-5,10,10,-10,0,-10,0,5,"",""};
    x[10]=data{"巫师:大人,我这儿有灵丹妙药。(Y:售卖;N:拒绝)",-5,10,0,-10,0,-5,-10,0,"",""};
    x[11]=data{"魔法师:国王,我能赐予您一种能力。(Y:接受;N:拒绝)",0,0,-15,0,0,0,0,0,"逃避",""};
    x[12]=data{"魔法师:我希望人间平安。(Y:接受;N:拒绝)",0,0,0,-25,0,0,0,0,"平安",""};
    x[13]=data{"魔法师:相反的魔法总是令人喜爱。(Y:认同;N:不认同)",-15,0,0,0,0,0,0,0,"倒置",""};
    x[14]=data{"大臣:我认为我们可以加进人才。(Y:同意;N:拒绝)",0,20,0,-10,0,-10,0,0,"",""};
    x[15]=data{"传信人:民间的传染病越加严重。(Y:解决;N:没有动静)",10,10,-10,-20,0,-20,-10,0,"",""};
    x[16]=data{"天文学家:我预测这几日天气状况不佳。(Y:认同;N:不认同)",0,10,-10,0,0,0,0,0,"",""};
    x[17]=data{"传信人:鼠疫导致民间人心惶惶。(Y:解决;N:没有动静)",0,20,0,-10,0,-15,-5,0,"",""};
    //普通&AI模式技能列表 
    skills_2nd.push_back("逃避");
    skills_2nd.push_back("平安");
    skills_2nd.push_back("倒置");
    //普通&AI模式技能介绍 
    skills["逃避"]="躲过这次选择,不接受也不拒绝";
    skills["平安"]="使任一属性回到50 (可选择)"; 
    skills["倒置"]="使做出选择后获得的增益倒置 (不包括获得、使用技能),直到下一次使用倒置为止";
    //成就列表 
    ach.push_back("初登王位");
    ach.push_back("多重加害");
    ach.push_back("百寿");
    ach.push_back("竞争者");
    ach.push_back("两败俱伤");
    ach.push_back("常年争执");
    ach.push_back("殊途同归");
    ach.push_back("保持同步");
    ach.push_back("名字问题");
    ach.push_back("隐藏地域");
    //成就介绍
    ach_introduce["初登王位"]="第一次开始普通模式";
    ach_introduce["多重加害"]="同时因为多项属性而结束游戏";
    ach_introduce["百寿"]="一个人物活到100岁";
    ach_introduce["竞争者"]="第一次开始A.I.对战";
    ach_introduce["两败俱伤"]="因为双方同时死亡而结束游戏";
    ach_introduce["常年争执"]="一个人物与A.I.连续对战30年";
    ach_introduce["殊途同归"]="在若干回合后双方的数据重回一样";
    ach_introduce["保持同步"]="连续5回合与A.I.选择一样";
    ach_introduce["名字问题"]="......你真的以为我会让你使用它?";
    ach_introduce["隐藏地域"]="你是怎么发现这儿的?"; 
    //......然而成就的展示是按获取方式分。
    achs["普通模式"].push_back("初登王位"); 
    achs["普通模式"].push_back("多重加害");
    achs["普通模式"].push_back("百寿");
    achs["A.I.对战"].push_back("竞争者");
    achs["A.I.对战"].push_back("两败俱伤");
    achs["A.I.对战"].push_back("常年争执");
    achs["A.I.对战"].push_back("殊途同归");
    achs["A.I.对战"].push_back("保持同步");
    achs["隐藏成就"].push_back("名字问题");
    achs["隐藏成就"].push_back("隐藏地域");
    //邮件内容
    email_text["游戏介绍-普通模式"]=data_email{"紫陰花",
    "在这个游戏中,你需要控制一名君王来应对每一年所发生的事件,作出相应的对答。\n每一次相应的对答可以选择Y或N,你的国家拥有四种属性,不同的对答会造成每个属性的相应加减。\n四种属性分别是:宗教,民众,军队,财富。\n每个属性的初始状态都为50点。通过选择会加减属性,当一个属性<=0或>=100时,游戏结束,愤怒的臣民会杀掉你。\n你还拥有一项技能,这需要你在游戏中获得。技能是一次性的,得到新的技能会覆盖原技能。有技能时可以按S(Skill)触发效果。\n你的游戏目标是,活得尽量久。\n"}; 
    email_text["游戏介绍-A.I.对战"]=data_email{"紫陰花",
    "在普通模式的基础上,你需要与一个A.I.对战,你与其面对相同的问题而做出选择,最后活下的人胜利。"}; 
    email_text["欢迎来到王权"]=data_email{"紫陰花",
    "感谢您游玩王权!\n游戏制作者:紫陰花\n游戏团队:https://www.luogu.com.cn/team/23723"};
    email_text["hide1"]=data_email{"???","你为什么会到这儿?"};
    email_text["hide2"]=data_email{"???","你不应该来到这儿。离开。"};
    email_text["Hide1"]=data_email{"","The author thinks that you are too YOUNG too SIMPLE."};
    email_text["hacker1"]=data_email{"","(铃铃铃......)"};
    email_text["hacker2"]=data_email{"","你在这了。"};
    email_text["hacker3"]=data_email{"","如果有人玩到这个页面,请麻烦告知作者。"};
    email_text["hacker4"]=data_email{"","但恐怕......你只是一个肮脏的黑客吧?"};
}
iv say(string say1,int say2);
iv rs(){for(int i=1;i<=SIZe;i++)ra[i]=i;for(int i=SIZe+1;i<=SIZe*2;i++)ra[i]=rand()%SIZe+1;random_shuffle(ra+1,ra+1+SIZe*2);}
iv di_box(string title,string s1,string s2);
iv diq(string s){di_box("","",s);}
iv hacker(){ifstream fin("WDGaster.txt");char c;int ci=0;fin>>ci;ci++;fin.close();
    ofstream fout("WDGaster.txt");fout<<ci;fout.close();if(ci>1){if(ci<=6)cls,diq("你已经来了 "+change(ci)+" 次了。"),c=getch();cls;if(ci==2) diq("还不知足吗?");if(ci==3) diq("你知道,你在尝试修改代码。");
        if(ci==4) diq("蠢蛋,代码都改不动。");if(ci==5) diq("如果你看到了这条消息,就代表你不是个 OIer。");if(ci==6) diq("你的耐心......可真让我吃惊啊。");if(ci>6) diq("你就没有更重要的事情去做吗?");c=getch();}
    else for(int i=1;i<=4;i++) say("hacker"+change(i),2);exit(0);}
iv print(string a){for(int i=0;i<a.size();i++){putchar(a[i]);Sleep(textspeed);}}
iv print2(string a,int b){for(int i=0;i<a.size();i++){putchar(a[i]);Sleep(b);}}
iv start();
iv game();
iv ai_game();
iv red(string u){set1(set2 | sred);print(u);set;}
iv blue(string u){set1(set2 | sblue);print(u);set;}
iv red2(string u,int w){set1(set2 | sred);print2(u,w);set;}
iv green(string u){set1(set2 | sgreen);print(u);set;}
iv yellow(string u){set1(set2 | sred | sgreen);print(u);set;}
iv cyan(string u){set1(set2 | sgreen | sblue);print(u);set;}
iv pink(string u){set1(set2 | sred | sblue);print(u);set;}
iv rainbow(string u){for(int i=0;i<u.size();i++){int rainbo=rand()%7*rand()%7+1;switch(rainbo){case 1:print(change(u[i]));break;case 2:red(change(u[i]));break;case 3:green(change(u[i]));break;case 4:blue(change(u[i]));break;case 5:yellow(change(u[i]));break;case 6:cyan(change(u[i]));break;case 7:pink(change(u[i]));break;}} }
iv achieve(string u)
{
    if(u=="初登王位")
    {
        pink("+------------------+\n");
        pink("|获得成就:初登王位|\n");
        pink("|第一次开始普通模式|\n");
        pink("+------------------+\n");
    }
    if(u=="多重加害")
    {
        pink("+--------------------------+\n");
        pink("|获得成就:多重加害        |\n");
        pink("|同时因为多项属性而结束游戏|\n");
        pink("+--------------------------+\n");
    }
    if(u=="百寿")
    {
        pink("+-----------------+\n");
        pink("|获得成就:百寿   |\n");
        pink("|一个人物活到100岁|\n");
        pink("+-----------------+\n");
    }
    if(u=="竞争者")
    {
        pink("+------------------+\n");
        pink("|获得成就:竞争者  |\n");
        pink("|第一次开始A.I.对战|\n");
        pink("+------------------+\n");
    }
    if(u=="两败俱伤")
    {
        pink("+--------------------------+\n");
        pink("|获得成就:两败俱伤        |\n");
        pink("|因为双方同时死亡而结束游戏|\n");
        pink("+--------------------------+\n");
    }
    if(u=="常年争执")
    {
        pink("+--------------------------+\n");
        pink("|获得成就:常年争执        |\n");
        pink("|一个人物与A.I.连续对战30年|\n");
        pink("+--------------------------+\n");
    }
    if(u=="殊途同归")
    {
        pink("+------------------------------+\n");
        pink("|获得成就:殊途同归            |\n");
        pink("|在若干回合后双方的数据重回一样|\n");
        pink("+------------------------------+\n");
    }
    if(u=="保持同步")
    {
        pink("+-----------------------+\n");
        pink("|获得成就:保持同步     |\n");
        pink("|连续5回合与A.I.选择一样|\n");
        pink("+-----------------------+\n");
    }
    ach_judge[u]=1;
}
int long_di_box=50;
iv di_box(string title,string s1,string s2) //dialog box
{
    int kkk=20;
    int c=0,maxnkkk=-1;
    for(int i=0;i<s2.size();i++)
    {
        if(s2[i]=='\n') c=0;
        else c++;
        maxnkkk=max(maxnkkk,c);
    }
    kkk=max(kkk,maxnkkk);
    print("+"+string(kkk,'-')+"+\n");
    if(title.size()!=0)
        print("|"+title+string(kkk-title.size(),' ')+"|\n");
    if(s1.size()!=0)
    {
        print("|");
        cyan(s1);
        print(":"+string(kkk-1-s1.size(),' ')+"|\n");    
    }
    int s2u=0,summ=0;
    for(int i=0;i<s2.size();i++)
    {
        if(summ==kkk)
            print("|\n"),summ=0,s2u=0;
        if(s2u==0)
            print("|"),s2u=1;
        if(s2[i]!='\n')
            putchar(s2[i]),summ++;
        else
            print(string(kkk-summ,' ')),summ=kkk;
    }
    print(string(kkk-summ,' '));
    print("|\n+"+string(kkk,'-')+"+\n");
}
iv say(string say1,int say2)
{
    char c;
    cls;
    if(say2==1)
        di_box("",email_text[say1].a,email_text[say1].b);
    else
        diq(email_text[say1].b);
    c=getch();
}
iv num(int a)
{
    if(a>=25 and a<=75) set1(set2 | sgreen);
    if((a<25 and a>0) or (a>75 and a<100)) set1(set2 | sred | sgreen);
    if(a<=0 or a>=100)    set1(set2 | sred);
    print(change(a));set;
}
inline int div_int(int a,int b){return b==0?0:a/b;}
iv cho(int a){if(a>0) green("增加");if(a<0) red("减少");if(a==0) print("");}
iv email() //邮件 
{
    cls;
    for(int i=emails.size()-1;i>=0;i--)
    {
        int &kkk=long_di_box;
        print("+"+string(kkk,'-')+"+\n");
        print("|信件"+change(i+1)+string(kkk-4-change(i+1).size(),' ')+"|\n");
        if(email_judge[emails[i]]==0)
        {
            print("|");
            red("未读");
            print(string(kkk-4,' ')+"|\n");
        }
        print("|发送者:");
        cyan(email_text[emails[i]].a);
        print(string(kkk-7-email_text[emails[i]].a.size(),' ')+"|\n");
        print("|标题:");
        yellow(emails[i]);
        print(string(kkk-5-emails[i].size(),' ')+"|\n");
        print("+"+string(kkk,'-')+"+\n");
    }
    cyan("输入信件编号阅读信件;输入0退出(需按回车)\n");
    int c;
    cin>>c;
    while(c<0 or c>emails.size()) cin>>c;
    if(c==0)
    {
        cls;
        start(); 
    }
    else
    {
        cls;
        di_box(emails[c-1],email_text[emails[c-1]].a,email_text[emails[c-1]].b);
        email_judge[emails[c-1]]=1;
        cyan("按1退出\n");
        char c=getch();
        while(c!='1') c=getch();
        cls;
        email();
    }
} 
iv file(int hi) //存档 
{
    /*
    version
    year year2 qaq qaq2 textspeed auto_read auto_file 
    gq[1].a gq[1].b gq[1].s
    ...
    gq[qaq].a gq[qaq].b gq[qaq].s
    gq2[1].a gq2[1].b gq2[1].s gq2[1].w
    ...
    gq2[qaq2].a gq2[qaq2].b gq2[qaq2].s gq2[qaq2].w
    emails.size()
    emails[0]
    ...
    emails[emails.size()-1]
    email_judge[0]
    ...
    email_judge[emails.size()-1]
    */
    char c='N';
    if(hi==0)
    {
        red("你确定要存档?将会覆盖原有存档(Y确定,N退出)\n");
        c=getch();
        while(c!='Y' and c!='N') c=getch();
    }
    if(c=='Y' or hi==1)
    {
        ofstream fout("reignsfile.txt");
        fout<<version<<endl;
        fout<<year<<' '<<year2<<' '<<qaq<<' '<<qaq2<<' '<<textspeed<<' '<<auto_read<<' '<<auto_file<<'\n';
        for(int i=1;i<=qaq;i++)
            fout<<gq[i].a<<' '<<gq[i].b<<' '<<gq[i].s<<'\n';
        for(int i=1;i<=qaq2;i++)
            fout<<gq2[i].a<<' '<<gq2[i].b<<' '<<gq2[i].s<<' '<<gq2[i].w<<'\n';
        fout<<endl<<emails.size()<<endl;
        for(int i=0;i<emails.size();i++)
            fout<<emails[i]<<' ';
        fout<<endl;
        for(int i=0;i<emails.size();i++)
            fout<<email_judge[emails[i]]<<' '; 
        fout<<endl;
        fout.close();
        
        ofstream fout2("reignsach.txt");
        for(int i=0;i<ach.size();i++)
            fout2<<ach_judge[ach[i]]<<' ';
        fout2.close();
        
        if(hi==0)
        {
            green("存档成功!");
            Sleep(2000);
        }
    }
    if(hi==0)
    {
        cls;
        start();
    }
}
iv readfile(int hi) //读档 
{
    char c='N';
    if(hi==0)
    {
        red("你确定要读档?将会覆盖原有存档(Y确定,N退出)\n");
        c=getch();
        while(c!='Y' and c!='N') c=getch();
    }
    if(c=='Y' or hi==1)
    {
        string guyutxdy;
        ifstream fin("reignsfile.txt");
        fin>>guyutxdy;//版本占位符 
        fin>>year>>year2>>qaq>>qaq2>>textspeed>>auto_read>>auto_file;
        for(int i=1;i<=qaq;i++)
            fin>>gq[i].a>>gq[i].b>>gq[i].s;
        for(int i=1;i<=qaq2;i++)
            fin>>gq2[i].a>>gq2[i].b>>gq2[i].s>>gq2[i].w;
        int kkkk;
        fin>>kkkk;
        emails.clear();
        for(int i=0;i<kkkk;i++)
        {
            string sr1;
            fin>>sr1;
            emails.push_back(sr1);
        }
        for(int i=0;i<kkkk;i++)
        {
            bool sr1;
            fin>>sr1;
            email_judge[emails[i]]=sr1;
        }
        fin.close();
        
        ifstream fin2("reignsach.txt");
        for(int i=0;i<ach.size();i++)
            fin2>>ach_judge[ach[i]];
        fin2.close();
        
        if(hi==0)
        {
            green("读档成功!");
            Sleep(2000);
        }
    }
    if(hi==1) Flag=1;
    else 
    {
        cls;
        start();
    }
}
iv statistics() //统计 
{
    yellow("普通模式:\n"); 
    if(qaq==0) cyan("尚未有人坐上王座\n\n");
    else
    {
        cyan("到目前为止,有 ");
        print(change(qaq));
        cyan(" 个君王\n");
        int maxn=-1,maxnn;
        for(int i=1;i<=qaq;i++)
        {
            print(change(gq[i].a));
            cyan(" 年至 ");
            print(change(gq[i].b));
            cyan(" 年,为君王 ");
            yellow(gq[i].s);
            putchar('\n');
            if(maxn<gq[i].b-gq[i].a+1)
                maxn=gq[i].b-gq[i].a+1,maxnn=i;
        }
        cyan("最长统治者为 ");
        yellow(gq[maxnn].s);
        cyan(" ,统治了 ");
        print(change(maxn));
        cyan(" 年\n\n");
    }
    yellow("A.I.对战:\n"); 
    if(qaq2==0) cyan("尚未有人开始争夺\n\n");
    else
    {
        cyan("到目前为止,有 ");
        print(change(qaq2));
        cyan(" 场争夺\n");
        int maxn=-1,maxnn;
        for(int i=1;i<=qaq2;i++)
        {
            print(change(gq2[i].a));
            cyan(" 年至 ");
            print(change(gq2[i].b));
            cyan(" 年,为君王 ");
            yellow(gq2[i].s);
            cyan(" 与对方争夺,结果为");
            if(gq2[i].w==0)
                red("失败\n");
            if(gq2[i].w==1)
                green("成功\n");
            if(gq2[i].w==2)
                yellow("平局\n");
            if(maxn<gq2[i].b-gq2[i].a+1)
                maxn=gq2[i].b-gq2[i].a+1,maxnn=i;
        }
        cyan("最长时间争夺者为 ");
        yellow(gq2[maxnn].s);
        cyan(" ,争夺了 ");
        print(change(maxn));
        cyan(" 年\n\n");
    }
    cyan("按1退出\n");
    char c=getch();
    while(c!='1') c=getch();
    cls;
    start(); 
}
iv journal() //更新日志 
{
    yellow("V1.0.0:");pink("基础游戏设施 (2019.11.29)\n");
    yellow("V1.0.1:");pink("增加更新日志 设置 存档 读档 (2019.11.30)\n");
    yellow("V1.0.2:");pink("增加2条新的事件 (2019.12.2)\n");
    yellow("V1.0.3:");pink("增加自动读档 游戏公告 (2019.12.4)\n");
    yellow("V1.0.4:");pink("增加自动存档 修正部分文本 (2019.12.5)\n");
    yellow("V1.0.5:");pink("增加彩色字体 修复自动存档 (2019.12.7)\n");
    yellow("V1.0.6:");pink("修改统计 (2019.12.7)\n");
    yellow("V1.0.7:");pink("增加1条新的事件 (2019.12.9)\n");
    yellow("V1.1.0:");pink("增加技能 成就(未完工) (2019.12.11)\n");
    yellow("V1.1.1:");pink("修改技能 平安 增加技能 倒置 修复成就 (2019.12.14)\n");
    yellow("V1.1.2:");pink("增加2条成就 (2019.12.14)\n");
    yellow("V1.1.3:");pink("增加模式沦陷战役 开启沦陷战役-童话门 (2020.1.1)\n");
    yellow("V1.1.4:");pink("开启沦陷战役-世界门 (2020.1.4)\n");
    yellow("V1.1.5:");pink("邮件系统(未完工) (2020.1.15)\n");
    yellow("V1.1.6:");pink("邮件系统(将近完工) (2020.1.17)\n");
    yellow("V1.1.7:");pink("开启沦陷战役-人心门 (2020.1.24)\n");
    yellow("V1.1.8:");pink("修改沦陷战役-人心门 (2020.1.25)\n");
    yellow("V1.1.9:");pink("削弱沦陷战役-人心门强度 增加彩蛋 (2020.1.26)\n");
    yellow("V1.1.10:");pink("削弱沦陷战役-人心门 沦陷战役-世界门强度 (2020.1.28)\n");
    yellow("V1.1.11:");pink("制作沦陷战役-我们门(未完工) WARNING!!!!!!!!!!!!!!! (2020.2.5)\n");
    yellow("V1.1.12:");pink("更新成就(是的,这个人一直在拖更) (2020.2.28)\n");
    yellow("V1.1.13:");pink("暂时关闭了沦陷战役的模式,而且这个模式可能会删除 (2020.4.24)\n");
    yellow("V1.1.14:");pink("再见,沦陷战役(开始制作A.I.对战) (2020.4.28)\n");
    yellow("V1.1.15:");pink("开启 A.I.对战 (2020.5.9)\n");
    yellow("V1.1.16:");pink("优化 A.I. 的判断(关于 倒置 考虑得更具体,当选择Y可获得技能时特别判断) (2020.5.19)\n");
    yellow("V1.1.17:");pink("增加2条成就,修复 A.I.对战 双方同时死亡的BUG(转化成了一个成就) (2020.5.22)\n");
    yellow("V1.1.18:");pink("增加2条成就 (2020.6.2)\n");
    cyan("\n按1退出\n");
    char c=getch();
    while(c!='1') c=getch();
    cls;
    start(); 
}
iv setting() //设置 
{
    cyan("1.文本速度\n");
    cyan("2.自动读档(打开exe文件时)\n");
    cyan("3.自动存档(游戏结束后)\n");
    cyan("4.退出\n");
    char c=getch();
    while(c<'1' or c>'4') c=getch();
    if(c=='1')
    {
        cyan("输入文本速度 (目前一个汉字为 ");
        cyan(change(textspeed));
        cyan(" ms)\n");
        scanf("%d",&textspeed);
        cls;
        setting();
    }
    if(c=='2')
    {
        cyan("是否自动读档? (打开exe文件时,1为是,0为否,目前为 ");
        cyan(change(auto_read));
        cyan(" )\n");
        scanf("%d",&auto_read);
        if(auto_read!=0 and auto_read!=1) auto_read=0;
        cls;
        setting();
    }
    if(c=='3')
    {
        cyan("是否自动存档? (一场游戏后,1为是,0为否,目前为 ");
        cyan(change(auto_file));
        cyan(" )\n");
        scanf("%d",&auto_file);
        if(auto_file!=0 and auto_file!=1) auto_file=0;
        cls;
        setting();
    }
    if(c=='4'){cls;start();} 
}
iv achievement_name_judge(string &qwq)
{
    if(ach_judge[qwq]==0) red(string(qwq.size(),'?'));
    else green(qwq);
}
iv achievement() //成就 
{
    cyan("成就名是全为?的,表示未完成;绿色表示已完成\n\n");
    int usize=achs["普通模式"].size();
    yellow("普通模式:\n");
    for(int i=0;i<usize;i++)
        green("> "),achievement_name_judge(achs["普通模式"][i]),print(":"),yellow(ach_introduce[achs["普通模式"][i]]),putchar('\n');
    putchar('\n');
    usize=achs["A.I.对战"].size();
    yellow("A.I.对战:\n");
    for(int i=0;i<usize;i++)
        green("> "),achievement_name_judge(achs["A.I.对战"][i]),print(":"),yellow(ach_introduce[achs["A.I.对战"][i]]),putchar('\n');
    putchar('\n');
    usize=achs["隐藏成就"].size();
    yellow("隐藏成就:\n");
    for(int i=0;i<usize;i++)
        green("> "),achievement_name_judge(achs["隐藏成就"][i]),print(":"),yellow(ach_introduce[achs["隐藏成就"][i]]),putchar('\n');
    cyan("\n按1退出\n");
    char c=getch();
    while(c!='1') c=getch();
    cls;
    start(); 
}
iv reigns_data() //游戏机制资料 
{
    cyan("技能:\n\n");
    for(int i=0;i<skills_2nd.size();i++)
        pink(skills_2nd[i]+":"+skills[skills_2nd[i]]+"\n");
    cyan("\n按1退出\n");
    char c=getch();
    while(c!='1') c=getch();
    cls;
    start(); 
}
iv choose_game() //选择游戏 
{
    green("1.普通模式\n");
    green("2.A.I.对战\n");
    green("3.返回\n");
    cyan("\n请选择游戏模式:\n");
    char c=getch();
    while(!(c=='1' or c=='2' or c=='3' or c=='\\')) c=getch();
    cls;
    if(c=='1') game();
    if(c=='2') ai_game();
    if(c=='\\')
    {
        ach_judge["隐藏地域"]=1;
        say("hide1",1);
        say("hide2",1);
        cls;
        start();
    }
    if(c=='3')
    {
        cls;
        start();
    }
}
iv save_or_read() //选择存读档: 
{
    green("1.存档\n");
    green("2.读档\n");
    green("3.返回\n");
    cyan("\n请选择:\n");
    char c=getch();
    while(!(c=='1' or c=='2' or c=='3')) c=getch();
    cls;
    if(c=='1') file(0);
    if(c=='2') readfile(0);
    if(c=='3')
    {
        cls;
        start();
    }
}
iv start() //主界面 
{
    pink("The Game:");yellow("Reigns");pink(" (王权)\n");
    pink("Version:");yellow(version);pink("\n");
    pink("The Author:");yellow("紫陰花");pink(" (洛谷用户名)\n\n");
    if(Flag==0)
    {
        pink("正在检查您是否自动读档...\n");
        ifstream fin("reignsfile.txt");
        string op;
        fin>>op>>auto_read>>auto_read>>auto_read>>auto_read>>auto_read>>auto_read;
        fin.close();
        if(auto_read==0)
        {
            red("您没有自动读档或没有本地保存文件\n\n");
            emails.push_back("欢迎来到王权");
            emails.push_back("游戏介绍-普通模式");
            emails.push_back("游戏介绍-A.I.对战");
        }
        else
        {
            ifstream fin("reignsfile.txt");
            fin>>op;
            fin.close();
            int fLag=0;
            for(int i=0;i<banben.size();i++)
                if(op==banben[i])
                {
                    fLag=1;
                    break;
                }
            if(fLag==1)
            {
                readfile(1);
                red("已为您读档\n\n");
            }
            else
            {
                red("您的保存文件版本不兼容\n\n");
                emails.push_back("欢迎来到王权");
                emails.push_back("游戏介绍-普通模式");
            }
        }
        Flag=1;
    }
    int unreadnum=0;
    for(int i=0;i<emails.size();i++)
        if(email_judge[emails[i]]==0)
            unreadnum++;
    pink("1.开始游戏\n");
    pink("2.邮件");
    if(unreadnum>0)
        red("("+change(unreadnum)+")");
    pink("\n");
    pink("3.统计\n");
    pink("4.更新日志\n");
    pink("5.游戏设置\n");
    pink("6.存读档\n");
    pink("7.成就\n");
    pink("8.游戏机制资料\n");
    pink("X.退出游戏\n");
    char c=getch();
    while((c<'1' or c>'8') and c!='X') c=getch();
    cls;
    if(c=='1') choose_game();
    if(c=='2') email();
    if(c=='3') statistics();
    if(c=='4') journal();
    if(c=='5') setting();
    if(c=='6') save_or_read();
    if(c=='7') achievement();
    if(c=='8') reigns_data();
    if(c=='X') exit(0);
}
inline int inversion(int judge,int number)
{
    if(judge==0) return number;
    else return 0-number;
}
iv game() //普通模式 
{
    string name;
    string skill="";
    int q=50,w=50,e=50,r=50;
    cyan("输入你的姓名(不含空格):");
    cin>>name;
    if(name=="紫陰花")
    {
        ach_judge["名字问题"]=1;
        say("Hide1",2);cls;start();
        return;
    }
    cls;
    int k=year,j=1,inver=0;
    char c;
    rs();
    if(k==1)
        achieve("初登王位");
    while(1)
    {
        if(year-k+1==100 and ach_judge["百寿"]==0)
            achieve("百寿");
        print("君王:");yellow(name);putchar('\n');
        print("统治期 第 ");red(change(year));print(" 年\n");
        print("宗教:");num(q);putchar(' ');
        print("民众:");num(w);putchar(' ');
        print("军队:");num(e);putchar(' ');
        print("财富:");num(r);putchar('\n');
        print("技能:");cyan(skill);putchar('\n');
        if(inver==1) red("处于倒置状态\n");
        putchar('\n');
        
        if(q<=0 or q>=100 or w<=0 or w>=100 or e<=0 or e>=100 or r<=0 or r>=100) //死亡 
        {
            red("对你感到不满的臣民们一拥而上,杀死了你\n");
            gq[qaq+1]={k,year,name};
            qaq++;
            int guyu=0;
            if(q<=0 or q>=100) guyu++;
            if(w<=0 or w>=100) guyu++;
            if(e<=0 or e>=100) guyu++;
            if(r<=0 or r>=100) guyu++;
            if(guyu>=2 and ach_judge["多重加害"]==0)
                achieve("多重加害");
            Sleep(3000);
            if(auto_file==1) file(1);
            cls;
            start();
            return;
        }
        
        print("事件:\n");
        int v=ra[j];
        print(x[v].a);putchar('\n');
        
        print("Y:\n宗教:");cho(inversion(inver,x[v].a1));
        print("\n民众:");cho(inversion(inver,x[v].a2));
        print("\n军队:");cho(inversion(inver,x[v].a3));
        print("\n财富:");cho(inversion(inver,x[v].a4));
        putchar('\n');
        if(x[v].b!="") print("可得技能:"),cyan(x[v].b),putchar('\n');
        
        print("N:\n宗教:");cho(inversion(inver,x[v].b1));
        print("\n民众:");cho(inversion(inver,x[v].b2));
        print("\n军队:");cho(inversion(inver,x[v].b3));
        print("\n财富:");cho(inversion(inver,x[v].b4));
        putchar('\n');
        if(x[v].c!="") print("可得技能:"),cyan(x[v].c),putchar('\n');
        
        if(skill!="") print("S:\n技能效果:\n"),cyan(skills[skill]);
        
        putchar('\n');
        
        c=getch(); 
        while(c!='Y' and c!='N' and ((c=='S' and skill=="") or c!='S')) c=getch();
        if(c=='Y'){q+=inversion(inver,x[v].a1);w+=inversion(inver,x[v].a2);e+=inversion(inver,x[v].a3);r+=inversion(inver,x[v].a4);if(x[v].b!="") skill=x[v].b;} 
        if(c=='N'){q+=inversion(inver,x[v].b1);w+=inversion(inver,x[v].b2);e+=inversion(inver,x[v].b3);r+=inversion(inver,x[v].b4);if(x[v].c!="") skill=x[v].c;}
        if(c=='S')
        {
            if(skill=="平安") 
            {
                cyan("选择宗教按1、民众按2、军队按3、财富按4\n");
                c=getch();
                while(c<'1' or c>'4') c=getch();
                if(c=='1') q=50;
                if(c=='2') w=50;
                if(c=='3') e=50;
                if(c=='4') r=50;
                year--,j--;    
            }
            if(skill=="倒置") inver=1-inver,year--,j--;
            skill="";
        }
        cls;
        year++;j++;
        if(j==SIZe*2+1)
            rs(),j=1;
    }
}
iv ai_game() //A.I.对战 
{
    string name;
    string skill="",skill2="";
    int q=50,w=50,e=50,r=50;
    int q2=50,w2=50,e2=50,r2=50;
    cyan("输入你的姓名(不含空格):");
    cin>>name;
    if(name=="紫陰花")
    {
        ach_judge["名字问题"]=1;
        say("Hide1",2);cls;start();
        return;
    }
    cls;
    int k=year2,j=1,inver1=0,inver2=0;
    bool sttg=0;//殊途同归 成就判断 
    int bctb=0;//保持同步 成就判断 
    char c;
    rs();
    if(k==1)
        achieve("竞争者");
    while(1)
    {
        int tb_i_choose=0;
        if(sttg==0 and not(q==q2 and w==w2 and e==e2 and r==r2)) sttg=1;
        else if(sttg==1 and q==q2 and w==w2 and e==e2 and r==r2)
            if(ach_judge["殊途同归"]==0)
                achieve("殊途同归");
        if(bctb==5 and ach_judge["保持同步"]==0)
                achieve("保持同步");
        if(year2-k+1==30 and ach_judge["常年争执"]==0)
            achieve("常年争执");
        int ai_back=0;
        print("我方君王:");yellow(name);putchar('\n');
        print("敌方君王:");red("A.I.\n");
        print("争夺期 第 ");red(change(year2));print(" 年\n");
        yellow("我方:");print("宗教:");num(q);print(" 民众:");num(w);print(" 军队:");num(e);print(" 财富:");num(r);putchar('\n');
        red("敌方:");print("宗教:");num(q2);print(" 民众:");num(w2);print(" 军队:");num(e2);print(" 财富:");num(r2);putchar('\n');
        yellow("我方技能:");cyan(skill);putchar('\n');
        red("敌方技能:");cyan(skill2);putchar('\n');
        if(inver1==1) red("我方处于倒置状态\n");
        if(inver2==1) red("敌方处于倒置状态\n");
        putchar('\n');
        
        bool die_1=(q<=0 or q>=100 or w<=0 or w>=100 or e<=0 or e>=100 or r<=0 or r>=100);
        bool die_2=(q2<=0 or q2>=100 or w2<=0 or w2>=100 or e2<=0 or e2>=100 or r2<=0 or r2>=100);
        
        if(die_1 and die_2)
        {
            red("双方君王同时被杀\n");
            red("同时死亡,游戏平局\n");
            achieve("两败俱伤");
            gq2[qaq2+1]={k,year2,name,2};
            qaq2++;
            Sleep(3000);
            if(auto_file==1) file(1);
            cls;
            start();
            return;
        }
        if(die_1) //我方死亡 
        {
            red("对你感到不满的臣民们一拥而上,杀死了你\n");
            red("您先死亡,游戏失败\n");
            gq2[qaq2+1]={k,year2,name,0};
            qaq2++;
            Sleep(3000);
            if(auto_file==1) file(1);
            cls;
            start();
            return;
        }
        if(die_2) //敌方死亡 
        {
            red("敌方的统治失败,君王被杀\n");
            red("敌方死亡,游戏胜利\n");
            gq2[qaq2+1]={k,year2,name,1};
            qaq2++;
            Sleep(3000);
            if(auto_file==1) file(1);
            cls;
            start();
            return;
        }
        
        print("事件:\n");
        int v=ra[j];
        print(x[v].a);putchar('\n');
        
        print("Y:\n宗教:");cho(inversion(inver1,x[v].a1));
        print("\n民众:");cho(inversion(inver1,x[v].a2));
        print("\n军队:");cho(inversion(inver1,x[v].a3));
        print("\n财富:");cho(inversion(inver1,x[v].a4));
        putchar('\n');
        if(x[v].b!="") print("可得技能:"),cyan(x[v].b),putchar('\n');
        
        print("N:\n宗教:");cho(inversion(inver1,x[v].b1));
        print("\n民众:");cho(inversion(inver1,x[v].b2));
        print("\n军队:");cho(inversion(inver1,x[v].b3));
        print("\n财富:");cho(inversion(inver1,x[v].b4));
        putchar('\n');
        if(x[v].c!="") print("可得技能:"),cyan(x[v].c),putchar('\n');
        
        if(skill!="") print("S:\n技能效果:\n"),cyan(skills[skill]);
        
        putchar('\n');
        
        c=getch(); 
        while(c!='Y' and c!='N' and ((c=='S' and skill=="") or c!='S')) c=getch();
        if(c=='Y'){tb_i_choose=1,q+=inversion(inver1,x[v].a1);w+=inversion(inver1,x[v].a2);e+=inversion(inver1,x[v].a3);r+=inversion(inver1,x[v].a4);if(x[v].b!="") skill=x[v].b;} 
        if(c=='N'){tb_i_choose=2,q+=inversion(inver1,x[v].b1);w+=inversion(inver1,x[v].b2);e+=inversion(inver1,x[v].b3);r+=inversion(inver1,x[v].b4);if(x[v].c!="") skill=x[v].c;}
        if(c=='S')
        {
            if(skill=="平安") 
            {
                cyan("选择宗教按1、民众按2、军队按3、财富按4\n");
                c=getch();
                while(c<'1' or c>'4') c=getch();
                if(c=='1') q=50;
                if(c=='2') w=50;
                if(c=='3') e=50;
                if(c=='4') r=50;
                year2--,j--,ai_back=1;    
            }
            if(skill=="倒置") inver1=1-inver1,year2--,j--,ai_back=1;
            skill="";
        }
        
        if(ai_back==0)
        {
            //A.I.判断部分
            int ai_a1=q2+inversion(inver2,x[v].a1),ai_b1=w2+inversion(inver2,x[v].a2),ai_c1=e2+inversion(inver2,x[v].a3),ai_d1=r2+inversion(inver2,x[v].a4);
            int ai_a2=q2+inversion(inver2,x[v].b1),ai_b2=w2+inversion(inver2,x[v].b2),ai_c2=e2+inversion(inver2,x[v].b3),ai_d2=r2+inversion(inver2,x[v].b4);
            int ai_max1=max(max(max(abs(ai_a1-50),abs(ai_b1-50)),abs(ai_c1-50)),abs(ai_d1-50));
            int ai_max2=max(max(max(abs(ai_a2-50),abs(ai_b2-50)),abs(ai_c2-50)),abs(ai_d2-50));
            int ai_o1=ai_a1+ai_b1+ai_c1+ai_d1,ai_o2=ai_a2+ai_b2+ai_c2+ai_d2;
            bool ai_s1=not(ai_a1<=0 or ai_a1>=100 or ai_b1<=0 or ai_b1>=100 or ai_c1<=0 or ai_c1>=100 or ai_d1<=0 or ai_d1>=100);
            bool ai_s2=not(ai_a2<=0 or ai_a2>=100 or ai_b2<=0 or ai_b2>=100 or ai_c2<=0 or ai_c2>=100 or ai_d2<=0 or ai_d2>=100);
            int choose;
            if(ai_s1 and ai_s2)
            {
                if(x[v].b!="")
                {
                    if(skill2!="") choose=2;
                    else
                    {
                        if(x[v].b=="逃避")
                            if(abs(abs(ai_c1-50)-abs(e2-50))<10) choose=1;
                            else choose=2;
                        if(x[v].b=="平安")
                            if(abs(abs(ai_d1-50)-abs(r2-50))<15) choose=1;
                            else choose=2;
                        if(x[v].b=="倒置")
                            if(abs(abs(ai_a1-50)-abs(q2-50))<10) choose=1;
                            else choose=2;
                    }
                }
                else
                {
                    if(ai_max1>ai_max2) choose=2;
                    if(ai_max1<ai_max2) choose=1;
                    if(ai_max1==ai_max2)
                    {
                        if(abs(ai_o1-200)>abs(ai_o2-200)) choose=2;
                         if(abs(ai_o1-200)<abs(ai_o2-200)) choose=1;
                        if(abs(ai_o1-200)==abs(ai_o2-200)) choose=rand()%2+1;
                    }    
                }
            }
            if(ai_s1 and not(ai_s2)) choose=1;
            if(not(ai_s1) and ai_s2) choose=2;
            if(not(ai_s1) and not(ai_s2))
            {
                if(skill2=="逃避") skill2="",choose=0;
                if(skill2=="倒置")
                {
                    inver2=1-inver2;
                    ai_a1=q2+inversion(inver2,x[v].a1),ai_b1=w2+inversion(inver2,x[v].a2),ai_c1=e2+inversion(inver2,x[v].a3),ai_d1=r2+inversion(inver2,x[v].a4);
                    ai_a2=q2+inversion(inver2,x[v].b1),ai_b2=w2+inversion(inver2,x[v].b2),ai_c2=e2+inversion(inver2,x[v].b3),ai_d2=r2+inversion(inver2,x[v].b4);
                    ai_max1=max(max(max(abs(ai_a1-50),abs(ai_b1-50)),abs(ai_c1-50)),abs(ai_d1-50));
                    ai_max2=max(max(max(abs(ai_a2-50),abs(ai_b2-50)),abs(ai_c2-50)),abs(ai_d2-50));
                    ai_o1=ai_a1+ai_b1+ai_c1+ai_d1,ai_o2=ai_a2+ai_b2+ai_c2+ai_d2;
                    ai_s1=not(ai_a1<=0 or ai_a1>=100 or ai_b1<=0 or ai_b1>=100 or ai_c1<=0 or ai_c1>=100 or ai_d1<=0 or ai_d1>=100);
                    ai_s2=not(ai_a2<=0 or ai_a2>=100 or ai_b2<=0 or ai_b2>=100 or ai_c2<=0 or ai_c2>=100 or ai_d2<=0 or ai_d2>=100);
                    if(ai_s1 and ai_s2)
                    {
                        if(ai_max1>ai_max2) choose=2;
                        if(ai_max1<ai_max2) choose=1;
                        if(ai_max1==ai_max2)
                        {
                            if(abs(ai_o1-200)>abs(ai_o2-200)) choose=2;
                             if(abs(ai_o1-200)<abs(ai_o2-200)) choose=1;
                            if(abs(ai_o1-200)==abs(ai_o2-200)) choose=rand()%2+1;
                        }    
                    }
                    if(ai_s1 and not(ai_s2)) choose=1;
                    if(not(ai_s1) and ai_s2) choose=2;
                    else choose=rand()%2+1;
                }
                else if(skill2=="平安")
                {
                    int ai_flag=0,ai_now1=1,ai_now2=1,ai_ch1,ai_ch2;
                    if(ai_a1<=0 or ai_a1>=100) ai_flag++,ai_ch1=1;
                    if(ai_b1<=0 or ai_b1>=100) ai_flag++,ai_ch1=2;
                    if(ai_c1<=0 or ai_c1>=100) ai_flag++,ai_ch1=3;
                    if(ai_d1<=0 or ai_d1>=100) ai_flag++,ai_ch1=4;
                    if(ai_flag>1) ai_now1=0;
                    ai_flag=0;
                    if(ai_a2<=0 or ai_a2>=100) ai_flag++,ai_ch2=1;
                    if(ai_b2<=0 or ai_b2>=100) ai_flag++,ai_ch2=2;
                    if(ai_c2<=0 or ai_c2>=100) ai_flag++,ai_ch2=3;
                    if(ai_d2<=0 or ai_d2>=100) ai_flag++,ai_ch2=4;
                    if(ai_flag>1) ai_now2=0;
                    if(ai_now1 and ai_now2) 
                    {
                        if(ai_max1>ai_max2) choose=2;
                        if(ai_max1<ai_max2) choose=1;
                        if(ai_max1==ai_max2)
                        {
                            if(abs(ai_o1-200)>abs(ai_o2-200)) choose=2;
                             if(abs(ai_o1-200)<abs(ai_o2-200)) choose=1;
                            if(abs(ai_o1-200)==abs(ai_o2-200)) choose=rand()%2+1;
                        }
                    }
                    if(ai_now1 and not(ai_now2))
                    {
                        choose=1;
                        if(ai_ch1==1) q2=50;
                        if(ai_ch1==2) w2=50;
                        if(ai_ch1==3) e2=50;
                        if(ai_ch1==4) r2=50;
                    }
                    if(not(ai_now1) and ai_now2)
                    {
                        choose=2;
                        if(ai_ch2==1) q2=50;
                        if(ai_ch2==2) w2=50;
                        if(ai_ch2==3) e2=50;
                        if(ai_ch2==4) r2=50;
                    }
                    else choose=rand()%2+1;
                }
                else choose=rand()%2+1;
            }
            //A.I.选择生效部分 
            if(choose==1){q2+=inversion(inver2,x[v].a1);w2+=inversion(inver2,x[v].a2);e2+=inversion(inver2,x[v].a3);r2+=inversion(inver2,x[v].a4);if(x[v].b!="") skill2=x[v].b;} 
            if(choose==2){q2+=inversion(inver2,x[v].b1);w2+=inversion(inver2,x[v].b2);e2+=inversion(inver2,x[v].b3);r2+=inversion(inver2,x[v].b4);if(x[v].c!="") skill2=x[v].c;}
            if(choose==tb_i_choose) bctb++;
            else bctb=0;
        }
        cls;
        year2++;j++;
        if(j==SIZe*2+1)
            rs(),j=1;
    }
}
int main()
{
    srand(time(NULL));
    init();
    start();
}
股票游戏
//转自:https://www.luogu.com.cn/paste/y5a46yjm
#include<bits/stdc++.h>
#include"windows.h"
using namespace std;
int r[11],cx[11],d,i,j,p,x,xx,xxx,rt,ret,stn,s,sd,sdn,k,tn,h,z,zx,wt,kkk,wek;
double money,c[11],n,b,bx,re,use,mb,dm,df,dx,cn,cun,nnn,tou;
bool bk,cj[11],hhh=1,ct=1;

void printn();

int main()
{
	
	printf("炒股票:(BY:Wkykw)\n");
	printf("你将进行一些操作来买卖股票\n");
	printf("你有一定的财富用于自由购买\n");
	printf("但当你的负债大于1000元时,你将破产\n");
	printf("请注意:即使不进行任何操作,每天仍会有不少于当前现金的千分之一的消耗\n");
	printf("注:-1为自选模式,0为无限模式\n");
	printf("\n请按回车键继续...");
	getchar(); 
	
	system("cls") ;
	printf("请输入你想要的难度(-1~6)");
	scanf("%d",&k);
	if(k<=6&&k>=-1)
	{
		switch(k)
		{
			
			case -1:
				printf("\n你期望的现金?") ;
				scanf("%lf",&money);
				printf("\n你期望的目标?") ;
				scanf("%lf",&mb);
				printf("\n你期望的日期?") ;
				scanf("%d",&tn);
				k=4;		
				break;
				
			case 0:
				money=1000000;
				mb=9999999.99;
				tn=9999999;
				break;	
							 
			case 1:
				money=10000;
				mb=1000;
				tn=1000;
				break;
				
			case 2:
				money=20000;
				mb=5000;
				tn=100;
				break;
				
			case 3:
				money=30000;
				mb=15000;
				tn=90;
				break;
				
			case 4:
				money=50000;
				mb=30000;
				tn=80;
				break;
				
			case 5:
				money=100000;
				mb=100000;
				tn=70;
				break;
				
			case 6:
				money=300000;
				mb=700000;
				tn=60;
				break;
				
		}
		if(k==0)
		{
			k=7;
		}
	}
	else
	{
		return 0;
	}
	kkk=k;
	nnn=money;
	
	for(i=1;i<=k+2;i++)c[i]=i*100.00;
	
	printf("\n你需要在%d天内赚%.2lf元\n",tn,mb);
	printf("你的初始资金为%.2lf元\n",money);
	printf("祝君游戏愉快。\n");
	printf("\n请按回车键继续...");
	getchar();
	getchar(); 
	mb+=money;
	system("cls") ;
	system("color 7E");
	
	
		/* START */ 
		 
	do
	{	
	if(hhh) 
		d++;
	system("cls");
	printf("指令:0=过,1=买,2=卖,3=借,4=还,5=存,6=取");
	if(!hhh)printf(",666=正常模式");
	if(k==7)printf(",7=GAME OVER");
	printf("\nDay %d:\n",d);	
	srand(clock());
	 wt=rand()%600;
	 if(wt==0)
	 {
	 	printf("系统缺钱,向你借了%.2lf元\n",money/3);
	 	money/=1.5;
	 }
	 if(wt>590)
	 {
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		printf("    你遭受了偷窃!\n");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_GREEN|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		tou=money*(k+2)/10;
		money-=tou;
	 }
	 if(tou&&wt<400&&wt>380)
	 {
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		printf("   你的财富得以追回!\n");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_GREEN|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		money+=tou; 
	 }

	if(d>=3)
	if(stn)
	{
		srand((int)time(0)),s=rand()%(k/2+1);
		if(s&&hhh) 
		{
			sd++;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			printf("     金融危机第%d天\n",sd);
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_GREEN|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			sdn=rand()%30+10;
		}
		else 
		  sd=0,sdn=0,stn=0;
	}
	else
	{
		srand((int)time(0));
		s=rand()%10;
		if(!s&&hhh)	
		{
			sd=1;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			printf("     金融危机!\n");
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			sdn=20;
			stn=1;
		}
	}
	
	if(d>1&&hhh)
	{
		srand((int)time(0));
		use=rand()%50+sdn+money/1000;
		money-=use;
		df+=use;
	}
	
	printf("当前资产:%.2lf\n",money);
	
	if(k!=7) 
	{
		printf("我的目标:%.2lf\n",mb);
		printf("还剩%d天\n",tn-d+1);
	}
	
	dx=dm-df;
	if(dx>0)
	{
		printf("昨日净赚:%.2lf\n",dx);
	}
	else 
	printf("昨日净亏:%.2lf\n",-dx);
	
	re=re*1.7;
	cun*=1.005;
	
	printf("今日还款额度:%.2lf\n",re);
	printf("当前借款:%.2lf\n",bx);
	printf("当前存款:%.2lf\n",cun);
	
	if(d==ret-1)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		printf("明天你必须还钱!\n");
	} 
	if(d==ret&&hhh) 
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		printf("现在你必须还钱!\n");
		money-=b*re;
		ret=0;
		bk=0;
		re=0;
		df+=n;
	}
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
	BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
	
	if(money<-1000&&hhh) break;
		printf("  股市情况:  股价(元/股) 当前持有量  增/降百分点\n");
			for(i=1;i<=k+2;i++) 
			{
				printf("  ");
				x=rand()% (120-k*10);
				if(c[i]<10.00)
				{
					h+=2;
					x+=5;
					if(c[i]<1.00)
					{
						h+=2;
						x+=10;
						if(c[i]<0.1)
						{
							h+=2;
							x+=25;
						}
					}
				}
				r[i]=x-25-min((sdn/2),50)+h;
				z+=r[i];
				zx+=r[i];
				c[i]*=r[i]*0.01+1;

				if(z<-240||zx<-80)
				{
					h+=1;
				}
				else
				{
					if((z>320||zx>100)&&hhh)
					{
						h-=1;
					}
				}

				srand(clock());
				_sleep(x+15);
				
				if(i%2==0)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
					FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY|
					BACKGROUND_BLUE);					
				}
				else
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
					FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY|
					BACKGROUND_INTENSITY|BACKGROUND_BLUE);
				}
				printf(" 公司%d",i);
				printf("%18.6f%12d   ",c[i],cx[i]);
				if(r[i]>=0)
				{
					
					if(i%2==0)
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_GREEN|FOREGROUND_INTENSITY|
						BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);
					}
					else
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_GREEN|FOREGROUND_INTENSITY|
						BACKGROUND_INTENSITY|BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);						
					}

				}
				else
				{
					if(i%2==0)
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_RED|FOREGROUND_INTENSITY|
						BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);
					}
					else
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_RED|FOREGROUND_INTENSITY|
						BACKGROUND_INTENSITY|BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);						
					}

				}
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
				BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			}
			zx=0;
		printf("********************************************************************************");
			
			
			while(1)
			{
				printf("\n接下来你要做什么?\n");
				scanf("%d",&x);
			if(x==0)
			{
				system("color F0");
				_sleep(100);
				system("color 7E");
				break;
			}
			if((x>0&&x<7)||x==666||(x==8&&k==7))	
				switch(x)
				{
					case 1:
						printf("买那个?\n");
						scanf("%d",&xx);
						printf("买多少?\n");
						scanf("%d",&xxx);
						n=c[xx]*xxx;
						if(xx>0&&xx<k+3&&xxx>0)
							if(money>=n)
							{
								printf("交易成功!\n");
								money-=n;
								cx[xx]+=xxx;
								df+=n;
							}
							else
							{
								printf("你买不起!\n");
							}
						else
						{
							printf("无效操作\n");
						}
						break;
											
					case 2:
						printf("卖那个?\n");
						scanf("%d",&xx);
						printf("卖多少?\n");
						scanf("%d",&xxx);
						n=c[xx]*xxx;
						if(xx>0&&xx<k+3)
						{
							if(cx[xx]>=xxx)
							{
								printf("交易成功!\n");
								money+=n;
								if(hhh)
								cx[xx]-=xxx;
								dm+=n;
							}
							else
							{
								printf("股票不足!\n");
								break; 								
							}
						}
						else
						{
							printf("无效操作\n");
						}
						break;
						
					case 3:
						if(!bk)
						{
							printf("借多少?\n");
							scanf("%lf",&bx);
							if(bx<=money)
							{
								if(bx<=0)
								{
									printf("无效操作\n");
									break;
								}
								money+=bx;
								b=bx;
								ret=d+14;
								if(hhh) 
								bk=1,re=0.01;
								if(hhh)
								printf("交易成功!两周内你必须还钱!\n");
							}
							else 
								printf("你还不能借这么多钱!\n");
						}
						else 
							printf("你现在不能借钱!\n");
						break;
						
					case 4:
						if(b*re>money+1000) 
						{
							printf("你无力还钱!\n");
							break; 
						}
						if(b==0) 
						{
							printf("你无需还钱!\n");
							break;
						}
						money-=b*re;
						ret=0;
						re=0;
						bk=0;
						df+=n;
						printf("还钱成功!\n");
						break;
						
					case 5:
						printf("存多少?\n");
						scanf("%lf",&cn);
						if(cn<=0) 
						{
							printf("无效操作\n");
							break;
						}
						if(money>=cn)
						{
							cun+=cn;
							money-=cn;
							printf("存款成功!\n");
							break; 
						}
						else
						{
							printf("你没有这么多钱!\n");
							break; 
						}
						
					case 6:
						if(cun==0||hhh==0)
						{
							printf("你没有存款!\n");
							break; 
						}
						else
						{
							money+=cun; 
							cun=0;
							printf("取款成功!\n");
							break; 
						}
					
					case 7:
						ct=0;
						break;
					
					case 666:
						if(hhh)
						{
							printf("你是否进入无敌模式?\n是=1\n");
							scanf("%d",&xx);
							if(xx==1){
								system("color 02");
								_sleep(300);
								printn();
								_sleep(300);
								system("color 02");
								_sleep(300);
								printn();
								_sleep(300);
								printf("Nice\n");
								k=7;
								money+=1000000;
								for(i=1;i<=k+2;i++)
								{
									cx[i]=99999;
									h=1000;
									hhh=0;
								}
							}
						}
						else
						{
							printf("你是否退出无敌模式?\n是=1\n");
							scanf("%d",&xx);
							if(xx==1){
								system("color 02");
								_sleep(300);
								printn();
								_sleep(300);
								system("color 02");
								_sleep(300);
								printn();
								_sleep(300);
								printf("Well\n");
								k=kkk;
								money+=1000000;
									h=-10;
									hhh=1;
							}
						}
					break;
				}
			else
				printf("无效操作\n");
			getchar();
			getchar();
			printn();
			}
		df=0,dm=0;
		/*
		if(d%7==0) 
		{
			system("cls");
			wek=d/7;
			printf("这是第%d周\n",wek);
			printf("是否资助?(是1否0)\n",wek);
			scanf("%d",&x) ;
			if(x==1)
			{
				printf("资助哪个?\n");
				scanf("%d",&x) ;
				while(x<0&&x>k+3)
				{
					printf("无效操作"); 
					scanf("%d",&x) ;		
				 } 
				
			}
		}*/
		
	}
	while(money>-1000&&((money-bx<mb&&d<tn)||(k==7)&&ct));
	
	
		/* GAME OVER */
	
	system("color F0"); 
	 if(money>=mb) 
	 {
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_RED|FOREGROUND_INTENSITY|
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY);
		 printf("************************************YOU WIN!************************************\n");
		  printf("你在%d天内用%.2f元赚取了%.2f元",d,nnn,money-nnn);
	 } 
	 else 
	 {
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY);


	 	 printf("***********************************YOU LOSE!************************************\n");

	 
        if(money<-1000)
	 	{
	 		printf("你破产了!\n");
		 }
         printf("你的最终资金:%.2f",money);
    }
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY);
	
	 getchar() ;
} 

void printn()
{
	system("cls") ;
	system("color 7E");	
	printf("指令:0=过,1=买,2=卖,3=借,4=还,5=存,6=取");
	if(!hhh)printf(",666=正常模式");
	if(k==7)printf(",7=GAME OVER");
	printf("\nDay %d:\n",d);
	if(d>=3)
	if(stn)
	{
		if(s&&hhh) 
		{
			sd++;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			printf("     金融危机第%d天\n",sd);
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|FOREGROUND_GREEN|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		}
	}
	else
	{
		if(!s&&hhh)	
		{
			sd=1;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			printf("     金融危机!\n");
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
			FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
			BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
		}
	}
	printf("当前资产:%.2lf\n",money);
	
	if(k!=7) 
	{
		printf("我的目标:%.2lf\n",mb);
		printf("还剩%d天\n",tn-d+1);
	}
	if(dx>0)
		printf("昨日净赚:%.2lf\n",dx);
	else 
		printf("昨日净亏:%.2lf\n",-dx);
	
	printf("今日还款额度:%.2lf\n",re);
	printf("当前借款:%.2lf\n",bx);
	printf("当前存款:%.2lf\n",cun);
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
	BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
	
		printf("  股市情况:   股价(元/股) 当前持有量  增/降百分点\n");
			for(i=1;i<=k+2;i++) 
			{
				printf("  ");
				if(i%2==0)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
					FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY|
					BACKGROUND_BLUE);					
				}
				else
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
					FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY|
					BACKGROUND_INTENSITY|BACKGROUND_BLUE);
				}
				printf(" 公司%d",i);
				printf("%18.6f%12d   ",c[i],cx[i]);
				if(r[i]>=0)
				{
					
					if(i%2==0)
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_GREEN|FOREGROUND_INTENSITY|
						BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);
					}
					else
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_GREEN|FOREGROUND_INTENSITY|
						BACKGROUND_INTENSITY|BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);						
					}

				}
				else
				{
					if(i%2==0)
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_RED|FOREGROUND_INTENSITY|
						BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);
					}
					else
					{
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
						FOREGROUND_RED|FOREGROUND_INTENSITY|
						BACKGROUND_INTENSITY|BACKGROUND_BLUE);
						printf("%7d%  \n",r[i]);						
					}

				}
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY|
				BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);
			}
			zx=0;
		printf("********************************************************************************");

}

  

posted on 2026-01-02 17:45  Green_wang  阅读(0)  评论(0)    收藏  举报