c语言用栈实现纸牌游戏
时间: 2024-02-03 14:03:38 浏览: 32
下面是一个使用栈实现纸牌游戏的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_CARD 52
#define NUM_SUIT 4
#define NUM_RANK 13
typedef struct {
int suit; // 花色
int rank; // 点数
} Card;
typedef struct {
Card cards[NUM_CARD]; // 存放所有的牌
int top; // 栈顶指针
} Stack;
void init(Stack *stack) {
int i, j, k;
// 初始化牌堆
k = 0;
for (i = 0; i < NUM_SUIT; i++) {
for (j = 0; j < NUM_RANK; j++) {
stack->cards[k].suit = i;
stack->cards[k].rank = j;
k++;
}
}
// 初始化栈顶指针
stack->top = -1;
}
void shuffle(Stack *stack) {
int i, j;
Card tmp;
// 随机交换牌堆中的牌
srand(time(NULL));
for (i = 0; i < NUM_CARD; i++) {
j = rand() % NUM_CARD;
tmp = stack->cards[i];
stack->cards[i] = stack->cards[j];
stack->cards[j] = tmp;
}
}
void push(Stack *stack, Card card) {
// 入栈
if (stack->top < NUM_CARD - 1) {
stack->top++;
stack->cards[stack->top] = card;
}
}
Card pop(Stack *stack) {
// 出栈
Card card = {-1, -1}; // 出错时返回的牌
if (stack->top >= 0) {
card = stack->cards[stack->top];
stack->top--;
}
return card;
}
int main() {
Stack stack;
Card card;
int i;
init(&stack); // 初始化牌堆
shuffle(&stack); // 洗牌
// 发牌
for (i = 0; i < 5; i++) {
card = pop(&stack);
printf("第%d张牌:花色=%d,点数=%d\n", i+1, card.suit, card.rank);
}
return 0;
}
```
这个示例实现了一个简单的纸牌游戏,包括初始化牌堆、洗牌、入栈和出栈等操作。具体来说,它使用一个结构体 `Card` 表示一张牌,使用一个结构体 `Stack` 表示一个牌堆,其中栈顶指针 `top` 初始值为 -1,表示栈为空。在初始化牌堆时,它使用两个循环依次填充所有的牌,然后通过 `rand()` 函数随机交换牌堆中的牌,实现洗牌操作。在发牌时,它使用 `pop()` 函数依次从牌堆中取出5张牌,并显示它们的花色和点数。