java-コンソールのソハのゲーム


<span style="font-size:18px;">              ,        

package lkl1;

import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;
public class SuohaGame {
//             ,     4--1  
	//    (       ),          
	//       1--14    A--K,A   1      14  )
	
public SuohaGame(){
		for(int i=1;i<=5;i++){
			score[i]=1000;
			xiazhu[i]=0;
		}
	}

	//       
	public static void  Init(){
		cnt=1;
		vis[0]=1;
		win=0;
		max=0;
	}
	
	//         
	private String[] DX={"","A","2","3","4","5","6","7","8","9","10","J","Q","K","A"};//      
	private String[] HS={"","  ","  ","  ","  "};//      
	private static int max; //             
	private static int win; //         
	private static int cnt; //        
    private static int[] vis= new int[500]; //           
    
    //         
	public int [] score =new int[7]; //           
	public int[] xiazhu=new int[7]; //            
	public int[] flag=new int[7]; //           
	public int [] card[] =new int[7][10]; //          
	
	//         
   
	//       ,         
	public void sort(int[] a){
		for(int i=1;i<=5;i++)
			for(int j=i+1;j<=5;j++){
				if(a[i]<a[j]){
					int t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
			}
	}
	
	//            ,            
	public int bijiao(int x1,int x2,int num){
		int[] t1 = new int [20]; //    1    
		int[] t2 = new int [10]; //    1    
		int[] t3= new int [20]; //    2    
		int[] t4 = new int[10]; //    2    
		for(int j=1;j<=5;j++){
			  t1[j]=Daxiao(card[x1][j],1);
			  t3[j]=Daxiao(card[x2][j],1);
			  t2[j]=Huase(card[x1][j]);
			  t4[j]=Huase(card[x2][j]);
			}
		if(num==9||num==5){//       
			  int tt1=0,tt2=0;//           
			  int j1=-1,j2=-1;
			  for(int i=1;i<=5;i++){
			    	if(t1[i]>j1){
			    		j1=t1[i];
			    		tt1=t2[i];
			    	}
			    	if(t3[i]>j2){
			    		j2=t3[i];
			    		tt2=t4[i];
			    	}
			    }
			//Arrays.sort(t1);      
			sort(t1);
			sort(t3);
			if(t1[1]>t3[1]) //           
		        return x1;
			else if(t1[1]<t3[1])
				return x2;
			else{      //           ,            
				if(tt1>tt2)
					return x1;
				else
					return x2;
			}
		}
		else{
			for(int j=1;j<=5;j++){  //    A   
				t1[j]=Daxiao(card[x1][j],0);
				t3[j]=Daxiao(card[x2][j],0);
			}
			    int tt1=0,tt2=0;//           
			    int j1=-1,j2=-1;
			    for(int i=1;i<=5;i++){
			    	if(t1[i]>j1){
			    		j1=t1[i];
			    		tt1=t2[i];
			    	}
			    	if(t3[i]>j2){
			    		j2=t3[i];
			    		tt2=t4[i];
			    	}
			    }
			sort(t1);
			sort(t3);
			///               
			if(num==8||num==7||num==4){  
				//   4  3            
				 if(t1[3]>t2[3]) 
					 return x1;
				 else
					 return x2;
			}
			if(num==6){ //       
				//     ,     
				int i=0;
				for(i=1;i<=5;i++){
					if(t1[i]>t3[i])
						return x1;
					else if(t1[i]<t3[i])
						return x2;
				}
				if(i>5){
					if(tt1>tt2)
						return x1;
					else
						return x2;
				}
			}
			//  2   1            
			//        
			int[] vis1=new int[22];
			int[] vis2 =new int[22];
			for(int i=0;i<=20;i++){
				vis1[i]=0;
				vis2[i]=0;
			}
			for(int i=1;i<=5;i++){
				vis1[t1[i]]++;
				vis2[t3[i]]++;
			}
			if(num==3){ //  2      
			//      ,             
			   int t11=0,t12=0,t13=0; //            
			   int t21=0,t22=0,t23=0;
			   int cnt1=0,cnt2=0;
			   for(int d=14;d>=1;d--){
				   if(vis1[d]==2&&cnt1==0){
					   t11=d;
					   cnt1++;
				   }
				   if(vis1[d]==2&&cnt1==1){
					   t12=d;
					   cnt1++;
				   }
				   if(vis1[d]==1)
					   t13=d;
				   if(vis2[d]==2&&cnt2==0){
					   t21=d;
					   cnt2++;
				   }
				   if(vis2[d]==2&&cnt2==1){
					   t22=d;
					   cnt2++;
				   }
				   if(vis2[d]==1)
					   t23=d;
			   }
               if(t11>t21)
          	      return x1;
	           else if(t11<t21)
	          	  return x2;
	           else if(t12>t22)
	          	  return x1;
	           else if(t21<t22)
	              return x2;
	           else if(t13>t23)
	          	  return x1;
	           else if(t13<t23)
	          	  return x2;
	           else if(tt1>tt2)
	          	  return x1;
	           else
	          	  return x2;
			}
		 if(num==2){ //       
		     int xx1=0,xx2=0;
		     for(int i=1;i<=5;i++){
		    	 if(vis1[t1[i]]==2){
		    		 xx1=t1[i];
		    		 t1[i]=-1;
		    	 }
		    	 if(vis2[t3[i]]==2){
		    		 xx2=t3[i];
		    		 t3[i]=-1;
		    	 }
		     }
		   //  System.out.println(xx1+" "+xx2);
		     if(xx1>xx2)
		    	 return x1;
		     else if(xx1<xx2)
		    	 return x2;
		     sort(t1);
		     sort(t3);
		     int i=0;
		     for(i=1;i<5;i++){
		    	 if(t1[i]>t3[i])
		    		 return x1;
		    	 else if(t1[i]<t3[i])
		    		 return  x2;
		     }
		     if(i>=5){
		    	 if(tt1>tt2)
		    		 return x1;
		    	 else 
		    		 return x2;
		     }
		 }
		 if(num==1){ //         
			 //                
			int i=0;
			for(i=1;i<=5;i++){
				if(t1[i]>t3[i])
					return x1;
				else if(t1[i]<t3[i])
					return x2;
			}
			if(i>5){
				if(tt1>tt2)
					return x1;
				else
					return x2;
			}
		 }
		}
		return 0;
	}
	
	///          
	//           ,            
	public int Getnum(int i){
	 ///             (        ,         
	///,         ,     )             
	boolean is_tonghua=false;  //       
	boolean is_shunzi=false; //     
	int num_four=0; //        
	int num_three=0;  //        
	int num_two=0; //        
	int[] t1 = new int [10]; //        
	int[] t2 = new int [10]; //        
	int j;
	for(j=1;j<=5;j++){
		  t1[j]=Daxiao(card[i][j],1);
		  t2[j]=Huase(card[i][j]);
		}
    ///    
	 for( j=2;j<=5;j++){
		 if(t2[j]!=t2[j-1])
			 break;
	 }
	 if(j>5){
		 is_tonghua=true;
	 }
	 
	 ///       
	 sort(t1);
	 for(j=2;j<=5;j++){
		 if(t1[j]!=t1[j-1]-1)
			 break;
	 }
	 if(j>5){
		 is_shunzi=true;
	 }
	 
	 ///      
	 for(j=1;j<=5;){
		 if(j+3<=5&&t1[j]==t1[j+1]&&t1[j]==t1[j+2]&&t1[j]==t1[j+3]){
			 num_four++;
			 break;
		 }
		 if(j+2<=5&&t1[j]==t1[j+1]&&t1[j]==t1[j+2]){
			 num_three++;
			 j+=3;
		 }
		 else if(j+1<=5&&t1[j]==t1[j+1]){
			 num_two++;
			 j+=2;
		 }
		 j++;
	 }
	 
	 ///            
	 if(is_tonghua&&is_shunzi) //   
		 return 9;
	 if(num_four==1)
		 return 8;
	 if(num_three==1&&num_two==1) //    
		 return 7;  
	 if(is_tonghua)  //  
		 return 6;
	 if(is_shunzi) //  
		 return 5;
	 if(num_three==1)//  
		 return 4;
	 if(num_two==2) //  (  )
		 return 3;
	 if(num_two==1) //  
		 return 2;
	 return 1;  //  
	}
	
	//                 
	public int  cal(int t1,int t2){
		if(t1>=10)
			return t2*100+t1;
		else
			return t2*10+t1;
	}
	
	///        
	///  A     ,           (14)
	///           。       fg  
	///fg 0   14(    );   fg 1   1(    )
	public int Daxiao(int x,int fg){
		if(x>100)
			x=x%100;
		else
			x=x%10;
		if(fg==0&&x==1)
			return 14;
		if(fg==1&&x==1)
			return 1;
		return x;
	}
	
	///        
	public int Huase(int x){
		if(x>100)
			return x/100;
		else
			return x/10;
	}
	
	
	//                ,    
	public void print1(int num){
		int[] xx1=new int[20];  //xx1      
		for(int i=0;i<20;i++){
			xx1[i]=0;
		}
		for(int i=1;i<=5;i++){
			int t=Daxiao(card[num][i],0);
			xx1[t]++;
		}
		System.out.print(num+"        : ");
		for(int d=4;d>=1;d--){
		    for(int i=14;i>=1;i--){
			     if(xx1[i]==d){
				      for(int j=1;j<=5;j++){
					       if(Daxiao(card[num][j],0)==i){
						   System.out.print(HS[Huase(card[num][j])]+DX[i]+" ");
					  }
				  }
			 }
		  }
		}
		System.out.println("");
	}
	
	
	//              
	public void print(int num,int j){
		   if(j==2)
	             System.out.print(num+"           : ");
		   else
			   System.out.print(num+"        : ");
			for(int i=j;i<=cnt;i++){
				System.out.print(HS[Huase(card[num][i])]);
				System.out.print(DX[Daxiao(card[num][i],0)]+" ");
		}
			System.out.println();
	}
	
	//      
	//          ,              
	public int  choice(int num){
		     Scanner sc = new Scanner(System.in);
		     if(score[num]-xiazhu[num]<max) {
		    	 //                    ,       
		    	 System.out.println(num+"           !    ");
		    	 score[num]-=xiazhu[num];
		    	 flag[num]=1;
		    	 return 0;
		     }
		      System.out.println(num+"            : ");
		      int t;
		      t=sc.nextInt();
		      if(cnt!=5){
		          while(t>2||t<0){
		    	        System.out.println("    !     : ");
		    	        t=sc.nextInt();
		      } 
		     }
		      else{
		    	    while(t>3||t<0){
		    	        System.out.println("    !     : ");
				    	 t=sc.nextInt();
		    	    }
		      }
		      if(t==2){
		    	  //               ,   
		    	  score[num]-=xiazhu[num];
		    	  flag[num]=1;
		    	  return 0;
		      }
		      if(t==1){ //         
		    	  System.out.println(num+"           ("+max+"---"+(score[num]-xiazhu[num])+"): ");
		    	  int fenshu;
		    	  fenshu=sc.nextInt();
		    	  while(fenshu<max||fenshu>(score[num]-xiazhu[num])){
		    		  System.out.println("    !     :");
		    		  fenshu=sc.nextInt();
		    	  }
		    	  if(max<fenshu){
		    		  max=fenshu;
		    	  }
		    	  xiazhu[num]+=fenshu;
		    	  return 0;
		      }
		      if(t==3){
		    	  xiazhu[num]=score[num];
		    	  System.out.println(num+"       !         ");
		    	  System.out.println("1:      2:  ");
		    	  int j=num+1;
		    	  while(j!=num){
		    		  if(j>5) j-=5;
		    		  if(flag[j]==0){
		    		        System.out.println(j+"            : ");
		    		        int ch;
		    		        ch=sc.nextInt();
		    		        while(ch<1||ch>2){
		    			         System.out.println("         :");
		    			         ch=sc.nextInt();
		    		        }
		    		      if(ch==1){
		    			         xiazhu[j]=score[j];
		    		      }
		    		      else{
		    			         score[j]-=xiazhu[j];
		    			         flag[j]=1;
		    		     }
		    		  }
		    		  j++;
		    		  if(j>5)
		    			  j-=5;
		    	  }
		    	 return 1;  //      ,  1
		      }
		 return 0;
	}
	
	//      ,           ,       :
	//                
	//          ,    
	public void check(){
		int cnt=0;
		int temp=0;
		for(int i=1;i<=5;i++){
			if(flag[i]==0){
				cnt++;
				temp=i;
			}
		}
		if(cnt==1){
			win=temp;
		}
		else if(cnt==0){
			win=-1;
		}
	}
	
	//            
	public int judge(){
		if(cnt<5){
			///        ,         
			///       
			int tmp=0,j=0;
			for(int i=1;i<=5;i++){
				if(flag[i]==0&&tmp<Daxiao(card[i][cnt],0))
					tmp=Daxiao(card[i][cnt],0);
				    j=i;
			}
			for(int i=1;i<=5;i++){
				if(flag[i]==0&&Daxiao(card[i][cnt],0)==tmp){
					if(Huase(card[i][cnt])>Huase(card[j][cnt])){
						j=i;
					}
				}
			}
		    return j;
		}
		else {
		///    5   ,         ,           
		///   9--1     ,  ,    (3   +  ),  ,  
		///  ,  (2 ),  。                ,    
		///               。        ,        
		///  :                    ,      
		///                    ,                   
		///                                 
		int[] num =new int[10];  //            ,   -1
		for(int i=1;i<=5;i++)
			    num[i]=-1;
		for(int i=1;i<=5;i++){
			if(flag[i]==0){
				num[i]=Getnum(i);
		    }
		}
		
		/*
		//    
		for(int i=1;i<=5;i++){
			System.out.print(num[i]+" ");
		}
		System.out.println();*/
		
		int tmp1=0,tmp2=-1; ///tmp1            ,tmp2         
		for(int i=1;i<=5;i++){
			if(num[i]>tmp2){
				tmp2=num[i];
				tmp1=i;
			}
			else if(num[i]==tmp2){
				tmp1=bijiao(tmp1,i,tmp2);
			}
		}
		return tmp1;
	}
 }
	
	//    
	//         
	public void Fapai(int num,int i){
		if(flag[num]==1) //        ,    
			return;
		 Random rand =new Random();
		   int t1=0,t2=0,t=0;
       	  while(vis[t]==1){
		   //  1--13          
	    	t1=rand.nextInt(12)+1;
		   //  1--4          
		   t2=rand.nextInt(3)+1;
		   t=cal(t1,t2);
		   if(vis[t]==0){
			   vis[t]=1;
		      card[num][i]=t;
		      return ;
		}
	 }
	}
	
	//      
	public  void play(){
	while(cnt<=5){
		//cnt       
		if(cnt==1){
			//     ,     2 ,          ,       
		 for(int j=1;j<=5;j++){
			for(int i1=1;i1<=2;i1++){
		          Fapai(j,i1);
			}
		}
		 cnt++;
		 //                   
	  for(int i1=1;i1<=5;i1++){
			print(i1,2);
		}
  }
else{
	 // System.out.println("     "+cnt+" ");
		//              ,           
		//                  
			    for(int i1=1;i1<=5;i1++){
			    	if(flag[i1]==1)
			    		continue;
			    	 System.out.println("1:       2:  ");
			    	 if(cnt==5){
			    		 System.out.println("3:   ");
			    	 }
			    	 if(choice(i1)==1)
			    		 break;
			    }
			    check();
			    int j=judge(); //               
			    if(cnt==5){
			    	win=j;
			    }
			    if(win!=0) { //         ,     ,           
			        if(win==-1){
			        	System.out.println("   ,        ");
			        	return;
			        }
			    	System.out.println("      : "+win+"   ");
			    	for(int i=1;i<=5;i++){
			    		if(i==win)
			    			continue;
			    		score[win]+=xiazhu[i];
			    	}
			    	System.out.println("        :"+(score[win]-1000));
			    	for(int i=1;i<=5;i++){
			    		if(flag[i]==0&&i!=win){
			    			score[i]-=xiazhu[i];
			    		}
			    	}
			    	for(int i=1;i<=5;i++){
			    		if(flag[i]==0){
			    			  print1(i);
			    			 // print(i,1);  //              
			    			 // System.out.println("");//    
			    		}
			    	}
			    	//               
			    	for(int i=1;i<=5;i++){
			    		System.out.println(i+"         : "+score[i]);
			    	}
			    	return;
			    }
			    //  j  ,        
			    Fapai(j,cnt+1); 
			    int i=j+1;
			    System.out.println(i);
			    while(i!=j){
			    	if(i>5)
			    		i-=5;
			       Fapai(i,cnt+1);
			       i++;
			       if(i>5)
			    	   i-=5;
			    }
			    cnt++; //        
			  for(int i1=1;i1<=5;i1++){ ///                  
				  if(flag[i1]==0){
					  print(i1,2);
				  }
			  }
	}
	//max=0;
 }
}
	
public static void main(String[] args){
		SuohaGame sg= new SuohaGame();
		Init();
		sg.play();
	}
}

</span>