【整活向】SCP2026-S1
xu_zhihao
·
·
个人记录
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const int N=1010;
string s[]={"3","4","5","6","7","8","9","10","J","Q","K","A","2","D","X"};
vector<string>p[5];
int countp[5][20];
int mark[10];
int f[N];
string poker_model[100];
int lenth_model;//特殊牌型需要长度记录
int model;//牌型记录
int landlord_id;
int Findid(string y){
for(int i=0;i<15;i++){
if(s[i]==y)return i;
}
return -1;
}
string FindString(int id){
return s[id];
}
bool cmp(string A,string B){
int idA=Findid(A);
int idB=Findid(B);
return idA<=idB;
}
void Init(){
memset(f,0,sizeof(f));
vector<string>poker;
for(int i=1;i<=4;i++){
for(int j=0;j<13;j++){
poker.push_back(s[j]);
}
}
poker.push_back("D");
poker.push_back("X");
for(int i=1;i<=17;i++){
for(int j=1;j<=3;j++){
int id=rand()%(poker.size());
while(f[id])id=rand()%(poker.size());
f[id]=1;
p[j].push_back(poker[id]);
}
}
for(int i=0;i<poker.size();i++)if(!f[i])p[4].push_back(poker[i]);
for(int i=1;i<=4;i++){
sort(p[i].begin(),p[i].end(),cmp);
for(string to:p[i])cout<<to<<" ";
cout<<"\n";
}
return;
}
void Pushpoker(int idA,int idB){//把A 放到 B 中
for(string to:p[idA])p[idB].push_back(to);
sort(p[idB].begin(),p[idB].end(),cmp);
return;
}
void Show(int id){
if(id==1)cout<<"Mine:\n";
else if(id<=3)cout<<"Player"<<id<<"'s";
else cout<<"landlord's extra pokers:\n";
for(string to:p[id])cout<<to<<" ";
cout<<"\n";
return;
}
void Countdown(int time){
for(int i=time;i>=1;i--){
Sleep(1000);
system("cls");
if(_kbhit()){
char ch=getch();
cout<<"Warn!\n";
}
cout<<i<<"\n";
}
return;
}
void Import(){//导入数据
for(int i=1;i<=3;i++){
for(string to:p[i])countp[i][Findid(to)]++;
}
return;
}
bool check_AAAB(int id,int k){
if(!k){
int f1=0,f2=0;
for(int i=0;i<15;i++){
if(countp[id][i]==3 && !f1){
f1=i+1;
}
else if(countp[id][i]==1 && !f2){
f2=i+1;
}
}
if(!f1 || !f2)return false;
model=1;
countp[id][f1-1]-=3;
countp[id][f2-1]-=1;
poker_model[1]=FindString(f1-1);
poker_model[2]=FindString(f2-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=3;i++){
cout<<poker_model[1]<<" ";
}
cout<<poker_model[2]<<"\n";
}
else if(k==1){
int f1=0,f2=0;
for(int i=0;i<15;i++){
if(countp[id][i]>=3){
f1=i+1;
break;
}
}
if(!f1)return 0;
for(int i=0;i<15;i++){
if(i==f1-1)continue;
if(countp[id][i]>=1){
f2=i+1;
break;
}
}
if(!f2)return 0;
model=1;
countp[id][f1-1]-=3;
countp[id][f2-1]-=1;
poker_model[1]=FindString(f1-1);
poker_model[2]=FindString(f2-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=3;i++){
cout<<poker_model[1]<<" ";
}
cout<<poker_model[2]<<"\n";
}
else if(k==2){
int f1=0,f2=0;
for(int i=0;i<15;i++){
if(i>=Findid(poker_model[1])+1 && countp[id][i]==3 && !f1){
f1=i+1;
}
else if(countp[id][i]==1 && !f2){
f2=i+1;
}
}
if(!f1 || !f2)return false;
model=1;
countp[id][f1-1]-=3;
countp[id][f2-1]-=1;
poker_model[1]=FindString(f1-1);
poker_model[2]=FindString(f2-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=3;i++){
cout<<poker_model[1]<<" ";
}
cout<<poker_model[2]<<"\n";
}
else{
int f1=0,f2=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]>=3){
f1=i+1;
break;
}
}
if(!f1)return 0;
for(int i=0;i<15;i++){
if(i==f1-1)continue;
if(countp[id][i]>=1){
f2=i+1;
break;
}
}
if(!f2)return 0;
model=1;
countp[id][f1-1]-=3;
countp[id][f2-1]-=1;
poker_model[1]=FindString(f1-1);
poker_model[2]=FindString(f2-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=3;i++){
cout<<poker_model[1]<<" ";
}
cout<<poker_model[2]<<"\n";
}
return 1;
}
bool check_AABBCC(int id,int k){
if(!k){
int lenth=0,f1=0;
for(int i=0;i<12;i++){
int lencnt=0;
for(int j=i;j<12;j++){
if(countp[id][j]==2)lencnt++;
else break;
}
if(lencnt>lenth && lencnt>=3){
lenth=lencnt;
f1=i;
}
}
if(!lenth)return 0;
model=2;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=2;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
for(int j=1;j<=2;j++){
cout<<FindString(i)<<" ";
}
}
cout<<"\n";
}
else if(k==1){//允许拆牌
int lenth=0,f1=0;
for(int i=0;i<12;i++){
int lencnt=0;
for(int j=i;j<12;j++){
if(countp[id][j]>=2)lencnt++;
else break;
}
if(lencnt>lenth && lencnt>=3){
lenth=lencnt;
f1=i;
}
}
if(!lenth)return 0;
model=2;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=2;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
for(int j=1;j<=2;j++){
cout<<FindString(i)<<" ";
}
}
cout<<"\n";
}
else if(k==2){//根据已经有的牌型出,不允许拆牌
int lenth=lenth_model,f1=0;
for(int i=Findid(poker_model[1])+1;i<12-lenth+1;i++){
int lencnt=0;
for(int j=i;j<i+lenth-1;j++){
if(countp[id][j]==2)lencnt++;
else break;
}
if(lencnt==lenth){
f1=i+1;
break;
}
}
if(!f1)return 0;
f1--;
model=2;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=2;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
for(int j=1;j<=2;j++){
cout<<FindString(i)<<" ";
}
}
cout<<"\n";
}
else{//根据已经有的牌型出,允许拆牌
int lenth=lenth_model,f1=0;
for(int i=Findid(poker_model[1])+1;i<12-lenth+1;i++){
int lencnt=0;
for(int j=i;j<i+lenth-1;j++){
if(countp[id][j]>=2)lencnt++;
else break;
}
if(lencnt==lenth){
f1=i+1;
break;
}
}
if(!f1)return 0;
f1--;
model=2;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=2;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
for(int j=1;j<=2;j++){
cout<<FindString(i)<<" ";
}
}
cout<<"\n";
}
return 1;
}
bool check_ABCDE(int id,int k){
if(!k){
int lenth=0,f1=0;
for(int i=0;i<12;i++){
int lencnt=0;
for(int j=i;j<12;j++){
if(countp[id][j]==1)lencnt++;
else break;
}
if(lencnt>lenth && lencnt>=5){
lenth=lencnt;
f1=i;
}
}
if(!lenth)return 0;
model=3;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=1;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
cout<<FindString(i)<<" ";
}
cout<<"\n";
}
else if(k==1){//允许拆牌
int lenth=0,f1=0;
for(int i=0;i<12;i++){
int lencnt=0;
for(int j=i;j<12;j++){
if(countp[id][j]>=1)lencnt++;
else break;
}
if(lencnt>lenth && lencnt>=5){
lenth=lencnt;
f1=i;
}
}
if(!lenth)return 0;
model=3;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=1;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
cout<<FindString(i)<<" ";
}
cout<<"\n";
}
else if(k==2){//根据已经有的牌型出,不允许拆牌
int lenth=lenth_model,f1=0;
for(int i=Findid(poker_model[1])+1;i<12-lenth+1;i++){
int lencnt=0;
for(int j=i;j<i+lenth-1;j++){
if(countp[id][j]==1)lencnt++;
else break;
}
if(lencnt==lenth){
f1=i+1;
break;
}
}
if(!f1)return 0;
f1--;
model=3;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=1;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
cout<<FindString(i)<<" ";
}
cout<<"\n";
}
else{//根据已经有的牌型出,允许拆牌
int lenth=lenth_model,f1=0;
for(int i=Findid(poker_model[1])+1;i<12-lenth+1;i++){
int lencnt=0;
for(int j=i;j<i+lenth-1;j++){
if(countp[id][j]>=1)lencnt++;
else break;
}
if(lencnt==lenth){
f1=i+1;
break;
}
}
if(!f1)return 0;
f1--;
model=3;
for(int i=f1;i<=f1+lenth-1;i++)countp[id][i]-=1;
poker_model[1]=FindString(f1);
lenth_model=lenth;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=f1;i<=f1+lenth-1;i++){
cout<<FindString(i)<<" ";
}
cout<<"\n";
}
return 1;
}
bool check_A(int id,int k){
if(!k){
int f1=0;
for(int i=0;i<15;i++){
if(countp[id][i]==1){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=4;
countp[id][f1-1]-=1;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<poker_model[1]<<"\n";
}
else if(k==1){
int f1=0;
for(int i=0;i<15;i++){
if(countp[id][i]>=1){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=4;
countp[id][f1-1]-=1;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<poker_model[1]<<"\n";
}
else if(k==2){
int f1=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]==1){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=4;
countp[id][f1-1]-=1;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<poker_model[1]<<"\n";
}
else{
int f1=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]>=1){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=4;
countp[id][f1-1]-=1;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<poker_model[1]<<"\n";
}
return 1;
}
bool check_AA(int id,int k){
if(!k){
int f1=0;
for(int i=0;i<15;i++){
if(countp[id][i]==2){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=5;
countp[id][f1-1]-=2;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=2;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else if(k==1){
int f1=0;
for(int i=0;i<15;i++){
if(countp[id][i]>=2){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=5;
countp[id][f1-1]-=2;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=2;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else if(k==2){
int f1=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]==2){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=5;
countp[id][f1-1]-=2;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=2;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else{
int f1=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]>=2){
f1=i+1;
break;
}
}
if(!f1)return 0;
model=5;
countp[id][f1-1]-=2;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=2;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
return 1;
}
bool check_AAAA(int id,int k){
if(!k){
int f1=0;
for(int i=0;i<15;i++){
if(countp[id][i]==4){
f1=i+1;
break;
}
}
if(!f1){
if(countp[id][13]==1 && countp[id][14]==1){
model=7;
countp[id][13]--;
countp[id][14]--;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<"D X"<<"\n";
cout<<"\n";
return 1;
}
return 0;
}
model=6;
countp[id][f1-1]-=4;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=4;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else if(k==2){
int f1=0;
for(int i=Findid(poker_model[1])+1;i<15;i++){
if(countp[id][i]==4){
f1=i+1;
break;
}
}
if(!f1){
if(countp[id][13]==1 && countp[id][14]==1){
model=7;
countp[id][13]--;
countp[id][14]--;
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
cout<<"D X"<<"\n";
cout<<"\n";
return 1;
}
return 0;
}
model=6;
countp[id][f1-1]-=4;
poker_model[1]=FindString(f1-1);
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"move:\n";
for(int i=1;i<=4;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
return 1;
}
void Free_choice(int id){//AAAB>AABBCC>ABCDE>A>AA>AAAA>DX
if(check_AAAB(id,0))return;
if(check_AABBCC(id,0))return;
if(check_ABCDE(id,0))return;
if(check_A(id,0))return;
if(check_AA(id,0))return;
if(check_AAAA(id,0))return;
}
bool NotFree_choice(int id){
if(model==1 && check_AAAB(id,3))return 1;
if(model==2 && check_AABBCC(id,3))return 1;
if(model==3 && check_ABCDE(id,3))return 1;
if(model==4 && check_A(id,3))return 1;
if(model==5 && check_AA(id,3))return 1;
if(model==6 && check_AAAA(id,2))return 1;
cout<<"Pass\n";
mark[id]=1;
return 0;
}
bool VeryFree_choice(int id){
if(model==1 && check_AAAB(id,2))return 1;
if(model==2 && check_AABBCC(id,2))return 1;
if(model==3 && check_ABCDE(id,2))return 1;
if(model==4 && check_A(id,2))return 1;
if(model==5 && check_AA(id,2))return 1;
if(model==6 && check_AAAA(id,2))return 1;
cout<<"Pass\n";
mark[id]=1;
return 0;
}
int count_poker(int id){
int ans=0;
for(int j=0;j<15;j++)ans+=countp[id][j];
return ans;
}
void poker_report(){
cout<<"Shold more than ";
if(model==0){
cout<<"Nothing\n";
}
else if(model==1){
for(int i=1;i<=3;i++)cout<<poker_model[1]<<" ";
cout<<poker_model[2]<<"\n";
}
else if(model==2){
for(int i=Findid(poker_model[1]);i<=Findid(poker_model[1])+lenth_model-1;i++){
for(int j=1;j<=2;j++)cout<<FindString(i)<<" ";
}
}
else if(model==3){
for(int i=Findid(poker_model[1]);i<=Findid(poker_model[1])+lenth_model-1;i++){
cout<<FindString(i)<<" ";
}
}
else if(model==4){
cout<<poker_model[1]<<"\n";
}
else if(model==5){
for(int i=1;i<=2;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else if(model==6){
for(int i=1;i<=4;i++)cout<<poker_model[1]<<" ";
cout<<"\n";
}
else if(model==7){
cout<<"D X\n";
}
for(int i=1;i<=3;i++){
if(i==1)cout<<"My have";
else if(i<=3)cout<<"player"<<i<<" has";
int ans=count_poker(i);
cout<<" "<<ans;
cout<<" poker";
if(ans>1)cout<<"s";
cout<<"\n";
}
cout<<"\n";
return;
}
bool check_poker(string push_poker){
string p="";
int k[N];
for(int i=0;i<15;i++)k[i]=countp[1][i];
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
if(poker_id==-1)return 0;
k[poker_id]--;
if(k[poker_id]<0)return 0;
}
p="";
}
else{
p+=push_poker[i];
}
}
return 1;
}
bool model_AAAB(string push_poker){
string p="";
vector<int>v;
v.clear();
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
v.push_back(poker_id);
//cout<<p<<"\n";
}
p="";
}
else{
p+=push_poker[i];
}
}
//cout<<push_poker<<"\n";
//for(int to:v)cout<<to<<" ";
//cout<<endl;
if(v.size()!=4)return 0;
if(v[0]!=v[1] || v[1]!=v[2])return 0;
if(v[0]<=Findid(poker_model[1]))return 0;
poker_model[1]=FindString(v[0]);
poker_model[2]=FindString(v[3]);
return 1;
}
bool model_AABBCC(string push_poker){
string p="";
vector<int>v;
v.clear();
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
v.push_back(poker_id);
}
p="";
}
else{
p+=push_poker[i];
}
}
if(v.size()!=lenth_model*2)return 0;
for(int i=0;i<lenth_model;i+=2){
if(v[i]!=v[i+1])return 0;
if(i!=0 && v[i]!=v[i-1]+1)return 0;
if(v[i]>=12)return 0;
}
if(v[0]<=Findid(poker_model[1]))return 0;
for(int i=0;i<lenth_model;i++){
poker_model[i+1]=FindString(v[i*2]);
}
return 1;
}
bool model_ABCDE(string push_poker){
string p="";
vector<int>v;
v.clear();
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
v.push_back(poker_id);
}
p="";
}
else{
p+=push_poker[i];
}
}
if(v.size()!=lenth_model)return 0;
for(int i=0;i<lenth_model;i++){
if(i!=0 && v[i]!=v[i-1]+1)return 0;
if(v[i]>=12)return 0;
}
if(v[0]<=Findid(poker_model[1]))return 0;
for(int i=0;i<lenth_model;i++){
poker_model[i+1]=FindString(v[i]);
}
return 1;
}
bool model_A(string push_poker){
string p="";
vector<int>v;
v.clear();
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
cout<<"pokerid="<<poker_id;
v.push_back(poker_id);
}
cout<<p<<"\n";
p="";
}
else{
p+=push_poker[i];
}
}
cout<<v.size()<<"\n";
if(v.size()!=1)return 0;
cout<<v[0]<<" "<<Findid(poker_model[1])<<"\n";
if(v[0]<=Findid(poker_model[1]))return 0;
poker_model[1]=FindString(v[0]);
return 1;
}
bool model_AA(string push_poker){
string p="";
vector<int>v;
v.clear();
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
v.push_back(poker_id);
}
p="";
}
else{
p+=push_poker[i];
}
}
if(v.size()!=2)return 0;
if(v[0]!=v[1])return 0;
if(v[0]<=Findid(poker_model[1]))return 0;
poker_model[1]=FindString(v[0]);
return 1;
}
bool model_AAAA(string push_poker){
string p="";
vector<int>v;
v.clear();
model=6;
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
v.push_back(poker_id);
}
p="";
}
else{
p+=push_poker[i];
}
}
if(v.size()!=4)return 0;
if(v[0]!=v[1] || v[1]!=v[2] || v[2]!=v[3])return 0;
if(v[0]<=Findid(poker_model[1]))return 0;
poker_model[1]=FindString(v[0]);
return 1;
}
bool check_poker_model(int checkid,string push_poker){
cout<<model<<"\n";
if(checkid==1)return 1;
if(model==1)return model_AAAB(push_poker);
else if(model==2)return model_AABBCC(push_poker);
else if(model==3)return model_ABCDE(push_poker);
else if(model==4)return model_A(push_poker);
else if(model==5)return model_AA(push_poker);
else if(1)return model_AAAA(push_poker);
else if(model==7)return 0;
}
void cutdown_poker(int id,string push_poker){
string p="";
for(int i=0;i<push_poker.size();i++){
if(push_poker[i]==' ' || i==push_poker.size()-1){
if(p!=""){
int poker_id=Findid(p);
countp[id][poker_id]--;
}
p="";
}
else{
p+=s[i];
}
}
}
int main(){
srand(time(0));
Init();
Show(1);
system("pause");
double wait_time=(rand()%100+1)/100.0;
//Countdown(5);
Sleep(500);
system("cls");
clock_t start=clock();
while((clock()-start)/(double)CLOCKS_PER_SEC<wait_time){
if(_kbhit()){
char ch=_getch();
if(ch==' '){
cout<<"You are the landlord!\n";
landlord_id=1;
break;
}
}
}
Show(4);
if(landlord_id==1){
Pushpoker(4,1);
}
else{
landlord_id=rand()%2+2;
Pushpoker(4,landlord_id);
cout<<"Player"<<landlord_id<<" is "<<"landlord!\n";
}
system("pause");
system("cls");
//Countdown(3);
cout<<"The conflict has begun!\n";
int starter=landlord_id;
Import();//导入牌的数据
int cnt=2;//不叫计数器
int id=starter;
while(1){
if(id==1)cout<<"My ";
else if(id<=3)cout<<"player"<<id<<"'s ";
cout<<"Round\n";
poker_report();
cout<<"\n\n\n";
if(id==1){
Show(1);
int checkid=0;//检查方式
if(cnt==2){
cout<<"Free:\n";
cnt=0;
mark[1]=mark[2]=mark[3]=0;
checkid=1;
}
while(1){
string push_poker;
char ch=getch();
getline(cin,push_poker);
cout<<push_poker;
if(push_poker=="Pass"){
cnt++;
mark[id]=1;
//cout<<"Pass\n";
break;
}
if(!check_poker(push_poker)){
cout<<"Warn11!\n";
continue;
}
if(!check_poker_model(checkid,push_poker)){
cout<<"Warn114514!\n";
continue;
}
cout<<"Success\n";
cutdown_poker(id,push_poker);
break;
}
system("pause");
}
else{
if(cnt==2){//这么多人都已经不叫了
Free_choice(id);//选择出的牌
cnt=0;
mark[1]=mark[2]=mark[3]=0;
}
else{
if(id==landlord_id){
if(!NotFree_choice(id))cnt++;
}
else{
int last_id=id-1;
if(last_id==0)last_id=3;
if(last_id==landlord_id){
if(!VeryFree_choice(id))cnt++;
else{
mark[1]=mark[2]=mark[3]=0;
cnt=0;
}
}
else if(mark[last_id]){
if(!NotFree_choice(id))cnt++;
else{
mark[1]=mark[2]=mark[3]=0;
cnt=0;
}
}
else{
if(count_poker(id)<count_poker(last_id) && count_poker(landlord_id)<=5){
if(!VeryFree_choice(id))cnt++;
}
else{
cout<<"Pass\n";
mark[id]=1;
cnt++;
}
}
}
}
system("pause");
}
if(!count_poker(id)){
if(id==landlord_id)cout<<"The lanlord win!\n";
else cout<<"The farmer win!";
break;
}
id++;
if(id==4){
id=1;
}
system("cls");
}
return 0;
}
//A
//AA
//AAAB
//AAAA
//DX
//AABBCC
//ABCDE
//考虑什么时候会拆牌:
//队友出不了过了(或者没有队友)
//考虑什么时候会接队友的牌:
//队友牌数>我的牌数且对手的牌<=5
//若是自由出牌的回合,出牌类型的优先级:AAAB>AABBCC>ABCDE>A>AA>AAAA>DX