我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言实战之纸牌游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言实战之纸牌游戏

1. 基本要求

  • 一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;
  • 每轮每人各发5张牌,各自以这5张牌建立二叉排序树;
  • 由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比3大的牌,没有则选择不出;
  • 最先出完的人获胜。

2. 运行界面

1. 首页面

2. 游戏说明

3. 开始游戏

4. 开始出牌

5. 游戏结束

3. 代码解释 


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

int card[5][2];	 // 分别标记玩家和用户已经出过的牌 
int playercard[5];	 // 玩家的手牌 
int computercard[5]; // 电脑的手牌 

char bhuase[5];
char chuase[5];

typedef struct node
{
	int data;
	struct node *LChild;
	struct node *RChild;
}node;

typedef struct tree
{
	int data;
	struct node *LChild;
	struct node *RChild;
}tree;

// 游戏说明
void PlayingCardsyxsm()
{
	printf(" 每轮每人各发5张牌,各自以五张牌建立二叉树,由用户先出,轮流出牌,\n");
	printf(" 每次只能出一张并且要比别人出的大,\n");
	printf(" 如:用户出3,计算机则要算出比3大的牌,没有则选择不出;\n");
	printf(" 最先出完的人获胜。\n");
}

// 发牌
void PlayingCardsfp()	 
{
	int player;
	int computer;
	// 玩家和电脑各发五张牌 
	for(int i = 0; i < 5; i ++ ){
		player = rand() % 9 + 2;
		printf("玩家发到的牌:%d \n", player); 
		playercard[i] = player;
		computer = rand() % 9 + 2;
		printf("电脑发到的牌:%d \n", computer); 
		computercard[i] = computer;
	}
}

// 出牌 
void PlayingCardscp()
{
	int player = 0;	// 玩家当前回合出的牌 
	int computer = 0;	// 电脑当前回合出的牌 
	int playercount = 0;	// 玩家的出牌数 
	int computercount = 0;	// 电脑的出牌数 
	bool flag = false; 
	// 当每次都出现最大值时,游戏同样最多进行5回合 
	for(int m = 0; m < 5; m ++ )
	{
		// 在双方都有牌出的时候,一共最多进行5回合出牌 
		for(int k = 0; k < 5; k ++ )
		{
			for(int j = 0; j < 5; j ++ )
			{
				// 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 
				if(playercard[j] > computer && card[j][0] == 0)
				{
					printf("玩家出牌%c%d\n", bhuase[j],playercard[j]);
					playercount ++ ;	 // 玩家出牌数+1 
					// 标记玩家已经出过这张牌了 
					card[j][0] = 1;
					player = playercard[j]; 
					Sleep(800);		// 在头函数#include <windows.h>中,起到休眠程序的作用 
					break;
				}
			}
			
			// 若果玩家已经出完5张牌,则玩家获胜,退出循环 
			if(playercount == 5)
			{
				printf("玩家赢了!"); 
				flag = true;
				break;
			}

			for(int j = 0; j < 5; j ++ )
			{
				// 确定当前牌可以出,大于对方的出牌,且自己没有出过这张牌 
				if(computercard[j] > player && card[j][1] == 0)
				{
					printf("电脑出牌%c%d\n", chuase[j],computercard[j]);
					computercount ++ ;  // 电脑出牌数+1 
					// 标记电脑已经出过这张牌了 
					card[j][1] = 1;
					computer = computercard[j];
					Sleep(800);
					break;
				}
			}
			
			// 若果电脑已经出完5张牌,则电脑获胜,退出循环 
			if(computercount == 5)
			{
				printf("电脑赢了!"); 
				flag = true;
				break;
			}
		}
		
		// 如果玩家的牌大于电脑的最大牌后,将电脑当前回合的牌值重置为0,继续进行下一回合 
		if(player > computer) computer = 0;
		// 如果电脑的牌大于玩家的最大牌后,将玩家当前回合的牌值重置为0,继续进行下一回合 
		if(computer > player) player = 0;
		
		if(flag) break;
		
	}
}

// 发完牌后玩家的手牌 
void PlayingCardsxswj()
{
	printf("玩家\n");
	printf("   %d   %d   %d   %d   %d\n", playercard[0], playercard[1], playercard[2], playercard[3], playercard[4], playercard[5]);
}

// 发完牌后电脑的手牌 
void PlayingCardsxsdn()
{
	printf("电脑\n");
	printf("   %d   %d   %d   %d   %d\n", computercard[0], computercard[1], computercard[2], computercard[3], computercard[4], computercard[5]);
}

// 初始化树的头结点为空 
void treechushihua(node *t)
{
	t = NULL;
} 

// 建立平衡二叉树 
node *treecharu(node *t, int key)
{
	// 如果头结点为空,就将当前节点设置为根节点 
	if(t == NULL)
	{
		node *p;
		p = (node*)malloc(sizeof(node));
		p->data = key;
		p->LChild = NULL;
		p->RChild = NULL;
		t = p;
	}
	// 如果头结点不为空,则进行平衡二叉树的插入操作 
	else
	{
		// 插入结点的值小于根节点,则插入左子树 
		if(key < t->data)
			t->LChild = treecharu(t->LChild, key);
		// 插入结点的值大于等于根节点,则插入右子树 
		else
			t->RChild = treecharu(t->RChild, key);
	}
	return t;
}

// 将玩家手牌存储到平衡二叉树中 
node *jianlib(node *t)  
{
	int i, key;
	for(i = 0; i < 5; i ++ )
	{
		key = playercard[i];
		t = treecharu(t, key);
	}
	return t;
} 

// 将电脑手牌存储到平衡二叉树中 
node *jianlic(node *t)  
{
	int i, key;
	for(i = 0; i < 5; i ++ )
	{
		key = computercard[i];
		t = treecharu(t, key);
	}
	return t;
} 

// 顺序输出玩家或电脑手牌 
void treepaixu1(node *t)  
{
	if(t != NULL)
	{
		treepaixu1(t->LChild);
		printf("%d ", t->data);
		treepaixu1(t->RChild);
	}
} 

// 先序遍历玩家平衡二叉树 
void treepaixu2(node *t, int *p)  
{
	if(t == NULL) return;
	else
	{
		// 先序遍历,将玩家手牌有序化 
		treepaixu2(t->LChild,  p);
		playercard[(*p) ++ ] = t->data;
		treepaixu2(t->RChild, p);
	}
}

// 先序遍历电脑平衡二叉树 
void treepaixu3(node *t, int *p)  
{
	if(t == NULL) return;
	else
	{
		// 先序遍历,将电脑手牌有序化 
		treepaixu3(t->LChild, p);
		computercard[(*p) ++ ] = t->data;
		treepaixu3(t->RChild, p);
	}
}  

// 主函数 
int main()
{
	int k = 0;
	// 随机函数,通过时间种子来获取随机数种子,获得随机数 
	srand((unsigned)time(NULL));
	int n = 0;
	// 选择菜单 
	while(k != -1)
	{
		puts("");
		puts("");
		puts(""); 
		printf("\t\t\t ****纸牌游戏****\n");
		printf("\t\t\t****1.游戏说明****\n");
		printf("\t\t\t****2.开始游戏****\n");
		printf("\t\t\t****3.开始出牌****\n");
		printf("\t\t\t****4.游戏结束****\n");
		printf("\t\t\t******************\n");
		puts("");
		printf("\t\t**********************************\n");
		printf("\t\t**********************************\n");
		puts("");
		printf("\t\t\t请输入(1、2、3、4):\n");
		scanf("%d", &k);
		switch(k){
			// 游戏说明 
			case 1: PlayingCardsyxsm(); break;
			// 发牌阶段 
			case 2:{
				// 发牌 
		  		PlayingCardsfp();
		  		
		  		// 建立玩家二叉树 
		  		node *t1 = NULL;
				t1 = jianlib(t1);
				printf("玩家手牌为:"); 
		  		treepaixu1(t1);
		  		
		  		// 建立电脑二叉树 
		  		node *t2 = NULL;
				t2 = jianlic(t2);
				puts("");
				printf("电脑手牌为:"); 
				treepaixu1(t2);
				
				// 玩家手牌有序化 
		  		n = 0;
		  		treepaixu2(t1, &n);
		  		
		  		// 电脑手牌有序化 
				n = 0;
		  		treepaixu3(t2, &n);
		  		
		  		puts("");
		  		// 输出玩家和电脑的手牌 
		  		PlayingCardsxswj();
		  		PlayingCardsxsdn();
		 		break;
	  		}
	  		// 出牌阶段 
			case 3:{
				PlayingCardscp();
				break;
	 		}
	 		// 退出游戏  
			case 4:k=-1; break;
		}
	}
	return 0;
}          

以上就是C语言实战之纸牌游戏的详细内容,更多关于C语言纸牌游戏的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言实战之纸牌游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎样用C语言实现纸牌游戏

今天就跟大家聊聊有关怎样用C语言实现纸牌游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 基本要求一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人
2023-06-22

C语言如何实现空战游戏

本篇内容介绍了“C语言如何实现空战游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、项目描述和成果展示项目描述: 在以往的程序中进行
2023-06-30

C语言如何实现扑克牌游戏

这篇文章主要介绍C语言如何实现扑克牌游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 设计目的扑克牌是我们从小玩到大的纸牌类小游戏,我们有各种玩法跟不同的规则。我之所以选择的这个扑克牌,是因为我觉得可以提高我的
2023-06-22

怎么用C语言实现游戏坦克大战

本篇内容主要讲解“怎么用C语言实现游戏坦克大战”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现游戏坦克大战”吧!首先就是我们载入图片的函数tupian.cpp# include "
2023-06-25

C语言游戏项目球球大作战怎么实现

这篇文章的内容主要围绕C语言游戏项目球球大作战怎么实现进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!项目代码 直接进入代码阶段吧,大家认真观看。1
2023-06-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录