为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > c麻将源代码

c麻将源代码

2019-07-18 3页 doc 62KB 115阅读

用户头像

is_179289

暂无简介

举报
c麻将源代码#include"mj.h"#inelude"stdlib.h"#include"time.h"#include"iostream.h"//辅助函数编写CPIayMj::CPIayMj(){pPaiOwn=newPai[13];pPaiNew=newPai;pShowPai=newShowPai[13];pShowNewPai=newShowPai;iCiNum=0;iPongNum=0;iGangNum=0;iPairNum=0;iMark=0;};CPlayMj::~CPlayMj(){delete[]pPaiOwn;de...
c麻将源代码
#include"mj.h"#inelude"stdlib.h"#include"time.h"#include"iostream.h"//辅助函数编写CPIayMj::CPIayMj(){pPaiOwn=newPai[13];pPaiNew=newPai;pShowPai=newShowPai[13];pShowNewPai=newShowPai;iCiNum=0;iPongNum=0;iGangNum=0;iPairNum=0;iMark=0;};CPlayMj::~CPlayMj(){delete[]pPaiOwn;deletepPaiNew;delete[]pShowPai;deletepShowNewPai;};Pai*CPlayMj:aiInPaiOwn(Pai*pPaiRest,intiPaiNum){for(inti=0;i<13;i++){if(pPaiRest.iNum==1)〃对未被吃,碰,杠{if(pPaiRest.iPaiNum==iPaiNum)returnpPaiRest+i;}}returnNULL;}boolCPlayMj::NumInNum(inta,intb){if(a>26||b>26)return0;if(a>=O&&a<=8&&b>=O&&b<=8)return1;if(a>=9&&a<=17&&b>=9&&b<=17)return1;if(a>=18&&a<=26&&b>=18&&b<=26)return1;return0;}boolCPIayMj::lsPair(Pai*pPaiRest){for(inti=0;i<13;i++){.iNum==1).iNum==1)if(pPaiRest.iPaiNum==pPaiNew->iPaiNum&&pPaiRestreturn1;}return0;}voidCPlayMj:air(Pai*pPaiRest){for(inti=0;i<13;i++){if(pPaiRest.iPaiNum==pPaiNew->iPaiNum&&pPaiRest{pPaiRest.iNum=O;pPaiNew->iNum=0;}}}Pai*CPIayMj::GetPaiOwn()_|{returnpPaiOwn;}Pai*CPlayMj::GetNew()|{returnpPaiNew;}boolCPlayMj::GetMark(){returniMark;voidCPIayMj::SetMark(booli){iMark=i;}voidCPIayMj::MyShow(Pai*pTemp)|{intiTemp;ShowPaipShowPai[14];for(inti=0;i<14;i++){iTemp=pTemp.iPaiNum;switch(iTemp/9){case0:pShowPai.Hua=WANG;〃判断是那个牌花:万,条,铜pShowPai.str="万";pShowPai.iPaiNum=iTemp+1;〃从1到9,下标转换为牌号break;case1:pShowPai.Hua=TONG;pShowPai.str="铜";pShowPai.iPaiNum=iTemp-9+1;break;case2:pShowPai.Hua=TIAO;pShowPai.str="条";pShowPai.iPaiNum=iTemp-18+1;break;default:pShowPai.Hua=ZI;switch(iTemp){case27:pShowPai.str="东";break;case28:pShowPai.str="南";break;case29:pShowPai.str="西";break;case30:pShowPai.str="北";break;case31:pShowPai.str="中";break;case32:pShowPai.str="发";break;case33:pShowPai.str="白”;break;default:;};pShowPai.iPaiNum=iTemp;〃字的只有7种,东南西北,中发白};pShowPai.iNum=pTemp.iNum;if(pShowPai.iPaiNum>26)cout<<i+1<<""<<pShowPai.str<&It;""<<pShowPai.iNum<<endl;elsecout&It;<i+1<<""<<pShowPai.iPaiNum<<pShowPai.str<<""<<pShowPai.iNum<<endl;}}//主函数编写boolCPIayMj::lsHu(Pai*pOwn){return0;}voidCPlayMj::Hu(Pai*pOwn){//chara;inti;intj=0;intiTemp;intiTag=0;//if(iPairNum+iGangNum+iPongNum+iCiNum>4){if(iPairNum==7){cout<<"七对子";iMark=1;}if((iPongNum+iGangNum)==4&&(iPairNum==1)){cout<<"碰碰胡";iMark=1;}&&if((iCiNum>=1)&&((iPongNum+iGangNum+iCiNum)==4)(iPairNum==1)){cout<<"平胡”iMark=1;}}if(iMark==1)return;SortPai(14,pOwn);//MyShow(pOwn);//cin>>a;while(pOwn[j].iNum!=1&&j<14)j++;if(j==14||iMark==1)return;〃假如情况是吃的if(iMark==0&&((pOwn[j].iPaiNum<=24&&pOwn[j].iPaiNum>=18)||(pOwn[j].iPaiNum<=15&&pOwn[j].iPaiNum>=9)||(pOwn[j].iPaiNum<=6&&pOwn[j].iPaiNum>=0))){if(pOwn[j].iPaiNum+1==pOwn[j+1].iPaiNum){for(i=j+2;i<14;i++){if(pOwn.iPaiNum==pOwn[j].iPaiNum+2)iTag=i;}/////////////////等换牌if(iTag!=0)|{//可以吃,执行吃的操作一pOwn[j].iNum=0;pOwn[j+1].iNum=0;iTemp=pOwn[j+2].iPaiNum;pOwn[j+2].iPaiNum=pOwn[iTag].iPaiNum;pOwn[iTag].iPaiNum=iTemp;pOwn[j+2].iNum=0;iCiNum++;〃吃的次数加一次Hu(pOwn);iTemp=pOwn[j+2].iPaiNum;pOwn[j+2].iPaiNum=pOwn[iTag].iPaiNum;pOwn[iTag].iPaiNum=iTemp;pOwn[j].iNum=1;pOwn[j+1].iNum=1;pOwn[j+2].iNum=1;iCiNum--;}}}//假如情况是可以碰if(iMark==0&&pOwn[j].iPaiNum==pOwn[j+1].iPaiNum){for(i=j+2;i<14;i++){if(pOwn.iPaiNum==pOwn[j].iPaiNum)iTag=i;}if(iTag!=O){//可以碰,执行碰操作pOwn[j].iNum=0;pOwn[j+1].iNum=0;iTemp=pOwn[j+2].iPaiNum;pOwn[j+2].iPaiNum=pOwn[iTag].iPaiNum;pOwn[iTag].iPaiNum=iTemp;pOwn[j+2].iNum=0;iPongNum++;〃碰的次数加一次Hu(pOwn);iTemp=pOwn[j+2].iPaiNum;pOwn[j+2].iPaiNum=pOwn[iTag].iPaiNum;pOwn[iTag].iPaiNum=iTemp;pOwn[j].iNum=1;pOwn[j+1].iNum=1;pOwn[j+2].iNum=1;iPongNum--;〃有可能碰胡不了,对而可以胡,如55567,55567。pOwn[j].iNum=0;pOwn[j+1].iNum=0;iPairNum++;Hu(pOwn);pOwn[j].iNum=1;pOwn[j+1].iNum=1;iPairNum--;}else{//是对的情况pOwn[j].iNum=0;pOwn[j+1].iNum=0;iPairNum++;Hu(pOwn);pOwn[j].iNum=1;pOwn[j+1].iNum=1;iPairNum--;}}return;}intCPIayMj::lsCi(Pai*pPaiRest){intiCi=0;intiTemp=pPaiNew->iPaiNum;if(iTemp>26&&iTemp<0)return0;//不可以吃if(PaiInPaiOwn(pPaiRest,iTemp-1)&&PaiInPaiOwn(pPaiRest,iTemp-2)&&NumlnNum(iTemp,iTemp-1)&&NumlnNum(iTemp,iTemp-2)){iCi=iCi+1;//第1种吃法}if(PaiInPaiOwn(pPaiRest,iTemp-1)&&PaiInPaiOwn(pPaiRest,iTemp+1)&&NumlnNum(iTemp,iTemp-1)&&NumlnNum(iTemp,iTemp+1)){iCi=iCi+2;〃第2种吃法}if(PaiInPaiOwn(pPaiRest,iTemp+1)&&PailnPaiOwn(pPaiRest,iTemp+2)&&NumlnNum(iTemp,iTemp+1)&&NumlnNum(iTemp,iTemp+2)){iCi=iCi+4;//第3种吃法}returniCi;boolCPIayMj::Ci(intiCi,Pai*pPaiRest){PaiTemp;Pai*pTemp;intiTemp=pPaiNew->iPaiNum;intiNum;intiDrop;iNum=(iCiNum+iGangNum+iPongNum)*3;//下面的三种情况就可以吃if(iCi==1){pTemp=PailnPaiOwn(pPaiRest,iTemp-1);pTemp->iNum=0;Temp.iNum=pPaiOwn[iNum].iNum;Temp.iPaiNum=pPaiOwn[iNum].iPaiNum;pPaiOwn[iNum].iNum=pTemp->iNum;pPaiOwn[iNum].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;/////////////////pTemp=PailnPaiOwn(pPaiRest,iTemp-2);pTemp->iNum=0;Temp.iNum=pPaiOwn[iNum+1].iNum;Temp.iPaiNum=pPaiOwn[iNum+1].iPaiNum;pPaiOwn[iNum+1].iNum=pTemp->iNum;pPaiOwn[iNum+1].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;}if(iCi==2){pTemp=PaiInPaiOwn(pPaiRest,iTemp-1);pTemp->iNum=O;Temp.iNum=pPaiOwn[iNum].iNum;Temp.iPaiNum=pPaiOwn[iNum].iPaiNum;pPaiOwn[iNum].iNum=pTemp->iNum;pPaiOwn[iNum].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;/////////////////pTemp=PailnPaiOwn(pPaiRest,iTemp+1);pTemp->iNum=0;Temp.iNum=pPaiOwn[iNum+1].iNum;Temp.iPaiNum=pPaiOwn[iNum+1].iPaiNum;pPaiOwn[iNum+1].iNum=pTemp->iNum;pPaiOwn[iNum+1].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;}if(iCi==4){pTemp=PailnPaiOwn(pPaiRest,iTemp+1);pTemp->iNum=0;Temp.iNum=pPaiOwn[iNum].iNum;Temp.iPaiNum=pPaiOwn[iNum].iPaiNum;pPaiOwn[iNum].iNum=pTemp->iNum;pPaiOwn[iNum].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;/////////////////pTemp=PaiInPaiOwn(pPaiRest,iTemp+2);pTemp->iNum=0;Temp.iNum=pPaiOwn[iNum+1].iNum;Temp.iPaiNum=pPaiOwn[iNum+1].iPaiNum;pPaiOwn[iNum+1].iNum=pTemp->iNum;pPaiOwn[iNum+1].iPaiNum=pTemp->iPaiNum;pTemp->iNum=Temp.iNum;pTemp->iPaiNum=Temp.iPaiNum;}SortPai(13,GetPaiOwn());ShowOwn();pPaiNew->iNum=0;cout<<"选择要去掉的牌:";cin>>iDrop;pPaiOwn[iDrop-1].iNum=pPaiOwn[iNum+2].iNum;pPaiOwn[iDrop-1].iPaiNum=pPaiOwn[iNum+2].iPaiNum;pPaiOwn[iNum+2].iNum=pPaiNew->iNum;pPaiOwn[iNum+2].iPaiNum=pPaiNew->iPaiNum;iCiNum++;return1;}boolCPIayMj::lsPong(Pai*pPaiRest){intiTag=0;〃查询是否可以碰for(inti=0;i<13;i++).iNum==1){if(pPaiRest.iPaiNum==pPaiNew->iPaiNum&&pPaiRestiTag++;}if(iTag>=2)return1;elsereturn0;}boolCPlayMj:ong(Pai*pPaiRest){intiTag=0;intj=0,iDrop;PaiTemp;intiNum=O;iNum=(iCiNum+iGangNum+iPongNum)*3;〃到达没有用的牌开始while(pPaiRest[j].iNum!=1)j++;//把碰了的牌置0,不可以在用for(inti=j;i<13;i++){if(pPaiRest.iPaiNum==pPaiNew->iPaiNum&&iTag!=2){pPaiRest.iNum=0;Temp.iNum=pPaiRest[iNum].iNum;Temp.iPaiNum=pPaiRest[iNum].iPaiNum;pPaiOwn[iNum].iNum=pPaiRest.iNum;pPaiOwn[iNum].iPaiNum=pPaiRest.iPaiNum;pPaiRest.iNum=Temp.iNum;pPaiRest.iPaiNum=Temp.iPaiNum;iNum++;iTag++;}}SortPai(13,GetPaiOwn());ShowOwn();pPaiNew->iNum=0;cout<<"选择要去掉的牌:";cin>>iDrop;pPaiOwn[iDrop-1].iNum=pPaiOwn[iNum].iNum;pPaiOwn[iDrop-1].iPaiNum=pPaiOwn[iNum].iPaiNum;pPaiOwn[iNum].iNum=pPaiNew->iNum;pPaiOwn[iNum].iPaiNum=pPaiNew->iPaiNum;iPongNum++;return1;}voidCPIayMj::SetPaiOwn(Pai*TotalPai){inti=0;intiPaiNum=O;//structPaiHuaiPaiHua;srand((unsigned)time(NULL));while(i<13){iPaiNum=rand()%34;if(TotalPai[iPaiNum].iNum>0){pPaiOwn.iPaiNum=iPaiNum;pPaiOwn.iNum=1;〃设置为未使用TotalPai[iPaiNum].iNum--;cout<<iPaiNum&It;<//"<<pPaiOwn.iNum<<endl;return;}boolCPIayMj::GetNewPai(Pai*TotalPai){intiTemp=0;intiTimes=0;intiTag=0;srand((unsigned)time(NULL));iTemp=rand()%34;while(iTag!=1){return0;if(TotalPai[iTemp].iNum==0){iTemp++;iTemp=iTemp%34;iTimes++;}else{if(iTimes==33)〃没有牌了,游戏结束iTag=1;pPaiNew->iNum=1;pPaiNew->iPaiNum=iTemp;(TotalPai+iTemp)->iNum--;}}return1;intCPIayMj::ChangePai(inti){PaiTemp;if(pPaiOwn.iNum!=0){Temp.iNum=pPaiOwn.iNum;Temp.iPaiNum=pPaiOwn.iPaiNum;pPaiOwn.iPaiNum=pPaiNew->iPaiNum;pPaiOwn.iNum=pPaiNew->iNum;returnTemp.iPaiNum;}elsereturn0;}boolCPIayMj::lsGang(Pai*pPaiRest){intiTag=0;〃查询是否可以碰for(inti=0;i<13;i++).iNum==1){if(pPaiRest.iPaiNum==pPaiNew->iPaiNum&&pPaiRestiTag++;}if(iTag==3)return1;elsereturn0;}boolCPlayMj::Gang(Pai*pPaiRest){//把碰了的牌置0,不可以在用for(inti=O;i<13;i++)&&{if(pPaiRest.iPaiNum==pPaiNew->iPaiNumpPaiRest.iNum==1)pPaiRest.iNum=O;"|}pPaiNew->iNum=O;iGangNum++;return1;}voidCPIayMj::SortPai(intiNum,Pai*pPaiRest){PaiTemp;inti=0,j=0,iTemp=0;while(pPaiRest[iTemp].iNum!=1)iTemp++;for(j=iTemp;j<iNum-1;j++){for(i=iTemp;i<iNum-1;i++){if(pPaiRest.iPaiNum>pPaiRest[i+1].iPaiNum){Temp=pPaiRest;pPaiRest=pPaiRest[i+1];pPaiRest[i+1]=Temp;}〃实现从0--33转换到牌花并显示voidCPIayMj::ShowOwn(){intiTemp;for(inti=0;i<13;i++){iTemp=pPaiOwn.iPaiNum;switch(iTemp/9){case0:pShowPai.Hua=WANG;〃判断是那个牌花:万,条,铜pShowPai.str="万";pShowPai.iPaiNum=iTemp+1;〃从1到9,下标转换为牌号break;case1:pShowPai.Hua=TONG;pShowPai.str="铜";pShowPai.iPaiNum=iTemp-9+1;break;case2:pShowPai.Hua=TIAO;pShowPai.str="条";pShowPai.iPaiNum=iTemp-18+1;break;default:pShowPai.Hua=ZI;case28:pShowPai.str="南”;break;case29:pShowPai.str="西";break;case30:pShowPai.str="北";break;case31:pShowPai.str="中";break;case32:pShowPai.str="发";break;case33:pShowPai.str="白";break;default:;};pShowPai.iPaiNum=iTemp;〃字的只有7种,东南西北,中发白};pShowPai.iNum=pPaiOwn.iNum;if(pShowPai.iPaiNum>26)cout<<i+1<<""&It;<pShowPai.str<&It;""<<pShowPai.iNum<<endl;elsecout&It;<i+1<<""<<pShowPai.iPaiNum<<pShowPai.str<<""<<pShowPai.iNum<<endl;}voidCPIayMj::ShowNewPai(){intiTemp;iTemp=pPaiNew->iPaiNum;switch(iTemp/9){case0:pShowNewPai->Hua=WANG;〃判断是那个牌花:万,条,铜pShowNewPai->str="万";pShowNewPai->iPaiNum=iTemp+1;〃从1到9,下标转换为牌号break;case1:pShowNewPai->Hua=TONG;pShowNewPai->str="铜";pShowNewPai->iPaiNum=iTemp-9+1;break;case2:pShowNewPai->Hua=TIAO;pShowNewPai->str="条";pShowNewPai->iPaiNum=iTemp-18+1;break;default:pShowNewPai->Hua=ZI;switch(iTemp){pShowNewPai->str="白”;break;if(pShowNewPai->iPaiNum>26)cout&It;<pShowNewPai->str<<endl;elsecout&It;<pShowNewPai->iPaiNum&It;<pShowNewPai->str<<endl;}
/
本文档为【c麻将源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索