java 扑克牌 24点小游戏

要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可

1. 程序风格良好(使用自定义注释模板)

         2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。

         3.所有成绩均可记录在TopList.txt文件中。

包含括号),如果表达式计算结果为24则代表用户赢了此局。


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/*扑克中每次取出4张牌。使用加减乘除,(其中,J代表11,Q代表12,K代表13,A代表1),
 * 按照要求编程解决24点游戏。
*	基本要求: 随机生成4个代表扑克牌牌面的数字字母,
*	程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
*24 点游戏 玩家有三条命 每4张牌有1分钟时间 来写出算式 或者写Null代表无法得出 A-1 J-11 Q-12 K-14*/

/*
*@author kxd
*此程序核心算法,采用ArrayList来做容器  递归 math类  做计算
 * 由于核心算法会很频繁的使用递归所以本人逻辑思维被搞得有点乱
 * 程序中有一小亮点 静态getRandomNumber函数  是本人吧Random 函数集成 编写成了一个很方便可随意改变生成范围的函数
 * 
 * */
 
public class Demo1 {
	
	private String  deal (){//发牌函数
		String cards=null;
		for(int i=0;i<3;i++) {
			int card =getRandomNumber(1,13);//调用getRandomNumber函数
			if(i==0) {
				if(card==1) {
					cards ="A ";	
				}if(card==11) {
					cards ="J ";
					
				}if(card==12) {
					cards ="Q ";
					
				}if(card==13) {
					cards ="K ";
				}if(card>=2&card<=10) {
					cards=Integer.toString(card)+" ";
				}
			}
			if(i==3) {//最后
			
			if(card==1) {
				cards = cards+"A";	
			}if(card==11) {
				cards = cards+"J";
				
			}if(card==12) {
				cards = cards+"Q";
				
			}if(card==13) {
				cards = cards+"K";
			}if(card>=2&card<=10) {
				cards=cards+Integer.toString(card);
			}
			
			}
			
			else {
				if(card==1) {
					cards = cards+"A ";	
				}if(card==11) {
					cards = cards+"J ";
					
				}if(card==12) {
					cards = cards+"Q ";
					
				}if(card==13) {
					cards = cards+"K ";
				}if(card>=2&card<=10) {
					cards=cards+Integer.toString(card)+" ";
				}
			}	
		}
		System.out.println(cards);
		return cards ;
	}
	public static int getRandomNumber(int start,int end) {//获取随机数函数
		
		return (int)(Math.random()*(end-start+1)+start);//数学得学好 ,程序没烦恼
	}
//转换牌为数字
	private double transform(String s){
		if(s.equals("A")){
		return 1;
		}
		if(s.equals("J")){
		return 11;
		}
		if(s.equals("Q")){
		return 12;
		}
		if(s.equals("K")){
		return 13;
		}
		int n=Integer.parseInt(s);
		if(n<2||n>10){
		return -1;
		}
		return n;
}

	
	public static String res=null;
	
	public String Point24(String cards) {//读取卡牌  函数
		if(cards==null||cards.contains("joker")||cards.contains("JOKER")){
			return "ERROR";
		}
		String[] c=cards.split(" ");
		if(c.length!=4){
			return "ERROR";
		}
		ArrayList d=new ArrayList();
		ArrayList s=new ArrayList();
		
		for(int i=0;i<4;i++){
			double td=transform(c[i]);
			if(td==-1){
				return "ERROR";
			}
			d.add(td);
			s.add(c[i]);
		}
		res=null;		//清空数据
		recursion(d,s);
		if(res==null){
			return "Null";
		}
		return res;
	}
	
	//递归,数组中取出两个数计算后结果放回数组
	private void recursion(ArrayList d,ArrayList s){
		int n=d.size();
		if(n==1){
			if(Math.abs(d.get(0)-24.0)<=0.000000001){	//防止有分数而产生误差
				res=s.get(0);		//若数组只有一个数,且为24,则将算式字符串赋值给类静态变量
//				System.out.println(res);
			}
			return;
		}
		
		for(int i=0;i dd=new ArrayList();//用于递归的新数组
				ArrayList ss=new ArrayList();//用于存放算式的新数组
				//任意取出两个数的不同组合情况
				for(int r=0;r0) {
			long startTime = System.currentTimeMillis();    //获取开始时间
		System.out.println(" 发牌如下:");
		Demo1 c = new Demo1();
		 String cards=c.deal();//发牌
		
		System.out.print("The method to make 24 points is: ");
		 Scanner s= new  Scanner(System.in);
		 String str = s.nextLine();
		 long endTime = System.currentTimeMillis();  
		 if(endTime-startTime>=60*1000) {
			 System.out.println("Too Late! ");
			 count--;
			 System.out.println("还有生命值"+count);
			 continue;
		 }
		if ( str.equals(c.Point24(cards))) {
			System.out.println("正确 真skr小机灵鬼!");
			 System.out.println("还有生命值"+count);
			 score++;
			 continue;
		}else {
			System.out.println("错误 继续加油!");
			count--;
			 System.out.println("还有生命值"+count);
			 continue;
			
		}
		 
		
		 }else {
			 bl=false;
		 }
		 }
		  System.out.println("本次成绩 :"+score);
		  String sc= Integer.toString(score);
		  setFile (sc);
		  
		System.out.println("Game Over!");
	}
}

运行结果:

java 扑克牌 24点小游戏_第1张图片

java 扑克牌 24点小游戏_第2张图片

打开文件:

 java 扑克牌 24点小游戏_第3张图片

你可能感兴趣的:(大学,java,算法,24点,递归)