模拟三张牌游戏

类别:编程语言 点击:0 评论:0 推荐:

摸拟三张牌游戏,利用两个类,一个“打牌者”,一副“牌”,很方便的模拟三张牌游戏,可以设定玩牌的人数,也可以设定玩的副数,在此基础上,可以很方便的作出各种玩牌的游戏来!

两个类的源代码:

#pragma once
#include "vector"
using namespace std;
typedef vector<int>vectorint;
class pukepai
{

int paicount;
   vector <int> puke;  
    vector <int>::iterator vi;
   void pukepai::shuzhi();
char xianshizifu[8];
//int xianshishuzhi[3];
  void paixianshi(char *paimian);
int paizhi;
    public:
int pukepai::chupai(char *);

pukepai(void);
~pukepai(void);
};

//“牌”的成员函数

#include "stdafx.h"

#include "time.h"
#include ".\pukepai.h"


pukepai::pukepai(void)//初始化一副牌
{
paizhi=-1;
paicount=52;



    

//sort(vecTestScore.begin(), vecTestScore.end());
   // &vecTestScore.size=9;
puke.assign(52,1);
  for (vi=puke.begin()+1; vi != puke.end(); vi++)

*vi=*(vi-1)+1;






 


}
void pukepai::shuzhi()//赋值给牌面,然后删除摸到了的牌
{

paicount--;

paizhi=*vi;

puke.erase(vi);

}

void pukepai::paixianshi(char *paimian)//以日常所见的方式,返回一个牌色和牌面
{

char buf[32]="黑桃 ";
if(paizhi>13&&paizhi<27)
{paizhi=paizhi-13;
strcpy(buf,"红桃 ");

}
if(paizhi>26&&paizhi<40)
{paizhi=paizhi-26;
strcpy(buf,"方块 ");
}
if(paizhi>39&&paizhi<53)
{paizhi=paizhi-39;
strcpy(buf,"草花 ");
}

if(paizhi>10||paizhi==1)
{
if(paizhi==11)
strcat(buf,"J");
if(paizhi==12)
strcat(buf,"Q");
if(paizhi==13)
strcat(buf,"K");
if(paizhi==1)
strcat(buf,"A");
}
else
{
itoa(paizhi,xianshizifu,10);
strcat(buf,xianshizifu);
}
if(paimian!=NULL)
strcpy(paimian,buf);

}
int pukepai::chupai(char *paimian)//进行抽牌
{ if(paicount==0)//如果一副牌已经摸完了
{
return -1;
}


vi=puke.begin();
vi+=rand()%paicount;//随机摸牌
shuzhi();//看摸中了哪个,并且删除那张牌
paixianshi(paimian);//返回摸中的牌色和牌面

return paizhi;
}

pukepai::~pukepai(void)
{
}

//“打牌者”的头文件

#pragma once

class mopai
{

public:
int pai1;
char buf1[8];
int pai2;
char buf2[8];
int pai3;
char buf3[8];


int leixing();

};

//“打牌者”的成员函数

#include "stdafx.h"
#include ".\mopai.h"

int mopai::leixing()
{int tonghuaflag=0;

char buftemp1[8]="";
char buftemp2[8]="";
char buftemp3[8]="";
int temp=0,temp1=0,temp2=0,temp3=0;
temp1=pai1;//把三张牌赋给三个临时变量
temp2=pai2;
temp3=pai3;

if(temp1<temp2)
{temp=temp2;//确保第一个临时变量是最大的那种牌
temp2=temp1;
temp1=temp;}

if(temp1<temp3)
{temp=temp3;//确保第一个临时变量是最大的那种牌
temp3=temp1;
temp1=temp;}

if(temp2<temp3)
{temp=temp3;//确保第二个临时变量是第二大的那种牌
temp3=temp2;
temp2=temp;}

      strncpy(buftemp1,buf1,strlen("黑桃"));
        strncpy(buftemp2,buf2,strlen("黑桃"));
        strncpy(buftemp3,buf3,strlen("黑桃"));
if(strcmp(buftemp1,buftemp2)==0&&strcmp(buftemp2,buftemp3)==0)
{tonghuaflag=1;}//摸到了同花,不返回,继续判断,看是否属于同花顺
if((temp1-temp2==1)&&(temp2-temp3==1))//如果三张牌依次递减,说明符合同花顺的基本规则
{    

  if(tonghuaflag==1)
  {
return 1;//摸到了同花顺
  }
  else
  {
  return 2;//摸到了顺子
  }

}
if(tonghuaflag==1)//如果上面没返回,则这里返回同花
return 3;
if(temp1==temp2&&temp2==temp3)//如果三张牌同牌面,不同花色,属于三个头
  return 0;
if(temp1==temp2||temp2==temp3||temp1==temp3)
return 4;//摸到了一对

return -1;//既不属于同花顺,也不属于三个头

}


//完整代码下载:

http://www.cfxy.net/bbs/viewFile.asp?Boardid=46&ID=370
有空欢迎到www.cfxy.net交流

本文地址:http://com.8s8s.com/it/it25951.htm