📄 ddz2.cpp
字号:
g_nTurnGetLord = g_nTurnGetLord % 3 ;
if(g_nTurnGetLord == 0) g_nTurnGetLord = 3;
g_nWhoIsLord = 0;
}
////////////////////////////////////////////////////////////////////////////////
// //找出相同的牌数
////////////////////////////////////////////////////////////////////////////////
int ACardNum(int temp[] , int num , int comp)
{
int n = 0 , i ;
for(i = 0 ; i < num ; i++)
if(temp[i] == comp)
n++ ;
return n ;
}
////////////////////////////////////////////////////////////////////////////////
// 分析手中的牌
////////////////////////////////////////////////////////////////////////////////
void AnalyseCard(PLAYER player)
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<2;j++)
analyse[i][j] = 0;
for(i=3;i<18;i++)
{
analyse[i-3][0] =ACardNum(player.card,20,i);
if(analyse[i-3][0] != 0)
analyse[i-3][1] =i;
}
}
//将牌改为出了的状态
void ChangeStatic(PLAYER *player,int temp[])
{
int i,j;
for(i=0;i<CurrentOutCard.num ;i++)
for(j=0;j<20;j++)
{
if(player->card [j] == temp[i] && player->statics[j] != 2)
{
player->statics[j] = 2;
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////
// 找连子(不包括从其他类型组中取单张)
////////////////////////////////////////////////////////////////////////////////
int searchLianZi()
{
int temp[12]={0},j=0;//analyse2记录单牌组组号
g_nLast=-1;
g_nLen=1;
for(int i=0;i<12;i++)
if(analyse[i][0]>0)
temp[j++]=i;
//找连子
for(i=0;i<j-1;i++)
{
if(analyse[temp[i]+1][1]==analyse[temp[i]][1]+1)
{
g_nLen++;
if(g_nLen>=5)
g_nLast=temp[i]+1;
continue;
}
if(g_nLen<5)
{
g_nLen=1;
g_nLast=-1;
}
else
return 1;
}//for
if(g_nLen<5)
return 0;
return 1;
}
//出连子
void playLianZi(PLAYER *player)
{
int start=g_nLast-g_nLen;//连子开始组号
int a1[12]={0};
for(int i=0;start<g_nLast + 1;start++,i++)
{
a1[i]=analyse[start][1];
}
for(int j=0;j<i + 1;j++)//改牌的状态为出了的
for(int k=0;k<20;k++)
{
if(player->card[k] == a1[j])
{
player->statics[k] = 2;
break;
}
}
CurrentOutCard.card = a1[i - 1] ;
CurrentOutCard.num = i ;
CurrentOutCard.min = a1[0] ;
strcpy(CurrentOutCard.type ,"sz" );
}
//找单张,在顺子后找3--2
int searchDanZhang()
{
g_nPosition=-1;
for(int i=0;i<13;i++)
if(analyse[i][0] == 1)
{
g_nPosition=i;
break;
}
if(g_nPosition!=-1)
return 1;
else
return 0;
}
//出单张
void playDanZhang(PLAYER *player)
{
for(int k=0;k<20;k++)//改牌的状态为出了的
{
if(player->card[k] == analyse[g_nPosition][1])
{
player->statics[k] = 2;
break;
}
}
CurrentOutCard.card = analyse[g_nPosition][1] ;
CurrentOutCard.num = 1 ;
strcpy(CurrentOutCard.type ,"gz" );
}
//找对子
int searchDuiZi()
{
g_nPosition=-1;
for(int i=0;i<12;i++)
if(analyse[i][0]==2)
{
g_nPosition=i;
break;
}
if(g_nPosition!=-1)
return 1;
else
return 0;
}
//出对子
void playDuiZi(PLAYER *player)
{
int n = 0;
for(int k=0;k<20;k++)//改牌的状态为出了的
{
if(player->card[k] == analyse[g_nPosition][1])
{
player->statics[k] = 2;
n++;
if(n >= 2)break;
}
}
CurrentOutCard.card = analyse[g_nPosition][1] ;
CurrentOutCard.num = 2 ;
strcpy(CurrentOutCard.type ,"dz" );
}
//找三张
int searchSanZhang()
{
g_nPosition=-1;
for(int i=0;i<12;i++)
if(analyse[i][0]==3)
{
g_nPosition=i;
break;
}
if(g_nPosition!=-1)
return 1;
else
return 0;
}
//出三带一
int playSanZhang(PLAYER *player)
{
for(int i=0;i<15;i++)
{
if(analyse[i][0]==3)
{
int j=0;
int bt=0;
while(!bt)
{
Sleep(1);
if(analyse[j][0] == 1 && j!=i)
{
int a1[4]= {0};
a1[0]=analyse[i][1];
a1[1]=analyse[i][1];
a1[2]=analyse[i][1];
a1[3]=analyse[j][1];
bt=1;
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 4 ;
strcpy(CurrentOutCard.type ,"sd1" );
ChangeStatic(player,a1);
return 1;
}
else
{
j++;
if(j>12)
return 0;
}
}//while
}//if
}//for
return 0;
}
//找炸弹
int searchZhaDan()
{
g_nPosition=-1;
for(int i=0;i<13;i++)
if(analyse[i][0]==4)
{
g_nPosition=i;
break;
}
if(g_nPosition!=-1)
return 1;
else
return 0;
}
//出炸弹
void playZhaDan(PLAYER *player)
{
int n = 0;
for(int k=0;k<20;k++)//改牌的状态为出了的
{
if(player->card[k] == analyse[g_nPosition][1])
{
player->statics[k] = 2;
n++;
if(n >= 4)break;
}
}
CurrentOutCard.card = analyse[g_nPosition][1] ;
CurrentOutCard.num = 4 ;
strcpy(CurrentOutCard.type ,"zd" );
}
//找单大王
int searchDanJoker()
{
for(int i=0;i<15;i++)
{
if(analyse[i][1] == 17 && analyse[i-1][0] == 0)
{
g_nPosition = i;
return 1;
}
}
return 0;
}
//出单大王
void playDanJoker(PLAYER *player)
{
for(int k=0;k<20;k++)//改牌的状态为出了的
{
if(player->card[k] == analyse[g_nPosition][1])
{
player->statics[k] = 2;
break;
}
}
CurrentOutCard.card = analyse[g_nPosition][1] ;
CurrentOutCard.num = 1 ;
strcpy(CurrentOutCard.type ,"gz" );
}
//找双王
int searchJoker()
{
if(analyse[13][0] == 1 && analyse[14][0] == 1)
return 1;
else
return 0;
}
//出双王
void playJoker(PLAYER *player)
{
for(int k=0;k<20;k++)//改牌的状态为出了的
{
if((player->card[k] == 16 || player->card[k] == 17) && player->statics[k] != 2)
{
player->statics[k] = 2;
}
}
CurrentOutCard.num = 2 ;
CurrentOutCard.card = 17 ;
strcpy(CurrentOutCard.type ,"sw" );
}
//出单张
int playDanZhang2(PLAYER *player)
{
for(int i = CurrentOutCard.card - 2;i < 14 ;i++)
{
if(analyse[i][0] == 1 || (analyse[i][0] > 1 && analyse[i][1] == 15)) //多个2可拆
{
int a1[1] = {0};
a1[0]=analyse[i][1];
ChangeStatic(player,a1);//出牌后对玩家手中的牌进行相应清理
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 1 ;
strcpy(CurrentOutCard.type ,"gz" );
return 1;
}
}
return 0;
}
//出对子
int playDuiZi2(PLAYER *player)
{
for(int i=CurrentOutCard.card - 2;i<15;i++)
{
if(analyse[i][0]==2 || (analyse[i][0] > 2 && analyse[i][1] == 15))
{
int a1[2] = {0};
a1[0]=analyse[i][1];
a1[1]=analyse[i][1];
ChangeStatic(player,a1); //出牌后对玩家手中的牌进行相应清理
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 2 ;
strcpy(CurrentOutCard.type ,"dz" );
return 1;
}
}
return 0;
}
//三张
int playSanZhang2(PLAYER *player)
{
for(int i=CurrentOutCard.card - 2;i<15;i++)
{
if(analyse[i][0]==3)
{
int a1[3] = {0};
a1[0]=analyse[i][1];
a1[1]=analyse[i][1];
a1[2]=analyse[i][1];
ChangeStatic(player,a1);
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 3 ;
strcpy(CurrentOutCard.type ,"sgbd" );
return 1;
}
}
return 0;
}
//三带一
int playSanDaiYi(PLAYER *player)
{
for(int i=CurrentOutCard.card - 2;i<12;i++)
{
if(analyse[i][0]==3)
{
int j=0;
int bt=0;
while(!bt)
{
if(analyse[j][0] == 1 && j!=i)
{
int a1[4]= {0};
a1[0]=analyse[i][1];
a1[1]=analyse[i][1];
a1[2]=analyse[i][1];
a1[3]=analyse[j][1];
bt=1;
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 4 ;
strcpy(CurrentOutCard.type ,"sd1" );
ChangeStatic(player,a1);
return 1;
}
else
{
j++;
if(j>12)
return 0;
}
}//while
}//if
}//for
return 0;
}
//四带二只能带对子
int playSiDai2(PLAYER *player)
{
for(int i=CurrentOutCard.card - 2;i<15;i++)
{
if(analyse[i][0]==4)
{
int j=0;
int bt=0;
while(!bt)
{
if(analyse[j][0]==2)
{
int a1[8]= {0};
int ans=analyse[i][1];
for(int k=0;k<4;k++)
a1[k]=ans++;
a1[4]=analyse[j][1];
a1[5]=analyse[j][1]+1;
ChangeStatic(player,a1);
bt=1;
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 8 ;
strcpy(CurrentOutCard.type ,"sd2g" );
return 1;
}
else
{
j++;
if(j>12) {bt=1; return 0;}
}
}
}
}
return 0;
}
//炸弹
int playZhaDan2(PLAYER *player)
{
for(int i=CurrentOutCard.card - 2;i<15;i++)
{
if(analyse[i][0]==4)
{
int a1[4]= {0};
int ans=analyse[i][1];
for(int k=0;k<4;k++)
a1[k]=ans++;
ChangeStatic(player,a1);
CurrentOutCard.card = a1[0] ;
CurrentOutCard.num = 4 ;
strcpy(CurrentOutCard.type ,"zd" );
return 1;
}
}
return 0;
}
// 连子
int playLianZi2(PLAYER *player)
{
int lens=1;
int end=0;
for(int i=CurrentOutCard.card - 2;i<12 && lens<CurrentOutCard.num;i++)
{
for(int j=0;j<CurrentOutCard.num;j++,i++)
if(analyse[i][0]>0)
{
lens++;
if(j==CurrentOutCard.num-1)
end=i;
}
else
{
lens=1;
break;
}
}//for
//找到匹配的连子
if(lens == CurrentOutCard.num)
{
int start=-1;
start=end-CurrentOutCard.num+1;//连子开始组号
int a1[12]= {0};
for(int i=0;i<CurrentOutCard.num;i++)
a1[i]=analyse[start++][1];
ChangeStatic(player,a1);
CurrentOutCard.card = a1[i] ;
CurrentOutCard.min = a1[0] ;
CurrentOutCard.num = i - 1 ;
strcpy(CurrentOutCard.type ,"sz" );
return 1;
}
//未找到匹配的连子
else
return 0;
}//playLianZi2()
//全出
void OutAll(PLAYER *player)
{
for(int i=0;i<20;i++)
{
if(player->statics[i] != 2)
player->statics[i] = 2;
}
}
////////////////////////////////////////////////////////////////////////////////
//主动出牌
////////////////////////////////////////////////////////////////////////////////
int out1(PLAYER *player)
{
//出三张
if(searchSanZhang())
{playSanZhang(player);return 1;}
//出连子
if(searchLianZi())
{playLianZi(player);return 1;}
//出对子
if(searchDuiZi())
{playDuiZi(player);return 1;}
//出单张
if(searchDanZhang())
{playDanZhang(player);return 1;}
//出炸弹
if(searchZhaDan())
{playZhaDan(player);return 1;}
//出双王
if(searchJoker())
{playJoker(player);return 1;}
OutAll(player);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -