您的位置:首页 > 编程语言 > Java开发

24点游戏(java)

2017-04-14 22:44 316 查看
//[b]****24点纸牌游戏******[/b]

//版本:v1.0

//创建时间:2017年4月14日

//主要功能:系统随机生成1~13的4张牌(1用A代替,11用J代替,12用Q代替,13用K代替),要求将四张牌用加减乘除混合运算求得出24

//主要原理:系统通过对随机生成的四张扑克牌进行运算,如果结果为24,则输出结果及结果个数

//[b]**************************[/b]

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语言写过这个程序),虽然不是很复杂,但也从中学到了很多小知识点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  纸牌游戏