zoukankan      html  css  js  c++  java
  • 编程练习,自己做的21点游戏

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int N; //牌序
    int integral_player; //玩家积分
    int integral_computer; //电脑积分
    
    int card[52]= {102,103,104,105,106,107,108,109,110,111,112,113,114,202,203,204,205,206,207,208,209,210,211,212,213,214
                   ,302,303,304,305,306,307,308,309,310,311,312,313,314,402,403,404,405,406,407,408,409,410,411,412,413,414,
                  };
    int player1[10]= {0,};
    int player2[10]= {0,};
    int player1_card=0;
    int player2_card=0;
    
    void show_cards(int i); //示牌
    void riffle(); //洗牌
    void Send_cards(); //发牌
    void add_player(); //玩家要牌
    void add_computer(); //电脑要牌
    void cal_point(); //计算点数
    void integral_read(); //积分读取,显示
    void integral_write(); //积分写入
    
    int main()
    {
        char choose;
        integral_read(); //积分读取
        do
        {
            //printf("洗牌測试 
    ");
            riffle(); //洗牌
            Send_cards(); //发牌
            add_player(); //玩家要牌
            add_computer(); //电脑要牌
            cal_point(); //计算点数
            integral_write(); //积分写入
    
            printf("******************* SUCCESS ***********************
    ");
            printf("按 N 退出,其它键继续....
    
    ");
            fflush(stdin);
            choose=getchar();
            printf("
    ");
        }
        while (choose !='n'&&choose!='N');
        return 0;
    
    }
    
    void riffle()
    {
        int a,t,i;
        srand(time(0));
        /*for (i=0; i<52; i++)
        {
            if (i%13==0)
            {
                printf("
    
    ");
            }
            show_cards(i);
        }
        printf("
    
    ");
    
        printf("上面是正常牌序,后面是洗牌后的牌序
    "); //洗牌測试*/
    
    
        for (i=0; i<52; i++)
        {
            a=rand()%52;
            t=card[i];
            card[i]=card[a];
            card[a]=t;
        }
    
        N=0; //牌序重置;
        player1_card=0; //玩家牌序重置。
        player2_card=0; //电脑牌序重置;
    
        /*for (i=0; i<52; i++) //洗牌測试
        {
            if (i%13==0)
            {
                printf("
    
    ");
            }
            show_cards(i);
        }
        printf("
    
    ");*/
    }
    
    void Send_cards()
    {
        int j;
        printf("玩家拿牌:");
        for (j=0; j<2; j++)
        {
            show_cards(N);
            player1[player1_card]=card[N];
            player1_card++;
            N++;
        }
        printf("
    
    ");
    
        printf("电脑拿牌:");
        for (j=0; j<2; j++)
        {
            show_cards(N);
            player2[player2_card]=card[N];
            player2_card++;
            N++;
        }
        printf("
    
    ");
    }
    
    
    void show_cards(int i)
    {
        int choose;
        choose=card[i]/100;
        switch (choose)
        {
        case 1:
            if (card[i]%100==14)
            {
                printf("SA	");
                break;
            }
            else if (card[i]%100==13)
            {
                printf("SK	");
                break;
            }
            else if (card[i]%100==12)
            {
                printf("SQ	");
                break;
            }
            else if (card[i]%100==11)
            {
                printf("SJ	");
                break;
            }
            else
            {
                printf("S%d	",card[i]%100);
                break;
            }
        case 2:
            if (card[i]%100==14)
            {
                printf("DA	");
                break;
            }
            else if (card[i]%100==13)
            {
                printf("DK	");
                break;
            }
            else if (card[N]%100==12)
            {
                printf("DQ	");
                break;
            }
            else if (card[i]%100==11)
            {
                printf("DJ	");
                break;
            }
            else
            {
                printf("D%d	",card[i]%100);
                break;
            }
        case 3:
            if (card[i]%100==14)
            {
                printf("CA	");
                break;
            }
            else if (card[i]%100==13)
            {
                printf("CK	");
                break;
            }
            else if (card[i]%100==12)
            {
                printf("CQ	");
                break;
            }
            else if (card[i]%100==11)
            {
                printf("CJ	");
                break;
            }
            else
            {
                printf("C%d	",card[i]%100);
                break;
            }
        case 4:
            if (card[N]%100==14)
            {
                printf("HA	");
                break;
            }
            else if (card[N]%100==13)
            {
                printf("HK	");
                break;
            }
            else if (card[N]%100==12)
            {
                printf("HQ	");
                break;
            }
            else if (card[i]%100==11)
            {
                printf("HJ	");
                break;
            }
            else
            {
                printf("H%d	",card[i]%100);
                break;
            }
        }
    }
    
    
    void add_player()
    {
        int choose;
        do
        {
            printf("玩家: 1.要牌 2.不要40");
            scanf("%d",&choose);
            switch (choose)
            {
            case 1:
                show_cards(N);
                player1[player1_card]=card[N];
                player1_card++;
                N++;
                printf("
    ");
                continue;
            case 2:
                printf("不要
    ");
                return;
            }
        }
        while (1);
    }
    
    void add_computer()
    {
        int i;
        while (1)
        {
            int choose=2;
            int point=0;
    
            for (i=0; i<player2_card; i++)
            {
                point+=player2[i]%100;
            }
            if (point<=18)
            {
                choose=1;
            }
    
            printf("电脑:1.要牌 2.不要
    ");
            switch (choose)
            {
            case 1:
                printf("要一张
    ");
                show_cards(N);
                player2[player2_card]=card[N];
                player2_card++;
                N++;
                printf("
    ");
                continue;
            case 2:
                printf("不要
    ");
                return;
            }
        }
    }
    
    
    void cal_point()
    {
        int winner1;
        int winner2;
        int i;
        int point1;
        int point2;
        int point;
        point1=0;
        point2=0;
        for (i=0; i<player1_card; i++)
        {
            point=player1[i]%100;
            switch(point)
            {
            case 14:
                point=11;
                break;
            case 13:
                point=10;
                break;
            case 12:
                point=10;
                break;
            case 11:
                point=10;
                break;
            case 10:
                point=10;;
                break;
            default :
                point=player1[i]%100;
                break;
            }
            point1+=point;
        }
        for (i=0; i<player2_card; i++)
        {
            point=player2[i]%100;
            switch(point)
            {
            case 14:
                point=11;
                break;
            case 13:
                point=10;
                break;
            case 12:
                point=10;
                break;
            case 11:
                point=10;
                break;
            case 10:
                point=10;;
                break;
            default :
                point=player2[i]%100;
                break;
            }
            point2+=point;
    
        }
    
        printf("玩家的点数为:%d	",point1);
        printf("电脑的点数为: %d
    
    ",point2);
    
        if (point1>21)
        {
            printf("玩家爆掉
    
    ");
            winner1=0;
        }
        else
            winner1=1;
        if (point2>21)
        {
            printf("电脑爆掉
    
    ");
            winner2=0;
        }
        else
            winner2=1;
    
        if (winner1>winner2){
            printf("玩家胜,得1分
    
    ");
            integral_player++;
            return;
        }
        else if((winner1=winner2==1)){
            if (point1>point2){
                printf("玩家胜。得1分
    
    ");
            integral_player++;
            return;
            }
            else{
                printf("电脑胜,得1分
    
    ");
            integral_computer++;
            return;
            }
        }
        else if ((winner1=winner2==0)){
            printf("电脑胜,得1分
    
    ");
            integral_computer++;
            return;
        }
        else if (winner1<winner2){
            printf("电脑胜。得1分
    
    ");
            integral_computer++;
            return;
            }
        else
            return;
    }
    
    
    
    void integral_read()
    {
        FILE *fp;
        if ((fp=fopen("integral.txt","r"))==NULL)
        {
            printf("integral file cannot open!");
            exit(0);
        }
        fscanf(fp,"%d %d",&integral_player,&integral_computer); //读入积分
        fclose(fp);
        printf("玩家一共%d胜 %d败
    
    ",integral_player,integral_computer);
    }
    
    void integral_write()
    {
        FILE *p;
        if ((p=fopen("integral.txt", "w"))==NULL)
        {
            printf("integral.txt file cannot open!");
            exit(0);
        }
        fprintf(p,"%d %d",integral_player,integral_computer);
        fclose(p);
    }
    







    还有不完好的地方

    比方 A仅仅能作为11使用 不能看情况做1 计算

    假设2个牌同样 不算豹子 


    下次继续改进



  • 相关阅读:
    [ PyQt入门教程 ] Qt Designer工具的使用
    [ PyQt入门教程 ] PyQt5开发环境搭建和配置
    Notepad++提升工作效率小技巧
    思考:测试人员如何快速成长
    Linux /tmp目录下执行脚本失败提示Permission denied
    使用Quartz实现定时任务
    算法篇(前序)——Java的集合
    深入理解 JVM(上)
    Linux集锦
    秒杀系统实现高并发的优化
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7357115.html
Copyright © 2011-2022 走看看