综合案例:斗地主
1. 程序概述
这是一个模拟斗地主游戏发牌过程的C语言程序,实现了扑克牌的初始化、洗牌和发牌功能。
2. 功能需求
2.1 扑克牌定义
- 使用结构体
Card
表示一张牌,包含:- 花色属性
suit
(0-3表示普通花色♥♠♦♣,4表示小王,5表示大王) - 点数属性
rank
(0-12对应3-A,2,-1表示大小王)
- 花色属性
2.2 主要功能
- 初始化牌组:
- 创建包含54张牌的牌组(52张普通牌+2张王牌)
- 普通牌按花色(♠,♥,♣,♦)和点数(3-2)排列
- 洗牌功能:
- 使用随机数对牌组进行随机排序
- 确保每次运行洗牌结果不同(基于时间种子)
- 发牌功能:
- 将洗好的牌发给3个玩家
- 每个玩家17张牌
- 剩余3张作为底牌
- 显示功能:
- 打印每个玩家的手牌
- 打印底牌
3. 数据结构
suits[]
: 存储4种花色符号的字符串数组ranks[]
: 存储13个点数等级的字符串数组jokers[]
: 存储大小王描述的字符串数组Card
结构体: 表示单张牌的数据结构- 牌组数组:
deck[54]
- 玩家手牌数组:
player1[17]
,player2[17]
,player3[17]
- 底牌数组:
bottomCards[3]
4. 用户交互
程序运行后自动完成以下流程:
- 初始化牌组
- 洗牌
- 发牌
- 显示发牌结果(3个玩家的手牌和底牌)
5. 输出格式
- 普通牌显示格式:花色+点数(如"♠ 3")
- 王牌显示格式:“小王"或"大王”
- 玩家手牌按顺序显示,每张牌用空格分隔
- 底牌同样格式显示
6. 源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define LEN 54
// 定义扑克牌的花色和点数
const char *suits[] = {
"♥", "♠", "♦", "♣"}; // 花色
const char *ranks[] = {
"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; // 点数
const char *jokers[] = {
"小王","大王"}