24点游戏(java)

//****24点纸牌游戏******
//版本:v1.0
//创建时间:2017年4月14日
//主要功能:系统随机生成1~13的4张牌(1用A代替,11用J代替,12用Q代替,13用K代替),要求将四张牌用加减乘除混合运算求得出24
//主要原理:系统通过对随机生成的四张扑克牌进行运算,如果结果为24,则输出结果及结果个数
//**************************

import java.util.Scanner;
import java.util.Random;
public class Game
{

    public static void main(String[] args)
    {
        int[] p=new int[4];//声明数组
        int c;
        Scanner scn=new Scanner (System.in);
        System.out.println("--------------------------------------------"\n);
        System.out.println("*******24点纸牌游戏******");  
        System.out.println("0代表扑克牌中的10");
        System.out.println("--------------------------------------------");
         do  
         {  
             System.out.println("随机生成的纸牌为:\n"); 
             Random( p) ;//函数调用
             printResult(p);//函数调用 
             System.out.println("1.继续游戏 2.结束\n");                           
             c=scn.nextInt();  
         }while(c==1);          
    }
//如果X为1时,返回A;同样,返回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[] p)  
    {
        int i; 
        Random random=new Random();
        for(i=0;i<4;i++)  
        {  
            p[i]=(int)(Math.abs(random.nextInt())%13+1);
            System.out.println(Card(p[i])+" ");         
        }

    }
    //四个运算符的运算
    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[] p,char[] o)  
    {
        double t;  
         int a=p[0];  
         int b=p[1];  
         int c=p[2];  
         int d=p[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)==0)  //如果计算结果的绝对值与24相等,输出结果
        {  
            System.out.println("("+"("+"("+Card(p[0])+o[0]+Card(p[1])+")"+o[1]+Card(p[2])+")"+o[2]+Card(p[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)   //如果计算结果的绝对值与24相等,输出结果
        {  
            System.out.println("("+"("+Card(p[0])+o[0]+"("+Card(p[1])+o[1]+Card(p[2])+")"+")"+Card(p[2])+Card(p[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)   //如果计算结果的绝对值与24相等,输出结果
        {  
            System.out.println("("+"("+Card(p[0])+o[0]+Card(p[1])+")"+o[1]+"("+Card(p[2])+o[2]+Card(p[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)   //如果计算结果的绝对值与24相等,输出结果
        {  
            System.out.println("("+Card(p[0])+o[0]+"("+Card(p[1])+o[1]+"("+Card(p[2])+o[2]+Card(p[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)   //如果计算结果的绝对值与24相等,输出结果
        {  
            System.out.println("("+Card(p[0])+o[0]+"("+"("+Card(p[1])+o[1]+Card(p[2])+")"+o[2]+Card(p[3])+")"+")1");  
            return 1;  
        }       
         return 0;  
     }
     //输出结果的数目
    public static void printResult(int[] p)
    {
         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(p,o)==1)  //如果输出函数返回值为真,输出结果数目递加
                    count++;
               }
            }
         } 
         System.out.println("共"+count+"种方法");    
    }
}

总结
零零散散自学java,学了大概2周了,这是自己第一次用java独立写出的第一个代码(之前用c语言写过这个程序),虽然不是很复杂,但也从中学到了很多小知识点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值