C++21点纸牌游戏

最近很少去刷题了,一心在搞课程设计。自己觉得搞得不咋样,还好,自己过了。不管做的怎么样知识是自己编的,不会随便到网上找别人的代码去蒙老师。

把代码贴下来,也算是完成这学期的一个总结吧,把C++彻底弄懂吧。

    游戏分为单人和多人游戏。我就把它分为了两个类,一个单人游戏,一个多人游戏的类,并且由多人派生出单人游戏的类。

代码放在三个文件里面:

  game_class.h文件中代码如下:

#define N 10
using namespace std;

void StartMenu();  //本文件是包含类的声明和函数的声明。 
int Menu(); 
void Exit();

class Game{
protected:
	  int color[N][N];     
      int num[N][N];
	  int currentOdds[N];
	  char name[N][20] ;
	  int money[N];
	  int score[N];
	  int visit[N];
	  int hands[N];
	  int e[N];
public:
	Game(){                                //构造函数
        for(int i=0;i

game_class.cpp中代码如下:

#include
#include
#include
#include
#include
#include
#include"game_class.h"
using namespace std;

char PokeColor[4] = {3,4,5,6};
char PokeNum[13] = {'2','3','4','5','6','7','8','9','I','J','Q','K','A'};
int n,stake,h=0,flag=0;                    //玩家总数        //记录庄家姓名

void StartMenu()  //游戏起始界面,基类game
{
	char load[]="▋☆☆★☆☆█";
	cout<<"\t╔═══════════════════════╗\t\n";
	cout<<"\t    ≧▂≦ 欢迎来到二十一点纸牌游戏 ≧▂≦\t\n\t\t";
	for(int i = 0; i <= strlen(load); ++i)
	{
		cout<>ch){
		if('0'<=ch[0]&&ch[0]<='4') break;
		else cout<<"选择无效!,请重新输入:";
	}
	switch(ch[0]){
	    case '0':return 0;
		case '1':return 1;
		case '2':return 2;
		case '3':return 3;
		case '4':return -1;		
	}
	}
}

void Game::Help(){                //帮助函数,基类game
	cout<<"/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n\n";
	cout<<"游戏起源\n"<<"21点游戏为一款极具趣味性的牌类游戏,\n"
		<<"最早出现在十六世纪,起源于法国,法语称:vingt-et-un \n"
		<<"英国并广泛流传,如果玩家拿到黑心A和黑心J,就会\n"
		<<"给予额外的奖励,英文的名字叫黑杰克(Blackjack)\n"
	    <<"游戏规则:\n"
	    <<"21点一般用到1-8副牌。庄家给每个玩家发两张明牌,牌面朝上面;\n"
		<<"给自己发两张牌,一张牌面朝上(叫明牌),一张牌面朝下(叫暗牌)。\n"
		<<"大家手中扑克点数的计算是:A ,K、Q、J 和 10 牌都算作 10 点。\n"
		<<"可以随意要多少张。目的是尽量往21点靠,靠得越近越好,最好就是21点了。 \n"
		<<"在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Bust)\n"
		<<"游戏也就结束了。假如玩家没爆掉,又决定不再要牌了,这时庄家就把他的那\n"
		<<"一般到17点或17点以上不再拿牌,但也有可能15到16点甚至12到13点就不再拿牌\n"
		<<"张暗牌打开来。18到19点继续拿牌.假如庄家爆掉了,那他就输了。假如他没爆掉,\n"
		<<"或者那么你就与他比点数大小,大为赢。一样的点数为平手,你可以把你的赌注拿\n"
        <<"回来。如果拿牌拿到手中有5张牌,并且总数不到21点,那这种情况能压住一切牌型(\n"
		<<"当然5张加起来一共21点更好),但某些玩法中不支持此规则。\n";
    	cout<<"/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n\n";
}

void Game::ShowPoke(char i,char j)    //显示扑克,基类game
{
	cout<<"┌───┐"< 21){
		cout<_<)o ~~!!!"<>n;
	cout<<"输入庄家姓名:";
	cin>>name[n-1];
	strcpy(name[n-1],"庄家");
	for(i=0;i>name[i];
	}
	cout<<"输入最小的赌注:";
	cin>>stake;
	for(i=0;i>ch){
		if(ch[0]!='y'&&ch[0]!='y'&&ch[0]!='N'&&ch[0]!='n')
		 cout<<"输入有误,请重新输入:";
		else break;
	}
	if(ch[0]=='y'||ch[0]=='Y') return true;
	else return false;
}

void Game:: Result(int r)
{
	if(score[n-1]<=16&&r) {cout<<"庄家你的点数小于十六,需要发张牌\n"; GetCard(n-1,1);}
	Show(0);
	for(int i=0;i21) {
	 cout<<"玩家们赢了:"<21){ cout<score[n-1]){ cout<>e[i];
		money[i]+=e[i]; 
	}
	cout<>temp){	
		if(temp<=money[i]&&temp>=stake){
			currentOdds[i] += temp;
			money[i]-= temp;
			break;
		}
		cout<<"资金不足,重新输入:";
	}
	 currentOdds[i]+=stake;
	 money[i] -= stake;
}

bool Game::GetCard(int i,int f)
{
	int g,r,tmp;
	 if(!visit[i])
		{
		 if(!f){
			 cout<=10) tmp=10;
		 else tmp=g+2;		
		 num[i][hands[i]] = g;
		 color[i][hands[i]++] = r;
		 score[i] += tmp;
		 cout<=10) tmp=10;
		 else tmp=g+2;		
		 num[1][hands[1]] = g;
		 color[1][hands[1]++] = r;
		 score[1] += tmp;
		 cout<>n>>flag>>stake;
	  for(int i=0;i>name[i]>>money[i];
	  }	 
	  infile.close();
	  cout<<"读取成功!"<>n>>flag>>stake;
	 // cout<>name[i]>>money[i];
	  }	 
	  infile.close();
	  cout<<"读取成功!"<>name[0];	  
	  strcpy(name[1],"电脑");
	  cout<<"游戏最小赌金为10"<21) break;
	  if(!game::computer()) g++;
	  if(score[0]>21) break;
	  cout<16){ cout<<"电脑加注10"<21) cout<<"玩家引爆了,玩家你输了"<21){ cout<<"电脑引爆了,恭喜你赢了"<21&&score[1]>21||score[1]==score[0]) {cout<<"平手"<

main.cpp中代码如下:

#include
#include   //system color 
#include
#include"game_class.h"
using namespace std;

extern int n,flag;      //局外变量。 

int main(int argc, char *argv[])
{
	int f;	
	Game multi;
	game smpile;
	StartMenu ();
	system("color 5");
	while(1){
	 f=Menu ();
	 if(f==-1) break;
	 if(f==2){ flag=2;   multi.begin(2); }	 
	 if(f==1){ flag=1;  smpile.begin(1); }
	 if(f==0)
	 { 
		 if(f==0&&!flag)
		 {  
		  ifstream infile("Poke_inf.txt",ios::in);
	      if(!infile){
		   cerr<<"open error!"<>n>>flag;
		  if(flag==1) smpile.Continue();			               
		  else multi.Continue();
		 }
		 if(f&&flag==1) smpile.begin(0);
		 if(f&&flag==2) multi.begin(0);
	 }
	 if(f==3)  multi.Help();
	}
    cout<<"是否保存游戏(y|n):";
	if(multi.choice()){
	  if(flag==1) smpile.Save();
	  else  multi.Save();
	  cout<<"文件保存成功!"<



你可能感兴趣的:(课程设计)