编程练习,自己做的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("洗牌測试 \n");
        riffle(); //洗牌
        Send_cards(); //发牌
        add_player(); //玩家要牌
        add_computer(); //电脑要牌
        cal_point(); //计算点数
        integral_write(); //积分写入

        printf("******************* SUCCESS ***********************\n");
        printf("按 N 退出,其它键继续....\n\n");
        fflush(stdin);
        choose=getchar();
        printf("\n");
    }
    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("\n\n");
        }
        show_cards(i);
    }
    printf("\n\n");

    printf("上面是正常牌序,后面是洗牌后的牌序\n"); //洗牌測试*/

    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("\n\n");
        }
        show_cards(i);
    }
    printf("\n\n");*/
}

void Send_cards()
{
    int j;
    printf("玩家拿牌:");
    for (j=0; j<2; j++)
    {
        show_cards(N);
        player1[player1_card]=card[N];
        player1_card++;
        N++;
    }
    printf("\n\n");

    printf("电脑拿牌:");
    for (j=0; j<2; j++)
    {
        show_cards(N);
        player2[player2_card]=card[N];
        player2_card++;
        N++;
    }
    printf("\n\n");
}

void show_cards(int i)
{
    int choose;
    choose=card[i]/100;
    switch (choose)
    {
    case 1:
        if (card[i]%100==14)
        {
            printf("SA\t");
            break;
        }
        else if (card[i]%100==13)
        {
            printf("SK\t");
            break;
        }
        else if (card[i]%100==12)
        {
            printf("SQ\t");
            break;
        }
        else if (card[i]%100==11)
        {
            printf("SJ\t");
            break;
        }
        else
        {
            printf("S%d\t",card[i]%100);
            break;
        }
    case 2:
        if (card[i]%100==14)
        {
            printf("DA\t");
            break;
        }
        else if (card[i]%100==13)
        {
            printf("DK\t");
            break;
        }
        else if (card[N]%100==12)
        {
            printf("DQ\t");
            break;
        }
        else if (card[i]%100==11)
        {
            printf("DJ\t");
            break;
        }
        else
        {
            printf("D%d\t",card[i]%100);
            break;
        }
    case 3:
        if (card[i]%100==14)
        {
            printf("CA\t");
            break;
        }
        else if (card[i]%100==13)
        {
            printf("CK\t");
            break;
        }
        else if (card[i]%100==12)
        {
            printf("CQ\t");
            break;
        }
        else if (card[i]%100==11)
        {
            printf("CJ\t");
            break;
        }
        else
        {
            printf("C%d\t",card[i]%100);
            break;
        }
    case 4:
        if (card[N]%100==14)
        {
            printf("HA\t");
            break;
        }
        else if (card[N]%100==13)
        {
            printf("HK\t");
            break;
        }
        else if (card[N]%100==12)
        {
            printf("HQ\t");
            break;
        }
        else if (card[i]%100==11)
        {
            printf("HJ\t");
            break;
        }
        else
        {
            printf("H%d\t",card[i]%100);
            break;
        }
    }
}

void add_player()
{
    int choose;
    do
    {
        printf("玩家: 1.要牌 2.不要\040");
        scanf("%d",&choose);
        switch (choose)
        {
        case 1:
            show_cards(N);
            player1[player1_card]=card[N];
            player1_card++;
            N++;
            printf("\n");
            continue;
        case 2:
            printf("不要\n");
            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.不要\n");
        switch (choose)
        {
        case 1:
            printf("要一张\n");
            show_cards(N);
            player2[player2_card]=card[N];
            player2_card++;
            N++;
            printf("\n");
            continue;
        case 2:
            printf("不要\n");
            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\t",point1);
    printf("电脑的点数为: %d\n\n",point2);

    if (point1>21)
    {
        printf("玩家爆掉\n\n");
        winner1=0;
    }
    else
        winner1=1;
    if (point2>21)
    {
        printf("电脑爆掉\n\n");
        winner2=0;
    }
    else
        winner2=1;

    if (winner1>winner2){
        printf("玩家胜,得1分\n\n");
        integral_player++;
        return;
    }
    else if((winner1=winner2==1)){
        if (point1>point2){
            printf("玩家胜。得1分\n\n");
        integral_player++;
        return;
        }
        else{
            printf("电脑胜,得1分\n\n");
        integral_computer++;
        return;
        }
    }
    else if ((winner1=winner2==0)){
        printf("电脑胜,得1分\n\n");
        integral_computer++;
        return;
    }
    else if (winner1<winner2){
        printf("电脑胜。得1分\n\n");
        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败\n\n",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个牌同样 不算豹子

下次继续改进

时间: 2024-10-20 23:32:08

编程练习,自己做的21点游戏的相关文章

【读书笔记-《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)

3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里的name是自定义的,不是索引变量."@+"表示新声明,"@"表示引用,例如:"@+id/tv" 表示新声明一个id,是id名为tv的组件:"@id/tv" 表示引用id名为tv的组件. 给按钮添加点击事件响应  想知道按钮是否被

【读书笔记-《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)

3.9 TabSpec与TabHost TabHost类官方文档地址:http://developer.android.com/reference/android/widget/TabHost.html Android 实现tab视图有2种方法,一种是在布局页面中定义<tabhost>标签,另一种就是继承tabactivity.但是我比较喜欢第二种方式,应为如果页面比较复杂的话你的XML文件会写得比较庞大,用第二种方式XML页面相对要简洁得多. <?xml version="1

用python实现自动玩Npubits的21点游戏

用python实现自动玩Npubits的21点游戏 21点的主页面 https://--- (此处不提供链接,用户直接在网站首页点击21点后,地址栏的链接便是.) 需要知道的关键点 (写代码时用来抓取数据的关键点) 1. 等待开局 若之前的21点还没有结束(暂时没有对手上线),那么不能开局,需等待之前的结束.若需等待,主页面包含以下内容 <button type="submit" class="btn btn-default">刷新</button

21点游戏

// 21点游戏 分为人机对战和人人对战 // 玩家每次抽一张牌 牌的点数为1-10点随机数 谁更接近21点谁就获胜 let readline = require("readline-sync"); // 清屏函数 let clear = () => process.stdout.write(process.platform === 'win32' ? '\x1Bc' : '\x1B[2J\x1B[3J\x1B[H'); // 抽牌函数 接收一个参数 玩家对象 let takeC

编程零基础做程序员,该怎么学习?首先要学习什么?

编程零基础做程序员,该怎么学习?首先要学习什么?众所周知程序员是21世纪比较吃香的工作.程序员工资高还不需要和复杂的社会打交道.那么作为一个零基础,什么都不懂的人该怎么成为一名程序员?当程序员需要学什么?下面就来分析下.零基础的我该如何学习?如果想做一个程序员,在没有基础的情况下,买书自学是一个办法,但是大多数人会因为没有相关的基础知识,导致看书看得一知半解,因为有不同的语言,不同的开发环境,在你不了解的时候,买的书不一定合适.笔者是一个Java出身的程序员,学习编程有什么学习问题或者关于Jav

用cocos2d-html5做的消除类游戏《英雄爱消除》——概述

在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3.游戏结束界面: 4.游戏设置页面 这是一款休闲型的游戏,移动方块,相同的方块在一起就会消除,计算消除整个屏幕方块所需要画的时间,时间越短成绩越好.下面附上源码链接: http://files.cnblogs.com/jackyWHJ/HeroLikeClear.zip 接下来会把几个主要功能写个教程

突发奇想想学习做一个HTML5小游戏

前言: 最近一期文化馆轮到我分享了,分享了两个,一个是关于童年教科书的回忆,一个是关于免费电子书的.最后我觉得应该会不敌web,只能说是自己在这中间回忆了一下那个只是会学习的年代,那个充满梦想的年代.有人说如果一个人开始回忆童年的时候,那么他开始变老了,不知道是不是这样一个原因,我突然想起了很多以前的老朋友,开始想起了一些童年时期的玩伴.也就想做这样一款简单的游戏,也只是单纯的想回忆一下童年. 计划: 游戏其实很简单,我们把它叫着裤裆棋,又叫什么狗卵坨还是什么的,有些记忆模糊了,反正大致是这样子

用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面

游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: jackyWHJ */ var STATE_PLAYING = 0; var STATE_GAMEOVER = 1; var g_sharedGameLayer; var GameLayer = cc.Layer.extend({ _time:0, _timeLabel:null, _timeSt

Javascript----实现21点游戏

1.效果 洗牌: 要牌: 亮牌: 2.代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>21点游戏</title> <style type="text/css"> .container { width: 1080px; height: 600px; border: 1px solid #cccccc; mar