⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 扑克牌游戏.cpp

📁 扑克牌游戏,我自己开发的
💻 CPP
📖 第 1 页 / 共 2 页
字号:

/*第1题	扑克牌游戏*/
//编游戏者:顾波波 03303176

//*******************preprocessor directives***********************
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>						// 用来产生随机抽取数
//******************************************************************
class Playing_Card    //扑克类
{
private:
	int m_Value;     //扑克的值
	char m_Face[3];  //扑克的数字大小
	char m_Suit ;    //扑克的花色(黑、红、梅、方)
public:
	Playing_Card();						// 扑克类的构造函数
	int getvalue();                     // 成员函数,用于取扑克的值
	void showcard();					// 显示扑克的数字大小和花色
	void Card_Make(int);                // 给各张牌置面值,数字大小,花色
};

class Deck	//一副扑克(54张)										
{
private:
	Playing_Card m_cardarray[54];			// 定义扑克类数组
	int m_lastdelt;                         // 定义变量,表示扑克编号
public:
	Deck();							     // 初始化构造函数
	void MakeDeck()	;					 // 创建一副完整的扑克牌
	void Deal_One();					 // 从扑克牌的最顶上发一张牌
	void ShowDeck();					 // 在屏幕上显示扑克牌
	void DeckShuff(int);				 // 洗牌(次数为刮号里的整数)
	void showleftdeck();                 // 移去用过的牌并显示
	void Remove_Card();					 // 任意移去一张牌
	void showremainingDeck();            // 显示剩下的牌
	void SendDeck1();                    // 把牌分发给四个玩家(删牌后的)
	void SendDeck2();                    // 把牌分发给四个玩家(不删牌的)
	
};										
//***************************prototypes********************************** 

void Program_Init();					// 程序信息函数
int main();                             // 主函数
void Center_Text(char []);				// 输出刮号里的内容
int get_number();						// 从用户取一个整数
char Get_Key();						    // 程序停止,从用户取一个字符
void DeckMakeDriver();					// 测试扑克牌的各项功能
int getRandInt(int min, int max);	    // 随机抽取一个数
void prog_close();						// 在程序终止前停止程序
		
//****************************Main*************************************

int main()                               //主函数,用来测试各种功能
{
    srand( (unsigned)time( NULL ) );		     // 产生随机数	
	int Card_Number = 0;
	Program_Init();					    // 显示标题
	char t;
	do{
		DeckMakeDriver();			    // 扑克牌主要功能测试函数
		cout<<"要继续玩吗?要按Y不要按N"<<endl;
		cin>>t;
		t=toupper(t);
	}while(t=='Y');
	prog_close();						// 程序终止提示					
	return 1;									
}

Deck :: Deck()				 // 初始化构造函数 
{
	int lastdelt = 0;
	int i;
	for(i=0;i<=53;i++)
	{
		m_cardarray[1] = Playing_Card(); 				
	}								
}									

Playing_Card::Playing_Card()			// 扑克牌类初始化构造函数

{
		int i;                             
		for(i=1;i<=3;)					
		{
			m_Face[i] = ' ';                //置默认值为空
			i++;
		}
		m_Suit = ' ';	                    //置默认值为空				
		m_Value = 0;                        //默认值为0
}

void Program_Init()                    // 在程序开始时输出程序信息
{
	Center_Text("扑克牌游戏");         //输出“扑克牌游戏 ”   
	cout << endl <<"\n" ; 
	Center_Text("编者:顾波波 03303176");  //输出“编者:顾波波 03303176”
    cout << endl <<"\n" ;
	Center_Text("(新建一副扑克牌)按回车继续..");//输出“(新建一副扑克牌)按回车继续..”
	cin.get();
}

char Get_Key()                       // 要求用户输入一个字符并返回这个字符
{
	char x;                                        
	x = cin.get();                  // 取一个字符
	cout << endl;
	return x;                       // 返回字符                             
}
int  Playing_Card::getvalue()       // 成员函数,用于取扑克的值
{
	return m_Value;                // 返回扑克的值
}
void Playing_Card::showcard()                // 输出扑克牌的数值和花色
{		
	cout << "   ";
	cout << m_Face  ;                        // 输出数值
	cout.width(1);
	cout <<  m_Suit;                         // 输出花色
	cout << " ";
	
}

void Center_Text(char ShellText[80])         // 输出刮号里的提醒信息
{
	int length;                              //定义长度变量
	int center;                              //定义变量
	length= strlen(ShellText);               //取字符串长度
	center = (80 - length)/2;
	for(;center!=0;center--)                 //输出空格
	{
		cputs(" ");
	}
	cputs(ShellText);                        //输出提醒信息
}
 
int get_number()                  //要求用户输入一个整数,并返回这个整数
{
	int Input_Integer = 0;
	Center_Text("Please enter an integer between 0 and 51. 52 to quit.");	
	cout << endl;
	cin >> Input_Integer;         // 输入一个整数
	return Input_Integer;         // 返回整数
}



void Playing_Card::Card_Make(int num)     // 给各张牌置面值,数字大小,花色
{
	if(num>=52)
	switch(num)
	{case 52:strcpy(m_Face," w");break;   //置小王
	case 53:strcpy(m_Face," W");break;}   //置大王
	else{
	int i = 0;
	char j;
	int face_num = num % 13;                        // 牌的数字大小                           				 
    if(face_num <= 9)m_Value  = face_num + 1;		// 给牌置面值
	if(face_num >= 10)m_Value = 10;
	switch(face_num)						// 给牌置数字大小
	{
	case 0: strcpy(m_Face," A");break;     
	case 9: strcpy(m_Face,"10");break;
	case 10: strcpy(m_Face," J");break;
	case 11: strcpy(m_Face," Q");break;
	case 12: strcpy(m_Face," K");break;
	default:
		j = char(face_num + 49);		
		
		if(i<3)
		{
			m_Face[i] = ' '; i++;
			m_Face[i] = j;i++;
			m_Face[i] = NULL; 
			break;
		}
	}
	}

  	if(num <= 12)m_Suit = 6;				// 给牌置花色
	if(num >12 && num <= 25)m_Suit = 3;	    // 给牌置花色
	if(num >25 && num <= 38)m_Suit = 5;     // 给牌置花色
	if(num >38 && num <= 51)m_Suit = 4;     // 给牌置花色
    if(num >51 && num <= 53){m_Suit = 1;m_Value = 10;} // 给大小王置色
	
}

void DeckMakeDriver()          //主要功能测试函数
{
	Deck deck_1;                         //定义一个扑克类
	deck_1.MakeDeck();					// 建一副扑克牌
	deck_1.ShowDeck();					// 在屏幕上显示牌
	cout<<endl<<"     按回车洗牌";
	Get_Key();							// 程序暂停
	deck_1.DeckShuff(250);					// 洗牌250次
	deck_1.ShowDeck();                   // 在屏幕上显示牌
	cout<<endl<<"你要删去其中任意一张吗?要按Y不要按N。"<<endl; // 提醒信息
	char x,d;
	cin>>x;                                                   // 输入字符
	x=toupper(x);                                             // 转换为大写
	if(x=='Y') {deck_1.Remove_Card(); deck_1.showremainingDeck();}//删去任意一张,再显示
	else cout<<endl;
	cout<<endl<<"你想分发给四个玩家还是一张一张发?前者按S后者按D。"<<endl;
	cin>>d;
	d=toupper(d);
	if(d=='S'){
		if(x=='Y')deck_1.SendDeck1();                  //把牌分发给四个玩家( 删牌后的)
		else deck_1.SendDeck2();                       //把牌分发给四个玩家( 不删牌的)
	    
	}
    else if(d=='D')
	{
	char y;											
	do
	{
		deck_1.Deal_One();                                      //一张一张发牌
		cout << endl;
		cout <<endl<<"你想把发过的牌删去并显示剩余的牌吗?是按Y,不是按N。";
		cin>>x;
		x=toupper(x);
		if(x=='Y')deck_1.showleftdeck();               //删去已发的牌并显示剩下的
		else cout<<endl;
		cout << endl << endl << "继续发牌按Y,要停止按N。"<< endl; // 选择是否继续
		cin >> y;
		y = toupper(y);
	}while(y == 'Y' );
	}
	else cout<<"error!";
}				

void Deck::MakeDeck()						// 建一副完整的扑克牌
{
	m_lastdelt = 53;								
	while(m_lastdelt >-1)							// 循环直到牌建满为止
	{										
		m_cardarray[m_lastdelt].Card_Make(m_lastdelt);// 为每张牌置面值,大小,花色
		m_lastdelt--;											 
	}										
}

void Deck::ShowDeck()                  //显示扑克牌
{
	int index = m_lastdelt + 1;
	int newline = 0;	               //置行数为0
	Center_Text("扑克牌从头到尾排列");  // 输出信息
	cout << endl;
	while(index<=53)                    //循环输出
	{
		if(newline % 11 == 0) cout << endl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -