设计一个C语言程序,该程序是一个24点的扑克牌游戏,玩家与庄家依次要牌,玩家和庄家最多可以要5张牌,如果牌的点数超过24,则为爆牌,自动出局;在不超过24点的情况下,玩家与庄家比较牌点数的大小,大者为赢,程序中一共有13张扑克牌可以随机抽取,大于10的点数为10
时间: 2024-03-12 10:49:18 浏览: 31
以下是一个简单的C语言程序实现24点扑克牌游戏的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* 扑克牌结构体 */
struct card {
char suit; // 花色
int value; // 点数
};
/* 初始化扑克牌 */
void init_cards(struct card *cards) {
char suits[] = {'S', 'H', 'C', 'D'};
int values[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10};
int i, j, k = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 13; j++) {
cards[k].suit = suits[i];
cards[k].value = values[j];
k++;
}
}
}
/* 洗牌 */
void shuffle_cards(struct card *cards) {
int i, j;
struct card temp;
srand((unsigned int)time(NULL));
for (i = 0; i < 52; i++) {
j = rand() % 52;
temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}
/* 计算牌点数 */
int count_points(struct card *cards, int n) {
int i, points = 0;
for (i = 0; i < n; i++) {
points += cards[i].value;
}
return points;
}
/* 显示手牌 */
void show_cards(struct card *cards, int n, int is_dealer) {
int i;
if (is_dealer) {
printf("庄家手牌:");
for (i = 1; i < n; i++) {
printf("%c%d ", cards[i].suit, cards[i].value);
}
printf("\n");
} else {
printf("玩家手牌:");
for (i = 0; i < n; i++) {
printf("%c%d ", cards[i].suit, cards[i].value);
}
printf("\n");
}
}
/* 主函数 */
int main() {
struct card cards[52];
int i, n_player = 2, n_dealer = 2, points_player, points_dealer;
char choice;
init_cards(cards);
shuffle_cards(cards);
/* 发牌 */
struct card hand_player[5], hand_dealer[5];
for (i = 0; i < n_player; i++) {
hand_player[i] = cards[i];
}
for (i = 0; i < n_dealer; i++) {
hand_dealer[i] = cards[n_player + i];
}
/* 玩家要牌 */
i = n_player;
do {
points_player = count_points(hand_player, i);
if (points_player > 24) {
printf("玩家爆牌了!\n");
return 0;
}
show_cards(hand_player, i, 0);
printf("是否要牌?(y/n)");
scanf(" %c", &choice);
if (choice == 'y') {
hand_player[i] = cards[n_player + n_dealer + i];
i++;
}
} while (choice == 'y' && i < 5);
/* 庄家要牌 */
i = n_dealer;
do {
points_dealer = count_points(hand_dealer, i);
if (points_dealer > 24) {
printf("庄家爆牌了!\n");
return 0;
}
if (points_dealer < 17) {
hand_dealer[i] = cards[n_player + i];
i++;
}
} while (points_dealer < 17 && i < 5);
/* 比较双方手牌点数 */
points_player = count_points(hand_player, n_player);
points_dealer = count_points(hand_dealer, n_dealer);
show_cards(hand_player, n_player, 0);
show_cards(hand_dealer, n_dealer, 1);
if (points_player > points_dealer) {
printf("玩家赢了!\n");
} else if (points_player < points_dealer) {
printf("庄家赢了!\n");
} else {
printf("平局!\n");
}
return 0;
}
```
这个程序中,我们使用了结构体存储扑克牌的点数和花色,使用函数分别实现了初始化扑克牌、洗牌、计算牌点数、显示手牌等功能。在主函数中,我们定义了两个数组分别存储玩家和庄家的手牌,通过循环实现玩家和庄家依次要牌的过程,最后比较双方手牌的点数,输出获胜者。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)