扑克牌游戏c语言课程设计

时间: 2023-12-17 21:28:36 浏览: 39
以下是一个简单的扑克牌游戏的C语言课程设计,实现了21点的基本规则: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_CARD_NUM 52 #define MAX_PLAYER_CARD_NUM 5 // 扑克牌结构体 typedef struct { char suit; // 花色 char rank; // 点数 } Card; // 玩家结构体 typedef struct { Card cards[MAX_PLAYER_CARD_NUM]; // 手牌 int card_num; // 手牌数量 int point; // 点数 } Player; // 初始化扑克牌 void init_cards(Card *cards) { char suits[4] = {'S', 'H', 'D', 'C'}; // 花色 char ranks[13] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'X', 'J', 'Q', 'K'}; // 点数 int i, j, k = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 13; j++) { cards[k].suit = suits[i]; cards[k].rank = ranks[j]; k++; } } } // 洗牌 void shuffle_cards(Card *cards) { srand(time(NULL)); int i, j; Card temp; for (i = 0; i < MAX_CARD_NUM; i++) { j = rand() % MAX_CARD_NUM; temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } } // 计算点数 int calc_point(Card *cards, int card_num) { int i, point = 0, ace_num = 0; for (i = 0; i < card_num; i++) { if (cards[i].rank == 'A') { ace_num++; point += 11; } else if (cards[i].rank == 'X' || cards[i].rank == 'J' || cards[i].rank == 'Q' || cards[i].rank == 'K') { point += 10; } else { point += cards[i].rank - '0'; } } while (point > 21 && ace_num > 0) { point -= 10; ace_num--; } return point; } // 发牌 void deal_cards(Card *cards, Player *player, int card_num) { int i; for (i = 0; i < card_num; i++) { player->cards[player->card_num] = cards[i]; player->card_num++; player->point = calc_point(player->cards, player->card_num); } } // 显示牌 void show_cards(Player *player) { int i; printf("Cards: "); for (i = 0; i < player->card_num; i++) { printf("%c%c ", player->cards[i].suit, player->cards[i].rank); } printf("\nPoint: %d\n", player->point); } // 判断是否爆了 int is_busted(Player *player) { return player->point > 21;} // 判断是否21点 int is_21(Player *player) { return player->point == 21; } // 判断是否可以要牌 int can_hit(Player *player) { return player->card_num < MAX_PLAYER_CARD_NUM && player->point < 21; } // 比较点数大小 int compare_point(Player *player1, Player *player2) { if (player1->point > player2->point) { return 1; } else if (player1->point < player2->point) { return -1; } else { return 0; } } int main() { Card cards[MAX_CARD_NUM]; Player player, dealer; int i, choice; init_cards(cards); shuffle_cards(cards); player.card_num = 0; dealer.card_num = 0; deal_cards(cards, &player, 2); deal_cards(cards + 2, &dealer, 2); printf("Player:\n"); show_cards(&player); printf("Dealer:\n"); printf("Cards: %c%c **\n", dealer.cards[0].suit, dealer.cards[0].rank); while (can_hit(&player)) { printf("Do you want to hit? (1 for yes, 0 for no): "); scanf("%d", &choice); if (choice == 1) { deal_cards(cards + 4 + player.card_num, &player, 1); printf("Player:\n"); show_cards(&player); } else { break; } } if (is_busted(&player)) { printf("Player busted! Dealer wins!\n"); } else if (is_21(&player)) { printf("Player got 21 points!\n"); } else { while (dealer.point < 17) { deal_cards(cards + 4 + player.card_num + dealer.card_num, &dealer, 1); } printf("Dealer:\n"); show_cards(&dealer); if (is_busted(&dealer)) { printf("Dealer busted! Player wins!\n"); } else { int result = compare_point(&player, &dealer); if (result == 1) { printf("Player wins!\n"); } else if (result == -1) { printf("Dealer wins!\n"); } else { printf("Tie!\n"); } } } return 0; } ```

相关推荐

最新推荐

recommend-type

C语言实现简易扑克牌游戏

主要为大家详细介绍了C语言实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现扑克牌计算24点

主要为大家详细介绍了C语言如何实现扑克牌计算24点,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言课程设计 扑克牌自动发牌

扑克牌自动发牌 C语言课程设计 源程序 流程图 WORD文档
recommend-type

java扑克牌游戏开发课设

扑克牌游戏是一款受人喜欢的休闲游戏,大多数电脑上都装有这种游戏,很多人都玩过这种扑克牌游戏,都熟悉这种游戏的功能,我所做的这种扑克牌游戏开发理念是基于电脑自带的蜘蛛纸牌游戏,利用java语言实现了蜘蛛纸牌...
recommend-type

21点游戏C++课程设计

21点游戏是一个古老的扑克游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。