签到

06月21日
尚未签到

共有回帖数 0

    孤单的狼

    等级:
    模仿梭哈游戏规则写的,vc6.0编译过的,昨天写了一下午调试了1个system("pause");
    }while(1); //无限循环
    }

    /* 创建28张扑克 */

    void creat(int card[])
    {
    int i,j;
    for(i=0;iN;i++)
    {
    card=rand()%N;
    for(j=0;ji;j++)
    {
    if(card[j]==card) //生成数字重复则重新生成
    {
    i--;
    break;
    }
    }
    }
    }

    /* 模拟洗牌,随机交换 */

    void shuffle(int card[])
    {
    int i,j,temp;
    for(i=0;iN;i++)
    {
    j=rand()%(N-i)+i; //生成i~N-1的随机数字中的一个
    temp=card; //与第i张牌交换
    card=card[j];
    card[j]=temp;
    }
    }

    /* 发给两位玩家扑克牌 */

    void deal(int card[],int playerCard[][M])  
    {
    int i,j,k=0;
    for(j=0;jM;j++)
    {
    for(i=0;i2;i++)
    {
    playerCard[j]=card[k]; //依次顺序发牌
    k++;
    }
    }
    }

    /* 冒泡排序 */

    void sort(int card[])  
    {
    int i,j,temp;
    for(i=0;iM-1;i++)
    {
    for(j=0;jM-1-i;j++)
    {
    if(card[j]card[j+1])
    {
    temp=card[j];
    card[j]=card[j+1];
    card[j+1]=temp;
    }
    }
    }
    }

    /* 将数字转化为扑克牌 */

    char *conversion(int num,char pictureCard[])
    {
    char *numberCard[]={"8","9","10","J","Q","K","A"}; //牌的大小
    char *kind[]={"4","5","3","6"}; //牌的花色
    strcpy(pictureCard,kind[num%4]);
    strcat(pictureCard,numberCard[num/4]);
    return pictureCard; //将牌的大小和花色形成一个字符串并返回
    }

    /* 以下算法均为已排好序的(牌面花色都从小到大) */

    /* 判断5张扑克是否连续 */

    int checkShun(int card[])  
    {
    int i,flag=1; //flag==1连续
    for(i=0;iM-1;i++)
    {
    if((card[i+1])/4-card/4!=1)
    {
    flag=0; //flag=0不连续
    }
    }
    return flag; //返回flag
    }

    /* 判断是否花色相同 */

    int checkTong(int card[])  
    {
    int i,j,flag=1; //flag==1花色相同
    for(i=0;iM-1;i++)
    {
    for(j=i+1;jM;j++)
    {
    if(card%4!=card[j]%4)
    {
    flag=0; //flag=0花色不同
    }
    }
    }
    return flag; //返回flag
    }

    /* 判断是否同花顺牌型 */

    int checkTongHuaShun(int card[])  
    {
    if(checkShun(card)&&checkTong(card)) //连续并且花色相同
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否顺子牌型 */

    int checkShunzi(int card[])
    {
    if(checkShun(card)&&!checkTong(card)) //连续并且花色不同
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否同花牌型 */

    int checkTongHua(int card[])
    {
    if(!checkShun(card)&&checkTong(card)) //不连续并且花色相同
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否为四条牌型 */

    int checkSiTiao(int card[])
    {
    if(card[0]/4==card[3]/4||card[1]/4==card[4]/4) //第1张和第4张扑克牌大小一样
    { //或者第2张和第5张扑克牌大小一样
    return 1;
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否为三条一对牌型 */

    int checkSanTiaoYiDui(int card[])
    {
    if(card[0]/4==card[2]/4&&card[3]/4==card[4]/4) //第1张和第3张扑克牌相等&&
    { //第4张和第5张扑克牌相等
    return 1;
    }
    else if(card[0]/4==card[1]/4&&card[2]/4==card[4]/4) //第1张和第2张扑克牌相等&&
    { //第3张和第5张扑克牌相等
    return 1;
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否为两对牌型 */

    int checkLiangDui(int card[])  
    {
    if(!checkSiTiao(card)&&!checkSanTiaoYiDui(card)) //不是四条并且不是三条一对
    {
    if(card[0]/4==card[1]/4&&card[2]/4==card[3]/4) //第1张和第2张扑克牌相等&&
    { //第3张和第4张扑克牌相等
    return 1;
    }
    else if(card[0]/4==card[1]/4&&card[3]/4==card[4]/4) //第1张和第2张扑克牌相等&&
    { //第4张和第5张扑克牌相等
    return 1;
    }
    else if(card[1]/4==card[2]/4&&card[3]/4==card[4]/4) //第2张和第3张扑克牌相等&&
    { //第4张和第5张扑克牌相等
    return 1;
    }
    else  
    {
    return 0;
    }
    }
    else  
    {
    return 0;
    }
    }

    /* 判断是否为三条牌型 */

    int checkSanTiao(int card[])
    {
    if(!checkSiTiao(card)&&!checkSanTiaoYiDui(card)) //不是四条并且不是三条一对
    {
    if(card[0]/4==card[2]/4||card[1]/4==card[3]/4||card[2]/4==card[4]/4)//第1张和第3张扑克牌||
    { //第2张和第4张扑克牌||
    return 1; //第3张和第5张扑克牌相等
    }
    else
    {
    return 0;
    }
    }
    else
    {
    return 0;
    }
    }

    /* 判断是否为对子牌型 */

    int checkDuiZi(int card[])
    {
    int i,flag=0; //flag==0代表不是对子
    if(!checkSiTiao(card)&&!checkSanTiaoYiDui(card)&&!checkLiangDui(card)&&!checkSanTiao(card))
    { //!四条&&!三条一对&&!两对&&!三条
    for(i=0;iM-1;i++)
    {
    if(card/4==card[i+1]/4) //如果有两张连续的牌相等则为对子
    {
    flag=1;
    }
    }
    return flag;
    }
    else
    {
    return 0;
    }
    }

    晚上,只会写控制台的,原创,有游戏才有学习的动力么,^_^
    /* 将5张扑克牌转化为9种牌型 */

    int change(int card[])
    {
    if(checkTongHuaShun(card)) //同花顺牌型8
    {
    return 8;
    }
    else if(checkSiTiao(card)) //四条牌型7
    {
    return 7;
    }
    else if(checkSanTiaoYiDui(card)) //三条一对牌型6
    {
    return 6;
    }
    else if(checkTongHua(card)) //同花牌型5
    {
    return 5;
    }
    else if(checkShunzi(card)) //顺子牌型4
    {
    return 4;
    }
    else if(checkSanTiao(card)) //三条牌型3
    {
    return 3;
    }
    else if(checkLiangDui(card)) //两对牌型2
    {
    return 2;
    }
    else if(checkDuiZi(card)) //对子牌型1
    {
    return 1;
    }
    else //散牌牌型0
    {
    return 0;
    }
    }

    /* 比较两数大小返回1,返回-1,相等返回0 */

    int cmp(int a,int b)
    {
    if(ab)
    {
    return 1;
    }
    else if(ab)
    {
    return -1;
    }
    else
    {
    return 0;
    }
    }

    /* 比较两幅同花顺,同花,顺子,散牌的大小 */

    int cmpShunOrSanPai(int card1[],int card2[])
    {
    if(card1[M-1]/4!=card2[M-1]/4) //第5张牌不相等
    {
    return cmp(card1[M-1]/4,card2[M-1]/4); //返回第5张牌的大小比较
    }
    else
    {
    return cmp(card1[M-1]%4,card2[M-1]%4); //返回第5张牌的花色比较
    }
    }

    /* 返回四条对应的扑克数字的编号 */

    int maxSiTiao(int card[])
    {
    int i;
    for(i=0;iM-1;i++)
    {
    if(card/4==card[i+1]/4) //返回两张连续相等的牌对应的数字的编号
    {
    return card[i+1];
    }
    }
    return 0;
    }

    /* 比较两幅四条的大小 */

    int cmpSiTiao(int card1[],int card2[])
    {
    return cmp(maxSiTiao(card1)/4,maxSiTiao(card2)/4);
    }

    /* 返回三条对应的扑克的数字编号 */

    int maxSanTiao(int card[])
    {
    int i;
    for(i=0;iM-1;i++)
    {
    if(card/4==card[i+1]/4&&card/4==card[i+2]/4) //返回3张连续相等牌最大数字的编号
    {
    return card[i+2];
    }
    }
    return 0;
    }

    /* 比较两幅三条的大小 */

    int cmpSanTiao(int card1[],int card2[])
    {
    return cmp(maxSanTiao(card1)/4,maxSanTiao(card2)/4);
    }

    /* 返回两对中较大的一对的扑克牌对应的数字 */

    int maxLiangDui(int card[])
    {
    int a,i;
    for(i=0;iM-1;i++)
    {
    if(card/4==card[i+1]/4) //最后的相等的数字为最大的数字
    {
    a=card[i+1];
    }
    }
    return a;
    }

    /* 返回两对中较小的一对对应的牌的大小 */

    int minLiangDui(int card[])
    {
    return maxSiTiao(card); //最前面的第2个数字
    }

    /* 比较两幅两对的大小 */

    int cmpLiangDui(int card1[],int card2[])
    {
    if(maxLiangDui(card1)/4!=maxLiangDui(card2)/4) //最大对牌的大小不相等
    {
    return cmp(maxLiangDui(card1)/4,maxLiangDui(card2)/4);
    }
    else if(minLiangDui(card1)/4!=minLiangDui(card2)/4) //最小对牌的大小不相等
    {
    return cmp(minLiangDui(card1)/4,minLiangDui(card2)/4);
    }
    else //都相等返回最大对对应的最大花色
    {
    return cmp(maxLiangDui(card1)%4,maxLiangDui(card2)%4);
    }
    }

    /* 比较两副对子的大小 */

    int cmpDuiZi(int card1[],int card2[])
    {
    if(maxLiangDui(card1)/4!=maxLiangDui(card2)/4) //直接调用两对中最大对的返回函数即可


    {
    return cmp(maxLiangDui(card1)/4,maxLiangDui(card2)/4);
    }
    else
    {
    return cmp(maxLiangDui(card1)%4,maxLiangDui(card2)%4); //相等返回最大花色
    }
    }

    /* 比较两幅扑克牌的大小 */

    int compare(int card1[],int card2[])
    {
    if(change(card1)!=change(card2)) //牌型不同则牌型大的扑克牌大
    {
    return cmp(change(card1),change(card2));
    }
    else if(change(card1)==8||change(card1)==5||change(card1)==4||change(card1)==0)
    {
    return cmpShunOrSanPai(card1,card2); //同花顺||同花||顺子||或散牌
    }
    else if(change(card1)==7) //四条
    {
    return cmpSiTiao(card1,card2);
    }
    else if(change(card1)==6||change(card1)==3) //三条一对或者三条
    {
    return cmpSanTiao(card1,card2);
    }
    else if(change(card1)==2) //两对
    {
    return cmpLiangDui(card1,card2);
    }
    else //对子  
    {
    return cmpDuiZi(card1,card2);
    }
    }

    /* 显示两位玩家全部扑克牌 */

    void displayTotal(int playerCard[][M],char pictureCard[])
    {
    int i;
    printf("computer: ");
    for(i=0;iM;i++) //电脑的全部牌
    {
    printf("%6s",conversion(playerCard[0],pictureCard));
    }
    printf("nplayer:t ");
    for(i=0;iM;i++) //玩家的全部牌
    {
    printf("%6s",conversion(playerCard[1],pictureCard));
    }
    printf("n");
    }

    /* 显示两位玩家部分扑克牌 */

    void displayPart(int playerCard[][M],char pictureCard[])
    {
    int i;
    printf("computer: ");
    printf("t**");
    for(i=1;iM;i++) //电脑的部分牌
    {
    printf("%6s",conversion(playerCard[0],pictureCard));
    }
    printf("nplayer: ");
    printf("t**");
    for(i=1;iM;i++)
    {
    printf("%6s",conversion(playerCard[1],pictureCard)); //玩家的部分牌
    }
    printf("n");
    }

    /* 简单的游戏算分系统 */

    void compute(int playerCard[][M],int playerCopy[][M],char pictureCard[])
    {
    char select;
    static playerTotal=1000; //电脑 玩家初始分数
    static computerTotal=1000;
    int flag=1,total; //flag=1代表投注
    printTotal(computerTotal,playerTotal);
    printf("please select:ta.20tb.50tc.80td.100te.drop(-10) "); //5种选择
    fflush(stdin);
    select=getchar();
    switch(select)
    {
    case 'a': //下注20
    playerTotal-=20;
    computerTotal-=20;
    total=40;
    break;
    case 'b': //下注50
    playerTotal-=50;
    computerTotal-=50;
    total=100;
    break;
    case 'c': //下注80
    playerTotal-=80;
    computerTotal-=80;
    total=160;
    break;
    case 'd': //下注100
    playerTotal-=100;
    computerTotal-=100;
    total=200;
    break;
    default:
    flag=0; //flag=0代表放弃-10
    }
    if(compare(playerCard[1],playerCard[0])==1&&flag==1) //玩家胜
    {
    printf("you winn");
    playerTotal+=total;
    }
    else if(compare(playerCard[1],playerCard[0])==-1&&flag==1) //电脑胜
    {
    printf("you losen");
    computerTotal+=total;
    }
    else if(flag==0) //弃权电脑胜
    {
    playerTotal-=10;
    computerTotal+=10;
    printf("you losen");
    }
    displayTotal(playerCopy,pictureCard); //显示电脑 玩家全部牌
    if(checkTotal(playerTotal)&&checkTotal(computerTotal)) //电脑玩家分数为正
    {
    printTotal(computerTotal,playerTotal); //显示分数
    }
    else if(!checkTotal(playerTotal)) //玩家分数=0
    {
    printf("you lose the game. n");
    exit(0);
    }
    else if(!checkTotal(computerTotal)) //电脑分数=0
    {
    printf("you win the game. n");
    exit(0);
    }
    }

    /* 显示两家分数 */

    void printTotal(int computerTotal,int playerTotal)
    {
    printf("computer:t%dn",computerTotal);
    printf("player:tt%dn",playerTotal);
    }

    /* 判断分数是否0 */

    int checkTotal(int total)
    {
    if(total=0)
    {
    return 0;
    }
    else
    return 1;
    }

    /* 将两位玩家的扑克牌拷贝一个副本 */

    void copy(int playerCard[][M],int playerCopy[][M])
    {
    int i,j;
    for(i=0;i2;i++)
    {
    for(j=0;jM;j++)
    {
    playerCopy[j]=playerCard[j];
    }
    }
    }


    楼主 2016-01-23 11:44 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知