斗地主c语言实现

编译一个代码,实现给三个玩家随机发牌,打印发牌结果并打印剩余的三张牌。

编写前构思思路

    <1>创建数组存储花色和牌数 二维数组

    <2>随机发牌,使用rand函数

    <3>打印发牌的结果

代码分装 

主函数:( PEOPLE (玩家数:3)  ALL_POKER(总牌数:54)T 10(用T表示10)

ROW (牌堆数组的行数:5) COLUMN (牌堆数组的列数:13)

(全局变量)

//牌
int visited[ROW][COLUMN] = { 0 };
//用户
char players[PEOPLE][17][1024] = { 0 };

#define _CRT_SECURE_NO_WARNINGS 1
#define PEOPLE 3 
#define ALL_POKER 54
#define T 10
#define ROW 5
#define COLUMN 13

//牌
int visited[ROW][COLUMN] = { 0 };
//用户
char players[PEOPLE][17][1024] = { 0 };


#include<stdio.h>
#include<stdlib.h> 
#include<time.h>
#include<string.h>

int main() {
 
	void givePoker(char(*pokers)[COLUMN]);
	void printfPlayerCards();
	void showRemainpokers(char(*pokers)[COLUMN]);

	char pokers[ROW][COLUMN] =
	{
		{'A','2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'},
		{'A','2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'},
		{'A','2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'},
		{'A','2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'},
		{'W','w'}
	};
	givePoker(pokers);
	printfPlayerCards();

	printf("底牌有:\n");
	showRemainpokers(pokers);
	return 0;
}
//发牌
void givePoker(char(*pokers)[COLUMN]){
	void getColor(int color, int* P_pointNum, char* playersCards);
	//播种
	srand((unsigned int)time(NULL));
	//发牌
	for (int i = 0; i < 51; ) {
		int color = rand() % ROW;
		int pointNum = rand() % COLUMN;
		char playersCards[1024] = { 0 };
		//获取花色
		getColor(color, &pointNum, playersCards);
		//判断是否已经发过
		if (visited[color][pointNum] == 0) {
			char num[2] = { *(*(pokers + color) + pointNum),'\0' };
			//将花色和点数拼接到一起
			strcat(playersCards, num);
			//将牌发给用户
			strcpy(players[i / 17][i % 17], playersCards);
			visited[color][pointNum] = 1;//表示牌已经随机
			i++;
		}
	}
}
//获取花色
void getColor(int color, int* P_pointNum, char* playersCards) {
	switch (color) 
	{
	case 0:
		strcpy(playersCards, "梅花");
		break;
	case 1:
		strcpy(playersCards, "方块");
		break;
	case 2:
		strcpy(playersCards, "红桃");
		break;
	case 3:
		strcpy(playersCards, "黑桃");
		break;
	case 4:
		//解决随机大小王的问题
		*P_pointNum = (*P_pointNum) % 2;//?
		strcpy(playersCards, "");
		break;
	}
}
//打印发牌
void printfPlayerCards() {
	for (int i = 0; i < PEOPLE; i++) {
		printf("players:%d\n",i+1);
		for (int j = 0; j < 17; j++) {
			printf("%-8s",*(players+i)+j);
		}
		printf("\n");
	}
}
//显示剩余牌
void showRemainpokers(char(*pokers)[COLUMN]) {
	void getColor(int color, int* P_pointNum, char* playersCards);
	int remain = 1;
	//遍历visited数组,将剩余没有发出去的牌进行存储并打印
	for (int i = 0; i < ROW; i++) {
		for (int j = 0; j < COLUMN; j++) {
			if (remain > 3) {
				return;//循环结束
			}
			if (*(*(visited + i) + j) == 0) {
				char remainCards[1024] = { 0 };
				int pointNum = j;
				getColor(i, &pointNum, remainCards);
				char num[2] = { *(*(pokers+i) + pointNum),'\0'};
				//将花色和点数拼接组成剩余牌
				strcat(remainCards, num);
				printf("%-8s",remainCards);
				remain++;
			}
		}
	}
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
斗地主是一款非常受欢迎的纸牌游戏,以下是一个简单的斗地主 C语言代码示例,仅供参考: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> #define CARD_NUM 54 #define JOKER_NUM 2 #define PLAYER_NUM 3 #define MAX_CARD_NUM 20 int main() { // 初始化随机数种子 srand(time(0)); // 初始化牌 int cards[CARD_NUM]; for(int i=0; i<CARD_NUM; i++) { cards[i] = i; } // 洗牌 for(int i=0; i<CARD_NUM; i++) { int j = rand() % CARD_NUM; int temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } // 发牌 int player_cards[PLAYER_NUM][MAX_CARD_NUM]; int card_index = 0; for(int i=0; i<PLAYER_NUM; i++) { for(int j=0; j<MAX_CARD_NUM; j++) { player_cards[i][j] = cards[card_index]; card_index++; } } // 排序 for(int i=0; i<PLAYER_NUM; i++) { for(int j=0; j<MAX_CARD_NUM-1; j++) { for(int k=j+1; k<MAX_CARD_NUM; k++) { if(player_cards[i][j] > player_cards[i][k]) { int temp = player_cards[i][j]; player_cards[i][j] = player_cards[i][k]; player_cards[i][k] = temp; } } } } // 输出牌 for(int i=0; i<PLAYER_NUM; i++) { printf("Player %d: ", i+1); for(int j=0; j<MAX_CARD_NUM; j++) { int card = player_cards[i][j]; if(card == 52) { printf("Small joker "); } else if(card == 53) { printf("Big joker "); } else { int color = card / 13; int num = card % 13 + 1; switch(color) { case 0: printf("Club "); break; case 1: printf("Diamond "); break; case 2: printf("Heart "); break; case 3: printf("Spade "); break; } if(num <= 10) { printf("%d ", num); } else if(num == 11) { printf("J "); } else if(num == 12) { printf("Q "); } else if(num == 13) { printf("K "); } } } printf("\n"); } return 0; } ``` 这个代码实现斗地主的基础功能,包括洗牌、发牌、排序和输出牌。但是这只是一个简单的示例,如果你想要实现更完整的斗地主游戏,需要考虑更多的细节和规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值