24点纸牌游戏输出可能结果

基本思路:

算法实现:

根据x值返回1234到k

用Scanner 来输入不同的数,通过输入的数调用printResult(int[] ch)方法来确定是否等于24,如果等于24,分数++;

如果不等于24,生命--;

设计Random方法来实现随机产生四个数,调用printResult(int[] ch)

采用do while分别选择随机生成四个数或者自己输入四个数

ys(double num1,double num2,char o)来设计运算赋予“+ - * /”相应的意义

Result(int[] ch,char[] o)方法统计结果,当结果为24时输出结果

printResult(int[] ch)方法统计所有结果数目

具体代码实现如下

package jj;
import java.util.Scanner;
import java.util.Random;
public class g
{

   public  static void main(String args[]) {
	  int  count=0;
	  int life=3;
	    int fenshu =0;
        int[] ch=new int[4];//声明数组
        int c,d;
        Scanner sc=new Scanner (System.in);
   
        System.out.println("*******24点纸牌游戏******");  
        
       
         do  
         {  
             System.out.println("生成纸牌:\n"); 
             Random( ch) ;//函数调用
             printResult(ch);//函数调用 
             System.out.println("1.继续游戏 2.结束 3.挑战自我\n");                           
             c=sc.nextInt();  
         }
         while(c==1);          
   
   do  
   {  
	   System.out.println("输入纸牌:\n"); 
	
		for(int i=0;i<4;i++){
			ch[i]=sc.nextInt();	
//		int f1=sc.nextInt();
//		int f2=sc.nextInt();
//		int f3=sc.nextInt();
//		int f4=sc.nextInt();
		  }
	   printResult(ch);//函数调用 
	 
//	   if(count==0){
//		    life--;
//	   }
//	   if(count !=0){
//		   fenshu++;
//	   }
//	   if(life==0){
//		   break;
//	   }
	 
	  // System.out.println("共"+count+"种方法"); 
//	   System.out.println("生命"+life +" "+"分数 "+fenshu);
	   System.out.println("1.继续游戏 2.结束 3.挑战自我\n");                           
	   d=sc.nextInt();  
   }
   while(d==3);     
  sc.close();
   }
    
//private static void printResult(int f1, int f2, int f3, int f4) {
//	// TODO Auto-generated method stub
//	
//}

	//根据x值返回1到J,Q,K
    public static char Card(int x)
    {
        if(x==1)
            return 'A';
        if(x<10)
            return (char)(x+'0');
        else if(x==10)
            return '0';
        else if(x==11)
            return 'J';
        else if(x==12)
            return 'Q';
        else if(x==13)
            return 'K'; 
        return 0;
    }
    //随机生成四个数
    public static void Random(int[] ch)  
    {
        int i; 
        Random random=new Random();
        for(i=0;i<4;i++)  
        {  
            ch[i]=(int)(random.nextInt(13)+1);
            System.out.print(Card(ch[i])+" ");  
         
        }
        System.out.println();
    }
    //四个运算符的运算
    public static  double ys(double num1,double num2,char o) 
    {
        double result=0;  
          switch(o)  
         {  
             case '+':  
             result=num1+num2;  
             break;  
            case '-': 
            {
                if(num1>=num2)
                    result=num1-num2;
                else
                    result=num2-num1;
            }

             break;  
            case '*':  
             result=num1*num2;  
             break;  
            case '/':
             result=num1/num2;  
             break;  
            default :  
                break;  
         }       
         return result;         
    }
    //如果通过运算算得的结果为24,则输出结果
    public static  int Result(int[] ch,char[] o)  
    {
        double t;  
         int a=ch[0];  
         int b=ch[1];  
         int c=ch[2];  
         int d=ch[3];        

        //1.((A*B)*C)*D  
        t=0;  
        t=ys(ys(ys(a,b,o[0]),c,o[1]),d,o[2]);       
        if(t==24)  
        {  
            System.out.println("("+"("+"("+Card(ch[0])+o[0]+Card(ch[1])+")"+o[1]+Card(ch[2])+")"+o[2]+Card(ch[3])+")");   
            return 1;  
        }        
        //2.(A*(B*C))*D  
        t=0;  
        t=ys(ys(a,ys(b,c,o[1]),o[0]),d,o[2]);      
        if((t-24)==0)   
        {  
            System.out.println("("+"("+Card(ch[0])+o[0]+"("+Card(ch[1])+o[1]+Card(ch[2])+")"+")"+Card(ch[2])+Card(ch[3])+")"); 
            return 1;  
        }  
        //3.(A*B)*(C*D)  
        t=0;  
        t=ys(ys(a,b,o[0]),ys(c,d,o[2]),o[1]);       
        if((t-24)==0)   
        {  
            System.out.println("("+"("+Card(ch[0])+o[0]+Card(ch[1])+")"+o[1]+"("+Card(ch[2])+o[2]+Card(ch[3])+")"+")"); 
            return 1;  
        }        
        //4.A*(B*(C*D))  
        t=0;  
        t=ys(a,ys(b,ys(c,d,o[2]),o[1]),o[0]);          
        if((t-24)==0)   
        {  
            System.out.println("("+Card(ch[0])+o[0]+"("+Card(ch[1])+o[1]+"("+Card(ch[2])+o[2]+Card(ch[3])+")"+")"+")"); 
           return 1;  
        }  
        //5.A*((B*C)*D)   
        t=0;  
         t=ys(a,ys(ys(b,c,o[1]),d,o[2]),o[0]);        
        if((t-24)==0)   
        {  
            System.out.println("("+Card(ch[0])+o[0]+"("+"("+Card(ch[1])+o[1]+Card(ch[2])+")"+o[2]+Card(ch[3])+")"+")1");  
            return 1;  
        }       
         return 0;  
     }
     //输出结果的数目
    public static void printResult(int[] ch)
    {	
    	 int life=3;
 	    int fenshu =0;
         char[] O={'+','-','*','/'};  
         char[] o =new char[3];  
         int i,j,k;  
      
		  int count=0;        
         for(i=0;i<4;i++)//三层for循环列出了所有运算符可能出现的情况
         {
            for(j=0;j<4;j++) 
            {
               for(k=0;k<4;k++)  
               {  
                 o[0]=O[i];  
                 o[1]=O[j];  
                 o[2]=O[k];  
                 if(Result(ch,o)==1)  //如果输出函数返回值为真,输出结果数目递加
                    count++;
               }
            }
         } 
         if(count==0){
 		    life--;
 	   }
         else{
 		   fenshu++;
 	   }
        
        System.out.println("共"+count+"种方法"); 
         System.out.println("生命"+life +" "+"分数 "+fenshu);
    }
    
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值