美文网首页算法程序员
小猫钓鱼的游戏算法

小猫钓鱼的游戏算法

作者: zl520k | 来源:发表于2018-03-27 15:32 被阅读16次

目前是模拟是两个人对战的。使用栈和队列模拟。

#define kCardSize 52

typedef struct stack{

    int data[kCardSize];

    int top;

}*StackP;

typedef struct stack Stack;

typedef  struct queue{

    int data[kCardSize];

    int header,tail;

}*QueueP;

typedef struct queue Queue;

void initCard(void);

void insertQueue(QueueP aQueue,StackP aStack);

void deleteQueue(QueueP aQueue,StackP aStack,int t,int mark[]);

int isEmpty(QueueP aQueue);

#include "CardGame.h"

void initData(QueueP aQueue){

    aQueue->header = 0;

    aQueue->tail = 0;

    for (int i = 0; i < kCardSize; ++i) {

        aQueue->data[i] = 0;

    }

    srand((unsigned int)time(NULL));

    for (int i = 0; i < kCardSize/2; ++i) {

        aQueue->data[i] = rand()%12+1;

        aQueue->tail++;

        printf("%d ",aQueue->data[i]);

    }

}

void initCard(void)

{

    QueueP queue1 = (QueueP)malloc(sizeof(Queue));

    QueueP queue2 = (QueueP)malloc(sizeof(Queue));

    initData(queue1);

    printf("\n");

    initData(queue2);

    StackP stack = (StackP)malloc(sizeof(Stack));

    for (int i = 0; i < kCardSize; ++i) {

        stack->data[i] = 0;

    }

    stack->top = 0;

    int mark[kCardSize/2] = {0};

    for (;!isEmpty(queue1)&&!isEmpty(queue2);) {

        int t = queue1->data[queue1->header];

        if (mark[t] == 0) {

            mark[t] = 1;

            insertQueue(queue1, stack);

        }

        else{

            deleteQueue(queue1,stack,t,mark);

        }

        t = queue2->data[queue2->header];

        if (mark[t] == 0) {

            mark[t] = 1;

            insertQueue(queue2, stack);

        }

        else{

            deleteQueue(queue2,stack,t,mark);

        }

    }

    if (isEmpty(queue1)) {

        printf("\nwin-1\n");

    }

    else if (isEmpty(queue1)){

        printf("\nwin-2\n");

    }

    else if (isEmpty(queue1)&&isEmpty(queue1))

    {

        printf("win-1-2\n");

    }

    if (queue1) {

        free(queue1);

        queue1 = NULL;

    }

    if (queue2) {

        free(queue2);

        queue2 = NULL;

    }

    if (stack) {

        free(stack);

        stack = NULL;

    }

}

void insertQueue(QueueP aQueue,StackP aStack){

    aStack->data[aStack->top] = aQueue->data[aQueue->header];

    aQueue->data[aQueue->header] = 0;

    aQueue->header++;

    if (aQueue->header >= kCardSize) {

        aQueue->header = aQueue->header%kCardSize;

    }

    aStack->top++;

}

void deleteQueue(QueueP aQueue,StackP aStack,int t,int mark[]){

    aQueue->data[aQueue->tail] = t;

    aQueue->tail++;

    aStack->top--;

    if (aQueue->tail >= kCardSize) {

        aQueue->tail = aQueue->tail%kCardSize;

    }

    while ((aStack->top >= 0)&&(t != aStack->data[aStack->top])) {

        mark[aStack->data[aStack->top]] = 0;

        aQueue->data[aQueue->tail] = aStack->data[aStack->top];

        aStack->data[aStack->top] = 0;

        aStack->top--;

        aQueue->tail++;

        if (aQueue->tail >= kCardSize) {

            aQueue->tail = aQueue->tail%kCardSize;

        }

    }

    if ((aStack->top >= 0)&&(t == aStack->data[aStack->top])) {

        mark[aStack->data[aStack->top]] = 0;

        aQueue->data[aQueue->tail] = aStack->data[aStack->top];

        aStack->data[aStack->top] = 0;

    }

    aQueue->data[aQueue->header] = 0;

    aQueue->header++;

    if (aQueue->header >= kCardSize) {

        aQueue->header = aQueue->header%kCardSize;

    }

    if (aStack->top < 0) {

        aStack->top = 0;

    }

}

int isEmpty(QueueP aQueue){

    for (int i = 0;i < kCardSize; ++i) {

        if (aQueue->data[i]) {

            return 0;

        }

    }

    return 1;

}

相关文章

  • 小猫钓鱼的游戏算法

    目前是模拟是两个人对战的。使用栈和队列模拟。 #define kCardSize 52 typedef stru...

  • 重拾算法Day07-小猫钓鱼

    小猫钓鱼游戏

  • 纸牌游戏-小猫钓鱼

    规则: 星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一...

  • 一道简单的“小猫钓鱼”游戏算法

    “小猫钓鱼”纸牌游戏规则描述 将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈...

  • C++小猫钓鱼游戏

    #include#includeusing namespace std; struct queue { int d...

  • 13/60  张望的小猫

    小时候我们都听说过《小猫钓鱼》的故事,故事内容讲的是:猫妈妈带着小猫到小河边钓鱼,小猫三心二意,钓鱼的时...

  • 小猫钓鱼🎣

    老猫和小猫一块儿在河边钓鱼。 一只蜻蜓飞来了。小猫看见了,放下钓鱼竿,就去捉蜻蜓。蜻蜓飞走了,小猫没捉着,空着手回...

  • 小猫钓鱼

    年纪一大把了,但我始终是那只钓鱼的小猫。无论年纪怎么增长,我永远无法学会像一只老猫那样钓鱼。 今天是星期天,没有应...

  • 小猫钓鱼

    僵尸打开了你的脑袋,失望地摇了摇头,走开了!旁边的屎壳郎眼睛亮了 我看你像书包( ꒪ д꒪ ⊂彡))Д´) 小猫钓...

  • 小猫钓鱼

    秋秋 2018-3-21

网友评论

    本文标题:小猫钓鱼的游戏算法

    本文链接:https://www.haomeiwen.com/subject/aklaoxtx.html