C语言——小猫钓鱼

#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>


typedef struct
{
    int data[3600];
    int col[3600];
    int top;
} stack;

typedef struct
{
    int data[3600];
    int col[3600];
    int head;
    int tail;
} queue;

queue p1, p2;
stack table;

void printmenu();
void deal();
void printp1();
void printtable();
void printzzz();
void judge(int a, int player);
void game();
void ask();

int main()
{
    while(1)
    {
        char ch;
        printmenu();
        scanf("%c",&ch);
        switch(ch)
        {
        case '1':
            game();
            break;

        case '2':
            exit(0);

        default:
            system("cls");
            break;
        }
    }

    return 0;
}

void printmenu()
{
    printf("*****************************\n");
    printf("*                           *\n");
    printf("*                           *\n");
    printf("*         金钩钓鱼          *\n");
    printf("*                           *\n");
    printf("*                           *\n");
    printf("*                           *\n");
    printf("*****************************\n");
    printf("\n\n\n");
    printf("游戏规则:\n");
    printf("每人各拿一半的牌,然后你放1张牌,\n");
    printf("他放一张牌,如跟上面的牌一样,\n");
    printf("即可把当中的牌全部吃掉,\n");
    printf("直至对手手上无牌为止。\n\n\n");
    printf("输入1开始游戏\n");
    printf("输入2退出程序\n");
}

void deal()
{
    p1.head = 1;
    p1.tail = 1;
    p2.head = 1;
    p2.tail = 1;
    table.top = 0;
    int i, card, book[60];
    srand((unsigned)time(0));
    memset(book, 0, sizeof(book));
    for(i = 1; i <= 27;)
    {
        card = rand()%55;
        if(card == 0)
            continue;
        else if(card >= 1 && card <= 13 && book[card] == 0)
        {
            p1.data[p1.tail] = card;
            p1.col[p1.tail] = 1;
            p1.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 14 && card <= 26 && book[card] == 0)
        {
            p1.data[p1.tail] = card - 13;
            p1.col[p1.tail] = 2;
            p1.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 27 && card <= 39 && book[card] == 0)
        {
            p1.data[p1.tail] = card - 26;
            p1.col[p1.tail] = 3;
            p1.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 40 && card <= 52 && book[card] == 0)
        {
            p1.data[p1.tail] = card - 39;
            p1.col[p1.tail] = 4;
            p1.tail++;
            book[card]=1;
            i++;
        }
        else if(card == 53)
        {
            p1.data[p1.tail] = card;
            p1.col[p1.tail] = 5;
            p1.tail++;
            book[card]=1;
            i++;
        }
        else if(card == 54)
        {
            p1.data[p1.tail] = card;
            p1.col[p1.tail] = 5;
            p1.tail++;
            book[card]=1;
            i++;
        }
    }
    for(i = 1; i <= 27;)
    {
        card = rand()%55;
        if(card == 0)
            continue;
        else if(card >= 1 && card <= 13 && book[card] == 0)
        {
            p2.data[p2.tail] = card;
            p2.col[p2.tail] = 1;
            p2.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 14 && card <= 26 && book[card] == 0)
        {
            p2.data[p2.tail] = card - 13;
            p2.col[p2.tail] = 2;
            p2.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 27 && card <= 39 && book[card] == 0)
        {
            p2.data[p2.tail] = card - 26;
            p2.col[p2.tail] = 3;
            p2.tail++;
            book[card]=1;
            i++;
        }
        else if(card >= 40 && card <= 52 && book[card] == 0)
        {
            p2.data[p2.tail] = card - 39;
            p2.col[p2.tail] = 4;
            p2.tail++;
            book[card]=1;
            i++;
        }
        else if(card == 53 && book[card] == 0)
        {
            p2.data[p2.tail] = card;
            p2.col[p2.tail] = 5;
            p2.tail++;
            book[card]=1;
            i++;
        }
        else if(card == 54 && book[card] == 0)
        {
            p2.data[p2.tail] = card;
            p2.col[p2.tail] = 5;
            p2.tail++;
            book[card]=1;
            i++;
        }
    }

    return;
}

void printp1()
{
    int i;
    printf("您的牌有: \n");
    for(i = p1.tail-1; i >= p1.head; i--)
    {
        if(p1.col[i] == 1)
        {
            printf("方片");
        }
        else if(p1.col[i] == 2)
        {
            printf("红桃");
        }
        else if(p1.col[i] == 3)
        {
            printf("黑桃");
        }
        else if(p1.col[i] == 4)
        {
            printf("梅花");
        }
        if(p1.data[i] == 11)
        {
            printf("J ");
        }
        else if(p1.data[i] == 12)
        {
            printf("Q ");
        }
        else if(p1.data[i] == 13)
        {
            printf("K ");
        }
        else if(p1.data[i] == 53)
        {
            printf("小王 ");
        }
        else if(p1.data[i] == 54)
        {
            printf("大王 ");
        }
        else
            printf("%d ", p1.data[i]);
    }
    printf("\n\n");
    return;
}

void printtable()
{
    int i;
    printf("桌上的牌有:\n");
    if(table.top == 0)
    {
        printf("(无)\n");
    }
    for(i = 1; i <= table.top; i++)
    {
        if(table.col[i] == 1)
        {
            printf("方片");
        }
        else if(table.col[i] == 2)
        {
            printf("红桃");
        }
        else if(table.col[i] == 3)
        {
            printf("黑桃");
        }
        else if(table.col[i] == 4)
        {
            printf("梅花");
        }
        if(table.data[i] == 11)
        {
            printf("J ");
        }
        else if(table.data[i] == 12)
        {
            printf("Q ");
        }
        else if(table.data[i] == 13)
        {
            printf("K ");
        }
        else if(table.data[i] == 53)
        {
            printf("小王 ");
        }
        else if(table.data[i] == 54)
        {
            printf("大王 ");
        }
        else
            printf("%d ", table.data[i]);
    }
    printf("\n\n\n");
    return;
}

void printzzz()
{
    system("cls");
    Sleep(400);
    printf("正 ");
    Sleep(400);
    printf("在 ");
    Sleep(400);
    printf("出 ");
    Sleep(400);
    printf("牌 ");
    Sleep(400);
    printf(". ");
    Sleep(400);
    printf(". ");
    Sleep(400);
    printf(". ");
    Sleep(800);
    judge(table.data[table.top], 1);
    system("cls");
    printf("玩家2 开始回合!!\n\n\n\n");
    printtable();
    table.top++;
    table.data[table.top] = p2.data[p2.head];
    table.col[table.top] = p2.col[p2.head];
    p2.head++;
    Sleep(600);
    printf("玩 ");
    Sleep(400);
    printf("家 ");
    Sleep(400);
    printf("2 ");
    Sleep(400);
    printf("正 ");
    Sleep(400);
    printf("在 ");
    Sleep(400);
    printf("出 ");
    Sleep(400);
    printf("牌 ");
    Sleep(400);
    printf(". ");
    Sleep(400);
    printf(". ");
    Sleep(400);
    printf(". ");
    Sleep(1000);
    judge(table.data[table.top], 2);
    return;
}

void judge(int a, int player)
{
    int i, j, sum = 2;
    if(player == 1)
    {
        for(i = table.top-1; i >= 1; i--, sum++)
        {
            if(a == table.data[i] || ((a == 53 || a == 54) && (table.data[i] == 53 || table.data[i] == 54)))
            {
                for(j = table.top; j >= i; j--)
                {
                    p1.data[p1.tail] = table.data[table.top];
                    p1.col[p1.tail] = table.col[table.top];
                    p1.tail++;
                    table.top--;
                }
                break;
            }
        }

        if(i != 0)
        {
            system("cls");
            Sleep(400);
            printf("玩 ");
            Sleep(400);
            printf("家 ");
            Sleep(400);
            printf("1 ");
            Sleep(400);
            printf("赢 ");
            Sleep(400);
            printf("了 ");
            Sleep(400);
            printf("%d ", sum);
            Sleep(400);
            printf("张");
            Sleep(400);
            printf("牌 ");
            Sleep(400);
            printf("! ");
            Sleep(400);
            printf("! ");
            Sleep(400);
            printf("! ");
            Sleep(2000);
            system("cls");
        }
    }
    else if(player == 2)
    {
        for(i = table.top-1; i >= 1; i--, sum++)
        {
            if(a == table.data[i] || ((a == 53 || a == 54) && (table.data[i] == 53 || table.data[i] == 54)))
            {
                for(j = table.top; j >= i; j--)
                {
                    p2.data[p2.tail] = table.data[table.top];
                    p2.col[p2.tail] = table.col[table.top];
                    p2.tail++;
                    table.top--;
                }
                break;
            }
        }

        if(i != 0)
        {
            system("cls");
            Sleep(400);
            printf("玩 ");
            Sleep(400);
            printf("家 ");
            Sleep(400);
            printf("2 ");
            Sleep(400);
            printf("赢 ");
            Sleep(400);
            printf("了 ");
            Sleep(400);
            printf("%d ", sum);
            Sleep(400);
            printf("张");
            Sleep(400);
            printf("牌 ");
            Sleep(400);
            printf("! ");
            Sleep(400);
            printf("! ");
            Sleep(400);
            printf("! ");
            Sleep(2000);
            system("cls");
        }
    }
    return;
}

void game()
{
    deal();
    getchar();

    while(p1.head != p1.tail && p2.head != p2.tail)
    {
        system("cls");
        int i;
        printf("玩家1 开始回合!!\n\n\n\n");
        printp1();
        printtable();
        printf("按回车来出牌\n");
        getchar();
        table.top++;
        table.data[table.top] = p1.data[p1.head];
        table.col[table.top] = p1.col[p1.head];
        p1.head++;
        printzzz();
    }

    if(p1.head == p1.tail)
    {
        printf("恭喜您取得了胜利!!!\n");
        printf("感谢使用本程序\n");
        system("pause");
    }
    else
    {
        printf("你没有牌了!");
        printf("不好意思,您输了。。。\n");
        printf("不要灰心,可以再来一局!!\n");
        system("pause");
    }
    return;
}

void ask()
{
    char ch;

    system("cls");
    printf("你确定要退出?\n");
    printf("(输入y确认对出)\n");
    printf("Y/N\n");
    scanf("%c", &ch);

    if(ch == 'y' || ch == 'Y')
    {
        exit(0);
    }
    else
    {
        return;
    }
}

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值