最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)戰(zhàn)之紙牌游戲

 更新時(shí)間:2021年12月17日 16:10:22   作者:在人間負(fù)債^  
這篇文章主要為大家介紹了通過C語言實(shí)現(xiàn)的紙牌游戲的示例代碼,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下

1. 基本要求

  • 一副沒有花牌(J、Q、K、A、大小王)的撲克牌,兩個(gè)人進(jìn)行紙牌游戲,其中一個(gè)人為用戶,另一個(gè)人為計(jì)算機(jī);
  • 每輪每人各發(fā)5張牌,各自以這5張牌建立二叉排序樹;
  • 由用戶先出,輪流出牌,每次只能出一張并且要比別人出的大,如:用戶出3,計(jì)算機(jī)則要出比3大的牌,沒有則選擇不出;
  • 最先出完的人獲勝。

2. 運(yùn)行界面

1. 首頁面

2. 游戲說明

3. 開始游戲

4. 開始出牌

5. 游戲結(jié)束

3. 代碼解釋?

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

int card[5][2];	 // 分別標(biāo)記玩家和用戶已經(jīng)出過的牌 
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(" 每輪每人各發(fā)5張牌,各自以五張牌建立二叉樹,由用戶先出,輪流出牌,\n");
	printf(" 每次只能出一張并且要比別人出的大,\n");
	printf(" 如:用戶出3,計(jì)算機(jī)則要算出比3大的牌,沒有則選擇不出;\n");
	printf(" 最先出完的人獲勝。\n");
}

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

// 出牌 
void PlayingCardscp()
{
	int player = 0;	// 玩家當(dāng)前回合出的牌 
	int computer = 0;	// 電腦當(dāng)前回合出的牌 
	int playercount = 0;	// 玩家的出牌數(shù) 
	int computercount = 0;	// 電腦的出牌數(shù) 
	bool flag = false; 
	// 當(dāng)每次都出現(xiàn)最大值時(shí),游戲同樣最多進(jìn)行5回合 
	for(int m = 0; m < 5; m ++ )
	{
		// 在雙方都有牌出的時(shí)候,一共最多進(jìn)行5回合出牌 
		for(int k = 0; k < 5; k ++ )
		{
			for(int j = 0; j < 5; j ++ )
			{
				// 確定當(dāng)前牌可以出,大于對(duì)方的出牌,且自己沒有出過這張牌 
				if(playercard[j] > computer && card[j][0] == 0)
				{
					printf("玩家出牌%c%d\n", bhuase[j],playercard[j]);
					playercount ++ ;	 // 玩家出牌數(shù)+1 
					// 標(biāo)記玩家已經(jīng)出過這張牌了 
					card[j][0] = 1;
					player = playercard[j]; 
					Sleep(800);		// 在頭函數(shù)#include <windows.h>中,起到休眠程序的作用 
					break;
				}
			}
			
			// 若果玩家已經(jīng)出完5張牌,則玩家獲勝,退出循環(huán) 
			if(playercount == 5)
			{
				printf("玩家贏了!"); 
				flag = true;
				break;
			}

			for(int j = 0; j < 5; j ++ )
			{
				// 確定當(dāng)前牌可以出,大于對(duì)方的出牌,且自己沒有出過這張牌 
				if(computercard[j] > player && card[j][1] == 0)
				{
					printf("電腦出牌%c%d\n", chuase[j],computercard[j]);
					computercount ++ ;  // 電腦出牌數(shù)+1 
					// 標(biāo)記電腦已經(jīng)出過這張牌了 
					card[j][1] = 1;
					computer = computercard[j];
					Sleep(800);
					break;
				}
			}
			
			// 若果電腦已經(jīng)出完5張牌,則電腦獲勝,退出循環(huán) 
			if(computercount == 5)
			{
				printf("電腦贏了!"); 
				flag = true;
				break;
			}
		}
		
		// 如果玩家的牌大于電腦的最大牌后,將電腦當(dāng)前回合的牌值重置為0,繼續(xù)進(jìn)行下一回合 
		if(player > computer) computer = 0;
		// 如果電腦的牌大于玩家的最大牌后,將玩家當(dāng)前回合的牌值重置為0,繼續(xù)進(jìn)行下一回合 
		if(computer > player) player = 0;
		
		if(flag) break;
		
	}
}

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

// 發(fā)完牌后電腦的手牌 
void PlayingCardsxsdn()
{
	printf("電腦\n");
	printf("   %d   %d   %d   %d   %d\n", computercard[0], computercard[1], computercard[2], computercard[3], computercard[4], computercard[5]);
}

// 初始化樹的頭結(jié)點(diǎn)為空 
void treechushihua(node *t)
{
	t = NULL;
} 

// 建立平衡二叉樹 
node *treecharu(node *t, int key)
{
	// 如果頭結(jié)點(diǎn)為空,就將當(dāng)前節(jié)點(diǎn)設(shè)置為根節(jié)點(diǎn) 
	if(t == NULL)
	{
		node *p;
		p = (node*)malloc(sizeof(node));
		p->data = key;
		p->LChild = NULL;
		p->RChild = NULL;
		t = p;
	}
	// 如果頭結(jié)點(diǎn)不為空,則進(jìn)行平衡二叉樹的插入操作 
	else
	{
		// 插入結(jié)點(diǎn)的值小于根節(jié)點(diǎn),則插入左子樹 
		if(key < t->data)
			t->LChild = treecharu(t->LChild, key);
		// 插入結(jié)點(diǎn)的值大于等于根節(jié)點(diǎn),則插入右子樹 
		else
			t->RChild = treecharu(t->RChild, key);
	}
	return t;
}

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

// 將電腦手牌存儲(chǔ)到平衡二叉樹中 
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);
	}
}  

// 主函數(shù) 
int main()
{
	int k = 0;
	// 隨機(jī)函數(shù),通過時(shí)間種子來獲取隨機(jī)數(shù)種子,獲得隨機(jī)數(shù) 
	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.游戲結(jié)束****\n");
		printf("\t\t\t******************\n");
		puts("");
		printf("\t\t**********************************\n");
		printf("\t\t**********************************\n");
		puts("");
		printf("\t\t\t請(qǐng)輸入(1、2、3、4):\n");
		scanf("%d", &k);
		switch(k){
			// 游戲說明 
			case 1: PlayingCardsyxsm(); break;
			// 發(fā)牌階段 
			case 2:{
				// 發(fā)牌 
		  		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語言實(shí)戰(zhàn)之紙牌游戲的詳細(xì)內(nèi)容,更多關(guān)于C語言紙牌游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于C語言字符串函數(shù)的一些使用心得

    基于C語言字符串函數(shù)的一些使用心得

    以下是對(duì)C語言中字符串函數(shù)的一些使用心得進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-08-08
  • C語言中數(shù)組的一些基本知識(shí)小結(jié)

    C語言中數(shù)組的一些基本知識(shí)小結(jié)

    這篇文章主要介紹了C語言中數(shù)組的一些基本知識(shí)小結(jié),其中重點(diǎn)是對(duì)于數(shù)組的內(nèi)存分配相關(guān)方面的知識(shí)整理,需要的朋友可以參考下
    2016-04-04
  • C語言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析

    C語言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析

    C語言結(jié)構(gòu)體對(duì)齊也是老生常談的話題了,基本上是面試題的必考題,這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體與內(nèi)存對(duì)齊的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Qt自定義圖形實(shí)現(xiàn)拖拽效果

    Qt自定義圖形實(shí)現(xiàn)拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Qt自定義圖形實(shí)現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 使用MinGW使Windows通過gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法

    使用MinGW使Windows通過gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法

    這篇文章主要介紹了使用MinGW使Windows通過gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • C++實(shí)現(xiàn)兩個(gè)有序數(shù)組的合并

    C++實(shí)現(xiàn)兩個(gè)有序數(shù)組的合并

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)兩個(gè)有序數(shù)組的合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳解C++中static的用法

    詳解C++中static的用法

    這篇文章主要介紹了c++中static的用法詳解,C 語言的 static 關(guān)鍵字有三種用途,具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • C++ STL中的常用遍歷算法分享

    C++ STL中的常用遍歷算法分享

    這篇文章主要為大家詳細(xì)介紹了C++ STL中兩個(gè)常用的遍歷算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)與借鑒價(jià)值,感興趣的小伙伴可以參考一下
    2022-12-12
  • MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    如果電腦沒有安裝MinGW-w64 C/C++編譯器,就無法運(yùn)行g(shù)cc命令,本文主要介紹了MinGW-w64 C/C++編譯器下載和安裝的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例

    C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例

    這篇文章主要介紹了C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

北安市| 建阳市| 响水县| 四会市| 奉新县| 平定县| 格尔木市| 康乐县| 兴业县| 杭锦后旗| 军事| 自治县| 岚皋县| 灵武市| 镇坪县| 米泉市| 灵石县| 临武县| 同仁县| 元氏县| 东海县| 农安县| 邳州市| 仲巴县| 兴国县| 新兴县| 苍山县| 东安县| 宣城市| 莱芜市| 沅陵县| 乌拉特后旗| 河西区| 遂昌县| 涡阳县| 广宁县| 北票市| 宣城市| 息烽县| 云浮市| 嘉义县|