WilliamWu2010 2024-02-24 16:44 采纳率: 100%
浏览 6
已结题

用srand(time())实现的c++干瞪眼程序出现了点问题


#include<bits/stdc++.h>
#include<windows.h>
#include<sstream>
using namespace std;

/*       定义变量         */ 

string cards[55];//牌组 
int washCard_1;// 洗牌变量1 
int washCard_2;// 洗牌变量2
string TempCard;//临时牌变量,用于洗牌做替换时临时存储 
string MyCard[6];//玩家的牌 
string AI1Card[6];//AI1的牌 
string AI2Card[6];//AI2的牌 
string Master="Me";//庄家
int choice=-1;//开始界面选项 
int choice_in_game_num;//转换为数字的游戏中出牌选项 
string Cards_Be_Chosen[6];//被选中的牌
int Cards_Be_Chosen_Num;//在循环中用于计数 
string Last_Cards[6]={"None"};//上家出的牌,用于比较
int New_Card=16;//摸牌 
string AI1_push[6];//AI打的牌,下一个同上, 
string AI2_push[6];
int passtime=0;//不出的次数 
bool pass_or_not;//是否不出 
/* 理牌函数 */
/* 摸牌 */

void New_Card_Void(string Card[]){
    Card[1]=cards[New_Card];
    New_Card++;
};

void range_cards(){
    auto cmp = [](const string &a, const string &b) {
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = 0; rank["大王"] = 0; rank["广告"] = 0;
        return rank[a] < rank[b];
    };// 对牌进行排序
    sort(MyCard, MyCard+6, cmp);
    sort(AI1Card, AI1Card+6, cmp);
    sort(AI2Card, AI2Card+6, cmp);
};

/* 单张牌是否符合逻辑函数 */

bool SingleCardIsValid(const string &OthersCard, const string &OnesCard,int &passtime){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;
        if(rank[OnesCard]-rank[OthersCard]==1)    return 1;
        else if(rank[OnesCard]==-1) return 0; 
        else if(OnesCard=="2"&&OthersCard!="2") return 1;
        else if(passtime>=2) return 1;
        else if(OthersCard=="None") return 1;
        else return 0;
};

/* 对子是否符合逻辑 */

bool DoubleCardsIsValid(const string &OthersCard1,const string &OthersCard2,const string &OnesCard1,const string &OnesCard2,int &passtime){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;
        if(OnesCard1!=OnesCard2) return 0;
        else{
            if(passtime>=2) return 1;
            else if(OthersCard2=="") return 0;
            else if(OnesCard1=="2"&&OthersCard1!="2") return 1;
            else if(rank[OnesCard1]-1==rank[OthersCard1]) return 1;
            else return 0;
        }
};
/* AI出牌 */

void AI1_Push_Cards(){//AI1逻辑(写的有点不耐烦了) 
    if(passtime==2){
             New_Card_Void(AI1Card);
             passtime=(rand()%2)+1;
    }
    AI1_push[0]="";AI1_push[1]="";AI1_push[2]="";AI1_push[3]="";AI1_push[4]="";AI1_push[5]="";
    if(Cards_Be_Chosen_Num==1){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;rank[""] = -100;
        if(passtime==2){
            for(int i=0;i<=5;i++)
            if(AI1Card[i]!=""&&AI1Card[i]!="小王"&&AI1Card[i]!="大王"&&AI1Card[i]!="广告"){
            passtime=0;
            AI1_push[0]=AI1Card[i];
            AI1Card[i]="";
            Last_Cards[0]=AI1_push[0];
            range_cards();
            return;
            }
        }
        else{
    for(int i=0;i<6;i++){ 
        if(rank[AI1Card[i]]-rank[Last_Cards[0]]==1||(AI1Card[i]=="2"&&Last_Cards[0]!="2")){
        passtime=0;
        AI1_push[0]=AI1Card[i];
        AI1Card[i]="";
        Last_Cards[0]=AI1_push[0];
        range_cards();
        return;
        }
    }
    AI1_push[0]="不出";
    passtime++;
    return;
}
    }
    else if(Cards_Be_Chosen_Num==2){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;rank[""] = -100;
        if(passtime==2){
        for(int i=0;i<=5;i++)
        for(int j=0;j<=5;j++){
        if(i==j)continue;
        else if(AI1Card[i]==AI1Card[j]){
            passtime=0;
            AI1_push[0]=AI1Card[i];
            AI1_push[1]=AI1Card[j];
            AI1Card[i]="";AI1Card[j]="";
            Last_Cards[0]=AI1_push[0];Last_Cards[1]=AI1_push[1];
            range_cards();
            return;
        }    
        }
        Cards_Be_Chosen_Num=1;
        AI1_Push_Cards();
        }
        else{
        for(int i=0;i<6;i++){ 
        if(rank[AI1Card[i]]-rank[Last_Cards[0]]==1||AI1Card[i]=="2"&&Last_Cards[0]!="2"){
        for(int j=0;j<=5;j++){
            if(AI1Card[i]==AI1Card[j]){
            passtime=0;
            AI1_push[0]=AI1Card[i];
            AI1_push[1]=AI1Card[j];
            AI1Card[i]="";AI1Card[j]="";
            Last_Cards[0]=AI1_push[0];Last_Cards[1]=AI1_push[1];
            range_cards();
            }
        return;
        }

        }
    }
        }
    AI1_push[0]="不出";
    passtime++;
    }
};

void AI2_Push_Cards(){//AI1逻辑(写的有点不耐烦了) 
    if(passtime==2){
             New_Card_Void(AI2Card);
             passtime=(rand()%2)+1;
    }
    AI2_push[0]="";AI2_push[1]="";AI2_push[2]="";AI2_push[3]="";AI2_push[4]="";AI2_push[5]="";
    if(Cards_Be_Chosen_Num==1){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;rank[""] = -100;
        if(passtime==2){
            for(int i=0;i<=5;i++)
            if(AI2Card[i]!=""&&AI2Card[i]!="小王"&&AI2Card[i]!="大王"&&AI2Card[i]!="广告"){
            passtime=0;
            AI2_push[0]=AI2Card[i];
            AI2Card[i]="";
            Last_Cards[0]=AI2_push[0];
            range_cards();
            return;
            }
        }
        else{
    for(int i=0;i<6;i++){ 
        if(rank[AI2Card[i]]-rank[Last_Cards[0]]==1||(AI2Card[i]=="2"&&Last_Cards[0]!="2")){
        passtime=0;
        AI2_push[0]=AI2Card[i];
        AI2Card[i]="";
        Last_Cards[0]=AI2_push[0];
        range_cards();
        return;
        }
    }
    AI2_push[0]="不出";
    passtime++;
    return;
}
    }
    else if(Cards_Be_Chosen_Num==2){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4; 
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8; 
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12; 
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;rank[""] = -100;
        if(passtime==2){
        for(int i=0;i<=5;i++)
        for(int j=0;j<=5;j++){
        if(i==j)continue;
        else if(AI2Card[i]==AI2Card[j]){
            passtime=0;
            AI2_push[0]=AI2Card[i];
            AI2_push[1]=AI2Card[j];
            AI2Card[i]="";AI2Card[j]="";
            Last_Cards[0]=AI2_push[0];Last_Cards[1]=AI2_push[1];
            range_cards();
            return;
        }    
        }

        }
        else{
        for(int i=0;i<6;i++){ 
        if(rank[AI2Card[i]]-rank[Last_Cards[0]]==1||AI2Card[i]=="2"&&Last_Cards[0]!="2"){
        for(int j=0;j<=5;j++){
            if(AI2Card[i]==AI2Card[j]){
            passtime=0;
            AI2_push[0]=AI2Card[i];
            AI2_push[1]=AI2Card[j];
            AI2Card[i]="";AI2Card[j]="";
            Last_Cards[0]=AI2_push[0];Last_Cards[1]=AI2_push[1];
            range_cards();
            }
        return;
        }

        }
    }
        }
    AI2_push[0]="不出";
    passtime++;
    }
};

/* 更新手牌 */

void Player_Cards_Update(string MyCard[]){
    // 从玩家手牌中删除用户选中的牌
    string NewHand[6];
    int NewHandSize = 0;
    bool removed[6] = {false};
    for (int i = 0; i < 6; i++) {
        bool chosen = false;
        for (int j = 0; j < Cards_Be_Chosen_Num; j++) {//判断牌是否被选中,并标记 
            if (MyCard[i] == Cards_Be_Chosen[j] && !removed[j]) {
                chosen = true;
                removed[j] = true;
            }
        }
        if (!chosen) {//删除 
            NewHand[NewHandSize] = MyCard[i];
            NewHandSize++;
        }
        else{
            NewHand[NewHandSize] = "";
            NewHandSize++;
        }
    }

    // 更新玩家手牌
    for (int i = 0; i < NewHandSize; i++) {
        MyCard[i] = NewHand[i];
    }
};

void startGame(){
    /*        洗牌         */
    for(int j=0;j<=5;j++){
        MyCard[j]="";
    }
    for(int j=0;j<=5;j++){
        AI1Card[j]="";
    }
    for(int j=0;j<=5;j++){
        AI2Card[j]="";
    }
    
    
    srand(time(0));//将时间设为随机种子 
    for(int i=1;i<=rand();i++){
        int washCard_1=rand()%55;//将其取0-54的随机数 
        int washCard_2=rand()%55;
        if(washCard_1==washCard_2)continue;//两者相等洗牌相当于没洗 
        else{
           TempCard=cards[washCard_1];
           cards[washCard_1]=cards[washCard_2];
           cards[washCard_2]=TempCard;
           //随机选两张牌进行互换,重复该操作实现洗牌 
        }
        } 
    
    /*测试洗牌是否正确 
    for(int i=0;i<=54;i++)
    cout<<"第"<<i<<"张牌:"<<cards[i]<<endl;
    return 0;*/
    
    /*     发牌      */
    
    if(Master=="Me"){
        MyCard[0]=cards[0];
        AI1Card[0]=cards[1];
        AI2Card[0]=cards[2];
        MyCard[1]=cards[3];
        AI1Card[1]=cards[4];
        AI2Card[1]=cards[5];
        MyCard[2]=cards[6];
        AI1Card[2]=cards[7];
        AI2Card[2]=cards[8];
        MyCard[3]=cards[9];
        AI1Card[3]=cards[10];
        AI2Card[3]=cards[11];
        MyCard[4]=cards[12];
        AI1Card[4]=cards[13];
        AI2Card[4]=cards[14];
        MyCard[5]=cards[15];
    }
    
    if(Master=="AI1"){
        AI1Card[0]=cards[0];
        AI2Card[0]=cards[1];
        MyCard[0]=cards[2];
        AI1Card[1]=cards[3];
        AI2Card[1]=cards[4];
        MyCard[1]=cards[5];
        AI1Card[2]=cards[6];
        AI2Card[2]=cards[7];
        MyCard[2]=cards[8];
        AI1Card[3]=cards[9];
        AI2Card[3]=cards[10];
        MyCard[3]=cards[11];
        AI1Card[4]=cards[12];
        AI2Card[4]=cards[13];
        MyCard[4]=cards[14];
        AI1Card[5]=cards[15];
    }
    
    if(Master=="AI2"){
        AI2Card[0]=cards[0];
        MyCard[0]=cards[1];
        AI1Card[0]=cards[2];
        AI2Card[1]=cards[3];
        MyCard[1]=cards[4];
        AI1Card[1]=cards[5];
        AI2Card[2]=cards[6];
        MyCard[2]=cards[7];
        AI1Card[2]=cards[8];
        AI2Card[3]=cards[9];
        MyCard[3]=cards[10];
        AI1Card[3]=cards[11];
        AI2Card[4]=cards[12];
        MyCard[4]=cards[13];
        AI1Card[4]=cards[14];
        AI2Card[5]=cards[15];
    }
    /*测试发牌是否正确 
    cout<<"我的牌:"<<endl;
    for(int i=0;i<=5;i++)
    cout<<"第"<<i<<"张:"<<MyCard[i]<<endl;
    
    cout<<"AI1的牌:"<<endl;
    for(int i=0;i<=5;i++)
    cout<<"第"<<i<<"张:"<<AI1Card[i]<<endl;
    
    cout<<"AI2的牌:"<<endl;
    for(int i=0;i<=5;i++)
    cout<<"第"<<i<<"张:"<<AI2Card[i]<<endl;
    Sleep(10000);*/
    
    /*      排序           */
    range_cards();

    /*测试排序后的牌是否正常 
    cout << "我的牌:" << endl;
    for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << MyCard[i] << endl;
    }

    cout << "AI1的牌:" << endl;
    for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << AI1Card[i] << endl;
    }

    cout << "AI2的牌:" << endl;
    for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << AI2Card[i] << endl;
    }
    Sleep(10000);*/
}

int main(){
    
    /*      创建牌组       */
    
    cards[0]="3";
    cards[1]="3";
    cards[2]="3";
    cards[3]="3";
    cards[4]="4";
    cards[5]="4";
    cards[6]="4";
    cards[7]="4";
    cards[8]="5";
    cards[9]="5";
    cards[10]="5";
    cards[11]="5";
    cards[12]="6";
    cards[13]="6";
    cards[14]="6";
    cards[15]="6";
    cards[16]="7";
    cards[17]="7";
    cards[18]="7";
    cards[19]="7";
    cards[20]="8";
    cards[21]="8";
    cards[22]="8";
    cards[23]="8";
    cards[24]="9";
    cards[25]="9";
    cards[26]="9";
    cards[27]="9";
    cards[28]="10";
    cards[29]="10";
    cards[30]="10";
    cards[31]="10";
    cards[32]="J";
    cards[33]="J";
    cards[34]="J";
    cards[35]="J";
    cards[36]="Q";
    cards[37]="Q";
    cards[38]="Q";
    cards[39]="Q";
    cards[40]="K";
    cards[41]="K";
    cards[42]="K";
    cards[43]="K";
    cards[44]="A";
    cards[45]="A";
    cards[46]="A";
    cards[47]="A";
    cards[48]="2";
    cards[49]="2";
    cards[50]="2";
    cards[51]="2";
    cards[52]="小王";
    cards[53]="大王";
    cards[54]="广告";

    /*     开始逻辑        */
    
    while(1){
    startGame();
    system("color 03");//设置颜色 
    system("cls");
    cout<<"_______________________________________________________"<<endl; //开始界面 
    cout<<"|                    干瞪眼游戏                       |"<<endl; 
    cout<<"-------------------------------------------------------"<<endl;     
    cout<<"|                     更新日志                        |"<<endl; 
    cout<<"| 1.现在在游戏中可以正常出牌,且只能出单张            |"<<endl; 
    cout<<"| 2.修复了已知bug                                     |"<<endl; 
    cout<<"-------------------------------------------------------"<<endl; 
    cout<<"|                     游戏选项                        |"<<endl;    
    cout<<"| 1.开始游戏                                          |"<<endl; 
    cout<<"| 2.请等待下一个版本                                  |"<<endl; 
    cout<<"-------------------------------------------------------"<<endl;     
    cout<<"| InfDev1.3                                           |"<<endl;
    cout<<"-------------------------------------------------------"<<endl; 
    cout<<">>>";
    cin>>choice;
    if(choice==1){
        //开始游戏 
        startGame();
        Last_Cards[0]="None";
        passtime=2;
        while(choice){
        if(Master=="Me"){//先只考虑玩家是庄家的情况 
        system("cls");
         CardFlag:
         if(passtime==2){
             New_Card_Void(MyCard);
         }
        cout << "我的牌:" << endl;
        for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << MyCard[i] << endl;
         }

    // 测试AI1 AI2 的牌
    cout << "AI1的牌:" << endl;
    for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << AI1Card[i] << endl;
    }

    cout << "AI2的牌:" << endl;
    for (int i = 0; i < 6; i++) {
        cout << "第" << i+1 << "张:" << AI2Card[i] << endl;
    } 
    cout<<"上一次出的牌:"<<Last_Cards[0]<<endl;
    cout<<"不出次数:"<<passtime<<endl;
    cout<<"出牌张数:"<<Cards_Be_Chosen_Num<<endl;
    //
     
         cout<<"你选择出第几张?>>>";
         for(int i=0;i<=5;i++)Cards_Be_Chosen[i]="";
        Cards_Be_Chosen_Num=0;
        //choice_in_game_num=-1;
        while(cin>>choice_in_game_num){
            if(choice_in_game_num==-1||choice_in_game_num==-2){ 
                if(choice_in_game_num==-2) pass_or_not=1;
                break;
            }
            Cards_Be_Chosen[Cards_Be_Chosen_Num]=MyCard[choice_in_game_num-1];
            Cards_Be_Chosen_Num++;    
        }
        
        /*测试牌是否被正确选中 
        for(int i=0;i<=5;i++)
        cout<<"被选中的第"<<i+1<<"张牌:"<<Cards_Be_Chosen[i]<<endl;
        Sleep(5000);
        */
        if(choice_in_game_num==-2&&passtime!=2) {
            Cards_Be_Chosen[0]="不出";
            Cards_Be_Chosen_Num=1;
            passtime++;
        } 
        else if(Cards_Be_Chosen_Num==1){
            if(SingleCardIsValid(Last_Cards[0],Cards_Be_Chosen[0],passtime)){
                passtime=0;
                Player_Cards_Update(MyCard);//更新牌 
                range_cards();//理牌 
                Last_Cards[0]=Cards_Be_Chosen[0];
            }
            else{
                cout<<"出牌不合法!"<<endl;
                Sleep(5000);
                system("cls");
                goto CardFlag;
            }
        }
        else if(Cards_Be_Chosen_Num==2){
            if(DoubleCardsIsValid(Last_Cards[0],Last_Cards[1],Cards_Be_Chosen[0],Cards_Be_Chosen[1],passtime)){
                passtime=0;
                Player_Cards_Update(MyCard);
                range_cards();
                Last_Cards[0]=Cards_Be_Chosen[0];
                Last_Cards[1]=Cards_Be_Chosen[1];
            }
            else{//现在只考虑单张
            cout<<"出牌不合法!"<<endl;
            Sleep(5000);
            system("cls");
            goto CardFlag;
        }
        }
        else{//现在只考虑单张
            cout<<"出牌不合法!"<<endl;
            Sleep(5000);
            system("cls");
            goto CardFlag;
        }
        //牌类判断 
        AI1_Push_Cards();
        AI2_Push_Cards();
        if(MyCard[0]==""&&MyCard[1]==""&&MyCard[2]==""&&MyCard[3]==""&&MyCard[4]==""&&MyCard[5]==""){//玩家胜利 
            system("cls");
            cout<<"你赢了!!!"<<endl;
            Sleep(3000);
            break; 
        }
        system("cls");
        for(int i=3;i>0;i--){
            cout<<"你选择出:"<<Cards_Be_Chosen[0]<<" "<<Cards_Be_Chosen[1]<<" "<<Cards_Be_Chosen[2]<<" "<<Cards_Be_Chosen[3]<<" "<<Cards_Be_Chosen[4]<<" "<<Cards_Be_Chosen[5]<<endl;
            cout<<"正在等待机器人1出牌……"<<i<<"秒"<<endl;
            Sleep(1000);
            system("cls");
        }
        if(AI1Card[0]==""&&AI1Card[1]==""&&AI1Card[2]==""&&AI1Card[3]==""&&AI1Card[4]==""&&AI1Card[5]==""){//玩家胜利 
            system("cls");
            cout<<"机器人1赢了!!!下次祝你好运!"<<endl;
            Sleep(3000);
            break; 
        }
        for(int i=3;i>0;i--){
            cout<<"你选择出:"<<Cards_Be_Chosen[0]<<" "<<Cards_Be_Chosen[1]<<" "<<Cards_Be_Chosen[2]<<" "<<Cards_Be_Chosen[3]<<" "<<Cards_Be_Chosen[4]<<" "<<Cards_Be_Chosen[5]<<endl;
            cout<<"机器人1出牌:";
            for(int j=0;j<=5;j++)cout<<AI1_push[j];
            cout<<endl;
            cout<<"正在等待机器人2出牌……"<<i<<"秒"<<endl;
            Sleep(1000);
            system("cls");
            }
        system("cls");
        cout<<"机器人1出牌:";
        for(int j=0;j<=5;j++)cout<<AI1_push[j];
        cout<<endl;
        cout<<"机器人2出牌:";
        for(int j=0;j<=5;j++)cout<<AI2_push[j];
        cout<<endl;
        if(AI2Card[0]==""&&AI2Card[1]==""&&AI2Card[2]==""&&AI2Card[3]==""&&AI2Card[4]==""&&AI2Card[5]==""){//玩家胜利 
            system("cls");
            cout<<"机器人2赢了!!!下次祝你好运!"<<endl;
            Sleep(3000);
            break; 
        }
        goto CardFlag;
    }
    }
    }
    
    
     
    else if(choice==2){//等待下一个版本 
        for(int i=3;i>0;i--){
            system("cls");
            cout<<"请等待下一个版本!" <<endl;
            cout<<i<<"秒后回到主界面……"<<endl;
            Sleep(1000);
        }
    }
}
}

这是我编写的c++干瞪眼代码,但是对于对子牌型的处理有逻辑问题,导致在玩家出对子时,AI出牌函数总是无法返回任何值(AI出牌函数最后会将出的牌写在数组里,但如果出对子,数组变成空的了)。谁能帮忙看看哪里出错了吗?

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-02-24 17:48
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    该代码是一个纸牌游戏的代码,主要包括洗牌、发牌、出牌和判断牌是否符合逻辑的功能。以下是该代码中的主要部分和说明:
    1. 定义变量部分:定义了需要用到的各种变量,如牌组、玩家的牌、庄家、摸牌数等。
    2. 理牌部分:sort函数对玩家的牌进行排序。
    3. 单张牌是否符合逻辑函数:判断出牌是否符合规则,包括大小和出牌次数的限制。
    4. 对子是否符合逻辑函数:判断出牌是否符合规则,包括大小和出牌次数的限制。
    5. 出牌部分:根据玩家的输入和出牌规则,判断是否能够出牌并进行出牌。
    6. 洗牌部分:使用随机数实现洗牌。 以下是代码中的部分实现:
    /* 摸牌 */
    void New_Card_Void(string Card[]){
        Card[1] = cards[New_Card];
        New_Card++;
    };
    /* 对子是否符合逻辑 */
    bool DoubleCardsIsValid(const string &OthersCard1,const string &OthersCard2,const string &OnesCard1,const string &OnesCard2,int &passtime){
        map<string, int> rank;
        rank["3"] = 1; rank["4"] = 2; rank["5"] = 3; rank["6"] = 4;
        rank["7"] = 5; rank["8"] = 6; rank["9"] = 7; rank["10"] = 8;
        rank["J"] = 9; rank["Q"] = 10; rank["K"] = 11; rank["A"] = 12;
        rank["2"] = 13; rank["小王"] = -1; rank["大王"] = -1; rank["广告"] = -1;
        if(rank[OnesCard1]-rank[OthersCard1]==1 && OnesCard2==OthersCard2)    return 1;
        else if(rank[OnesCard1]==-1 || rank[OnesCard1]!=rank[OnesCard2]) return 0;
        else if(passtime>=2) return 1;
        else if(OthersCard1=="None" && OthersCard2=="None") return 1;
        else return 0;
    };
    /* 出牌 */
    void Play(string Cards[]){
        Cards_Be_Chosen_Num = 0;
        for(int i=1; i<=5; i++){
            if(Cards[i]!="None"){
                Cards_Be_Chosen[Cards_Be_Chosen_Num] = Cards[i];
                Cards_Be_Chosen_Num++;
            }
        }
        if(Cards_Be_Chosen_Num==0){
            pass_or_not = 1;
            passtime++;
            cout<<"您选择了不出!"<<endl;
            return;
        }
        if(Cards_Be_Chosen_Num==1){
            if(SingleCardIsValid(Last_Cards[1], Cards_Be_Chosen[0], passtime)){
                Last_Cards[1] = Cards_Be_Chosen[0];
                for(int i=1; i<=5; i++){
                    if(Cards[i]==Cards_Be_Chosen[0]){
                        Cards[i] = "None";
                        break;
                    }
                }
            }
            else{
                cout<<"您出的牌不符合规则,请重新选择!"<<endl;
                return;
            }
        }
        ...
    }
    

    其中,摸牌函数New_Card_Void用于将摸到的牌加入到玩家的牌中;对子是否符合逻辑函数DoubleCardsIsValid判断玩家出的牌是否符合规则;出牌函数Play根据玩家出的牌和规则进行出牌,同时将出的牌从玩家的牌中移除。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月25日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥30 matlab求解刃位错方程
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥20 dify工作流分析sql查询结果
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息