📄 ddz2.cpp
字号:
for(m = 0 ; m < num ; m++)
{
if(m != i && m != j)
analyse[n++] = temp[m] ;
}
if(analyse[0] == analyse[1] && analyse[0] != temp[i])
{
return 1 ;
}
}
return 0 ;
}
//找出最小的数值
int Min(int temp[] , int num)
{
int i , min = temp[0] ;
for(i = 1 ; i < num ; i++)
{
if(temp[i] < min)
{
min = temp[i] ;
}
}
return min ;
}
//是不是三对 , 要求不一样
int sd(int temp[])
{
int i , j , m = 0 , n = 0 , num = 6 , t[3] ;
for (i = 0 ; i < num ; i++)
for (j = i+1 ; j < num ; j++)
{
if(temp[i] == temp[j])
t[m++] = j ; //
if((m > 1) && (temp[t[m-2]] == temp[t[m-1]]))//除出三个一样的
return 0 ; //
}
if(m == 3)
return 1 ;
return 0 ;
}
//三连对
int ld3(int temp[])
{
int min ;
min = Min(temp , 6) ; //最大不能为2
if(min == 13) return 0 ;
if(ACardNum(temp , 6 , min) == 2 && ACardNum(temp , 6 , min+1) == 2
&& ACardNum(temp , 6 , min+2) == 2)
{
CurrentOutCard.card = min;
CurrentOutCard.num =6;
strcpy(CurrentOutCard.type,"ld3");
return 1 ;
}
return 0 ;
}
//四连对
int ld4(int temp[])
{
int min ;
min = Min(temp , 8) ;
if(min == 12) return 0 ; //最大不能为2
if(ACardNum(temp , 8 , min) == 2 && ACardNum(temp , 8 , min+1) == 2
&& ACardNum(temp , 8 , min+2) == 2 && ACardNum(temp , 8 , min+3) == 2)
{
CurrentOutCard.card = min;
CurrentOutCard.num =8;
strcpy(CurrentOutCard.type,"ld4");
return 1 ;
}
return 0 ;
}
//五连对
int ld5(int temp[])
{
int min ;
min = Min(temp , 10) ;
if(min == 11) return 0 ; //最大不能为2
if(ACardNum(temp , 10 , min) == 2 && ACardNum(temp , 10 , min+1) == 2
&& ACardNum(temp , 10 , min+2) == 2 && ACardNum(temp , 10 , min+3) == 2
&& ACardNum(temp , 10 , min+4) == 2)
{
CurrentOutCard.card = min;
CurrentOutCard.num =10;
strcpy(CurrentOutCard.type,"ld5");
return 1 ;
}
return 0 ;
}
//六连对
int ld6(int temp[])
{
int min , n = 12 ;
min = Min(temp , n) ;
if(min == 10) return 0 ; //最大不能为2
if(ACardNum(temp , n , min) == 2 && ACardNum(temp , n , min+1) == 2
&& ACardNum(temp , n , min+2) == 2 && ACardNum(temp , n , min+3) == 2
&& ACardNum(temp , n , min+4) == 2 && ACardNum(temp , n , min+5) == 2)
{
CurrentOutCard.card = min;
CurrentOutCard.num =12;
strcpy(CurrentOutCard.type,"ld6");
return 1 ;
}
return 0 ;
}
//七连对
int ld7(int temp[])
{
int min , n = 14 ;
min = Min(temp , n) ;
if(min == 9) return 0 ; //最大不能为2
if(ACardNum(temp , n , min) == 2 && ACardNum(temp , n , min+1) == 2
&& ACardNum(temp , n , min+2) == 2 && ACardNum(temp , n , min+3) == 2
&& ACardNum(temp , n , min+4) == 2 && ACardNum(temp , n , min+5) == 2
&& ACardNum(temp , n , min+6) == 2)
{
CurrentOutCard.card = min;
CurrentOutCard.num =14;
strcpy(CurrentOutCard.type,"ld7");
return 1 ;
}
return 0 ;
}
//四带二个
int sd2g(int temp[])
{
int analyse[2] , m = 0 , n = 0 , i , j , k , p ;
for(i = 0 ; i < 6 ; i++)
for(j = i+1 ; j < 6 ; j++)
for(k = j+1 ; k < 6 ; k++)
for(p = k+1 ; p < 6 ; p++)
{
if(temp[i] == temp[j] && temp[j] == temp[k] && temp[k] == temp[p])
{
for(n = 0 , m = 0 ; m < 6 ; m++)
{
if(m != i && m != j && m != k && m != p)
analyse[n++] = temp[m] ;
}
if(analyse[0] != analyse[1])
{
CurrentOutCard.card = temp[i];
CurrentOutCard.num =6;
strcpy(CurrentOutCard.type,"sd2g");
return 1 ;
}
return 0 ;
}
}
return 0;
}
//四带二对
int sd2d(int temp[])
{
int analyse[4] , m = 0 , n = 0 , i , j , k , p ;
for(i = 0 ; i < 8 ; i++)
for(j = i+1 ; j < 8 ; j++)
for(k = j+1 ; k < 8 ; k++)
for(p = k+1 ; p < 8 ; p++)
{
if(temp[i] == temp[j] && temp[j] == temp[k] && temp[k] == temp[p])
{
for(n = 0 , m = 0 ; m < 8 ; m++)
{
if(m != i && m != j && m != k && m != p)
analyse[n++] = temp[m] ;
}
if(ld(analyse))
{
CurrentOutCard.card = temp[i];
CurrentOutCard.num =8;
strcpy(CurrentOutCard.type,"sd2d");
return 1 ;
}
return 0 ;
}
}
return 0;
}
//飞机不带
int fjbd(int temp[])
{
int analyse[3] , m = 0 , n = 0 , i , j , k , num = 6 ;
for(i = 0 ; i < num ; i++)
for(j = i + 1 ; j < num ; j++)
for(k = j + 1 ; k < num ; k++)
{
if(temp[i] == temp[j] && temp[j] == temp[k])
{
for(n = 0 , m = 0 ; m < num ; m++)
{
if(m != i && m != j && m != k)
analyse[n++] = temp[m] ;
}
if(analyse[0] == analyse[1] && analyse[1] == analyse[2])//判断另外三个是否相等
{
if(abs(temp[i] - analyse[0]) != 1) return 0 ; //当两个三个不是连着的时
if(((temp[i] > analyse[0]) ? temp[i] : analyse[0]) == 15) return 0 ; //最大不能为2
CurrentOutCard.card = temp[i] < analyse[0] ? temp[i] : analyse[0];
CurrentOutCard.num =6;
strcpy(CurrentOutCard.type,"fjbd");
return 1 ;
}
return 0 ;
}
}
return 0;
}
//飞机带两个
int fjd2g(int temp[])
{
int analyse[2] , m = 0 , n = 0 , i , j , k , t[2][3] = {0} , num = 8 ;
for(i = 0 ; i < num ; i++)
for(j = i+1 ; j < num ; j++)
for(k = j+1 ; k < num ; k++)
{
if(temp[i] == temp[j] && temp[j] == temp[k])
{
t[n][0] = i ;
t[n][1] = j ;
t[n++][2] = k ;
}
if(n == 2)
{
if(abs(temp[t[0][0]] - temp[t[1][0]]) != 1 ) return 0 ; //当两个三个不是连着的时
for(n = 0 , m = 0 ; m < num ; m++)
{
if(m != t[0][0] && m != t[0][1] && m != t[0][2]
&& m != t[1][0] && m != t[1][1] && m != t[1][2])
analyse[n++] = temp[m] ;
}
if(analyse[0] != analyse[1])
{
if((temp[t[0][0]] < temp[t[1][0]]) ? temp[t[0][0]] : temp[t[1][0]] == 14) return 0 ; //最大不能为2
CurrentOutCard.card = temp[t[0][0]] < temp[t[1][0]] ? temp[t[0][0]] : temp[t[1][0]];
CurrentOutCard.num =8;
strcpy(CurrentOutCard.type,"fjd2g");
return 1;
}
return 0 ;
}
}
return 0;
}
//飞机带二对
int fjd2d(int temp[])
{
int analyse[4] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 10 ;
for(i = 0 ; i < num ; i++)
for(j = i+1 ; j < num ; j++)
for(k = j+1 ; k < num ; k++)
{
if(temp[i] == temp[j] && temp[j] == temp[k])
{
t[n][0] = i ;
t[n][1] = j ;
t[n++][2] = k ;
}
if(n == 2)
{
if(abs(temp[t[0][0]]-temp[t[1][0]]) != 1 ) return 0 ; //当两个三个不是连着的时
for(n = 0 , m = 0 ; m < num ; m++)
{
if(m != t[0][0] && m != t[0][1] && m != t[0][2] && m != t[1][0] && m != t[1][1] && m != t[1][2])
analyse[n++] = temp[m] ;
}
if(ld(analyse))
{
if(((temp[t[0][0]] < temp[t[1][0]])?temp[t[0][0]]:temp[t[1][0]]) == 14) return 0 ; //最大不能为2
CurrentOutCard.card = temp[t[0][0]] < temp[t[1][0]] ? temp[t[0][0]] : temp[t[1][0]];
CurrentOutCard.num =10;
strcpy(CurrentOutCard.type,"fjd2d");
return 1 ;
}
return 0 ;
}
}
return 0;
}
//三飞机不带
int sfjbd(int temp[])
{
int min ;
min = Min(temp , 9) ;
if(min == 13) return 0 ; //最大不能为2
if(ACardNum(temp , 9 , min) == 3 && ACardNum(temp , 9 , min+1) == 3 && ACardNum(temp , 9 , min+2) == 3)
{
CurrentOutCard.card = min;
CurrentOutCard.num =9;
strcpy(CurrentOutCard.type,"sfjbd");
return 1 ;
}
return 0 ;
}
//三飞机带三个
int sfjdsg(int temp[])
{
int analyse[3] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 12 ;
for(i = 0 ; i < num ; i++)
for(j = i+1 ; j < num ; j++)
for(k = j+1 ; k < num ; k++)
{
if(temp[i] == temp[j] && temp[j] == temp[k])
{
t[n][0] = i ;
t[n][1] = j ;
t[n++][2] = k ;
}
if(n == 3)
{
for(n = 0 , m = 0 ; m < num ; m++)
{
if(m != t[0][0] && m != t[0][1] && m != t[0][2]
&& m != t[1][0] && m != t[1][1] && m != t[1][2]
&& m != t[2][0] && m != t[2][1] && m != t[2][2])
analyse[n++] = temp[m] ;
}
if(analyse[0] != analyse[1] && analyse[0] != analyse[2] && analyse[2] != analyse[1])
{
analyse[0] = temp[t[0][0]] ;
analyse[1] = temp[t[1][0]] ;
analyse[2] = temp[t[2][0]] ;
if((analyse[0] + analyse[1] + analyse[2]) != (Min(analyse , 3) + 1) * 3) return 0 ; //三个是不是连着的
if(Min(analyse , 3) == 13) return 0 ; //最大不能为2
CurrentOutCard.card = Min(analyse , 3);
CurrentOutCard.num =12;
strcpy(CurrentOutCard.type,"sfjdsg");
return 1;
}
return 0 ;
}
}
return 0;
}
//三飞机带三对
int sfjdsd(int temp[])
{
int analyse[6] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 15 ;
for(i = 0 ; i < num ; i++)
for(j = i+1 ; j < num ; j++)
for(k = j+1 ; k < num ; k++)
{
if(temp[i] == temp[j] && temp[j] == temp[k])
{
t[n][0] = i ;
t[n][1] = j ;
t[n++][2] = k ;
}
if(n == 3)
{
for(n = 0 , m = 0 ; m < num ; m++)
{
if(m != t[0][0] && m != t[0][1] && m != t[0][2]
&& m != t[1][0] && m != t[1][1] && m != t[1][2]
&& m != t[2][0] && m != t[2][1] && m != t[2][2])
analyse[n++] = temp[m] ;
}
if(sd(analyse))
{
analyse[0] = temp[t[0][0]] ;
analyse[1] = temp[t[1][0]] ;
analyse[2] = temp[t[2][0]] ;
if((analyse[0] + analyse[1] + analyse[2]) != (Min(analyse , 3) + 1) * 3) return 0 ; //三个是不是连着的
if(Min(analyse , 3) == 13) return 0 ; //最大不能为2
CurrentOutCard.card = Min(analyse , 3);
CurrentOutCard.num =15;
strcpy(CurrentOutCard.type,"sfjdsd");
return 1;
}
return 0 ;
}
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////
// 检验打出的牌
////////////////////////////////////////////////////////////////////////////////
int CheckCard(PLAYER player)
{
int num = 0 , temp[20] = {0} ;
num = CardNum(player,2);
SaveOutCard(temp , player) ;
int tmp = CurrentOutCard.card;
if(g_nLastWhoOut != g_nTurnOut)
{
switch(num)
{
case 0: return 0 ;
case 1:
{
if(strcmp(CurrentOutCard.type,"gz") == 0 && temp[0] > CurrentOutCard.card)
{
CurrentOutCard.card = temp[0];
CurrentOutCard.num = 1;
strcpy(CurrentOutCard.type,"gz");
return 1 ;
}
} return 0;
case 2:
{
if(strcmp(CurrentOutCard.type,"dz") == 0 && dz(temp))//是不是对子
{
if(tmp <temp[0])
return 1;
}
if(sw(temp))
return 1;
}return 0;
case 3:
{
if(strcmp(CurrentOutCard.type,"sgbd") == 0 && sgbd(temp))
if(tmp <temp[0])
return 1;
}return 0;
case 4:
{
if(strcmp(CurrentOutCard.type,"sd1") == 0 && sd1(temp))
{
if(tmp <temp[1])
return 1;
}
if(strcmp(CurrentOutCard.type,"zd") != 0 && zd(temp))
return 1;
if(strcmp(CurrentOutCard.type,"zd") == 0 && zd(temp))
{
if(tmp <temp[1])
return 1;
}
} return 0;
case 5:
{
if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 5))
if(tmp <temp[0])
return 1;
if(strcmp(CurrentOutCard.type,"sd2") == 0 && sd2(temp))
if(tmp <temp[2])
return 1;
}return 0;
case 6:
{
if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 6))
if(tmp <temp[0])
return 1;
if(strcmp(CurrentOutCard.type,"ld3") == 0 && ld3(temp))
if(tmp <temp[5])
return 1;
if(strcmp(CurrentOutCard.type,"sd2g") == 0 && sd2g(temp))
if(tmp <temp[3])
return 1;
if(strcmp(CurrentOutCard.type,"fjbd") == 0 && fjbd(temp))
if(tmp <temp[4])
return 1;
}return 0;
case 7:
{
if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 7))
if(tmp <temp[0])
return 1;
}return 0;
case 8:
{
if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 8))
if(tmp <temp[0])
return 1;
if(strcmp(CurrentOutCard.type,"fjd2g") == 0 && fjd2g(temp))
if(tmp <temp[2])
return 1;
if(strcmp(CurrentOutCard.type,"ld4") == 0 && ld4(temp))
if(tmp <temp[7])
return 1;
//if(strcmp(CurrentOutCard.type,"sd2d") == 0 && sd2d(temp))
// ;
}return 0;
case 9:
{
if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 9))
if(tmp <temp[0])
return 1;
if(strcmp(CurrentOutCard.type,"sfjbd") == 0 && sfjbd(temp))
if(tmp <temp[8])
return 1;
}return 0;
case 10:return sz(temp , 10) || fjd2d(temp) || ld5(temp) ;
case 11:return sz(temp , 11) ;
case 12:return sz(temp , 12) || ld6(temp) || sfjdsg(temp) ;
case 13:return sz(temp , 13) ;
case 14:return ld7(temp) ;
case 15:return sfjdsd(temp) ;
default: return 0 ;
}//switch
}
else
{
switch(num)
{
case 0: return 0 ;
case 1:
{
CurrentOutCard.card = temp[0];
CurrentOutCard.num = 1;
strcpy(CurrentOutCard.type,"gz");
}return 1 ;
case 2: return dz(temp) || sw(temp) ;
case 3: return sgbd(temp) ;
case 4: return sd1(temp) || zd(temp) ;
case 5: return sz(temp , 5) || sd2(temp) ;
case 6: return sz(temp , 6) || ld3(temp) || sd2g(temp) || fjbd(temp) ;
case 7: return sz(temp , 7) ;
case 8: return sz(temp , 8) || fjd2g(temp) || ld4(temp) || sd2d(temp) ;
case 9: return sz(temp , 9) || sfjbd(temp) ;
case 10:return sz(temp , 10) || fjd2d(temp) || ld5(temp) ;
case 11:return sz(temp , 11) ;
case 12:return sz(temp , 12) || ld6(temp) || sfjdsg(temp) ;
case 13:return sz(temp , 13) ;
case 14:return ld7(temp) ;
case 15:return sfjdsd(temp) ;
default: return 0 ;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -