⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twentyfourpoint.java

📁 一款简单的二十四点游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package wm.TwentyFourPoint;

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.text.*;
import javax.swing.*;
import java.lang.*;

public class TwentyFourPoint extends JFrame implements ActionListener
{
	private JPanel ButtonPanel,FillPanel,ShowPanel,NumberPanel;
	private JButton ButtonRoll,ButtonInput,ButtonShow,ButtonClear,ButtonDo;
	private JTextField NumField[]=new JTextField[4],InputField;
	private JLabel label1,label2;	
	private int i=0,j=0,k=0,m=-1,n=-1,p=0,q=0,x=0;
	//private int Number4[]=new int[4];
	            //num_a=0,num_s=0,num_m=0,num_d=0,
	            //flag_a=0,flag_s=0,flag_m=0,flag_d=0;
	private double numberA[]=new double[5],
	               numberB[]=new double[5],
                   number[][]=new double[5][5],result;
    private double number4[]=new double[4];
	private JTextArea area;
	private String status="",string_in="",out="",
	               StrA[][]=new String[5][5],
	               StrB[][]=new String[5][5],
	               Str[][]=new String[5][5],
	               Str_End[][][]=new String[5][5][5];
	private DecimalFormat fourDigits=new DecimalFormat("0.0000");
	private Vector vector=new Vector(),
	               vectorcopy=new Vector(),
	               vectorstring=new Vector();//存入最终答案
	               
	
	public TwentyFourPoint()
	{
		super("24Points Game");
		
		Container container=getContentPane();
		container.setLayout(new BorderLayout());
		
		
		NumberPanel=new JPanel();
		NumberPanel.setLayout(new GridLayout(1,4,5,5));
		FillPanel=new JPanel();
		FlowLayout layout=new FlowLayout();
		FillPanel.setLayout(layout);
		layout.setAlignment(FlowLayout.CENTER);
		ButtonPanel=new JPanel();
		ButtonPanel.setLayout(new GridLayout(2,1,80,8));
		ShowPanel=new JPanel();
		
		ButtonRoll=new JButton("ROLL");
		ButtonInput=new JButton("INPUT");
		ButtonShow=new JButton("SHOW ANSWER");
		ButtonShow.setEnabled(false);
		ButtonClear=new JButton("CLEAR");
		ButtonDo=new JButton("DONE");
		ButtonRoll.addActionListener(this);
	    ButtonInput.addActionListener(this);
		ButtonShow.addActionListener(this);
		ButtonClear.addActionListener(this);
		ButtonDo.addActionListener(this);
		for(int x=0;x<NumField.length;x++)
		{
			NumField[x]=new JTextField(3);
			NumField[x].setEditable(false);
			NumField[x].setText("");
						
		    NumberPanel.add(NumField[x]);		    		    
		}
		
		NumberPanel.add(ButtonRoll);
		NumberPanel.add(ButtonInput);
			
		
		label1=new JLabel("请输入您的答案:");
		label2=new JLabel("正确的结果:");
		InputField=new JTextField(35);
		//InputField.setText("");
		area=new JTextArea(10,35);
		area.setEditable(false);
		
		FillPanel.add(label1);
		FillPanel.add(InputField);
		FillPanel.add(label2);
		FillPanel.add(new JScrollPane(area));
			
		ShowPanel.add(ButtonDo);
		ShowPanel.add(ButtonShow);
		ShowPanel.add(ButtonClear);
					
		
		container.add(NumberPanel,BorderLayout.NORTH);
		container.add(FillPanel,BorderLayout.CENTER);		
		container.add(ShowPanel,BorderLayout.SOUTH);
		
		
		
		setSize(450,400);		
		setLocation(150,150);
		setVisible(true);		
		
	}
	public void actionPerformed(ActionEvent e)
    {	
		 
    	if(e.getSource()==ButtonRoll)
    	{
    		ButtonShow.setEnabled(true);
    		for( int x=0;x<NumField.length;x++)    		 		
    		{
    			NumField[x].setEditable(false);
    			NumField[x].setText(Integer.toString(1+(int)(Math.random()*13)));//随机产生四个数
    			number4[x]=Double.parseDouble(NumField[x].getText());   
    	    }
    	    //随机产生四个数,相当于重新计算,清除以前所有数据
    	    area.setText("");
    	    InputField.setText("");
    	    vector.clear();
    	    vectorcopy.clear();
    	    vectorstring.clear();				 
    	}
    	
    	if(e.getSource()==ButtonInput)
    	{		
    		
    		for( int x=0;x<NumField.length;x++)    		
    		  NumField[x].setEditable(true); 
    		ButtonShow.setEnabled(true);
    		area.setText("");
    	    InputField.setText("");
    	    vector.clear();
    	    vectorcopy.clear();
    	    vectorstring.clear();
    	}
    	
    	if(e.getSource()==ButtonShow)
    	{
    		//先清空以前所有数据
    		vector.clear();
            vectorcopy.clear(); 
            vectorstring.clear();  
    		status="";
    		ShowAnswer(); 
    		area.setText(status);
    		for( int x=0;x<NumField.length;x++)    		
    		  NumField[x].setEditable(false);    		
    		
    	}
    	if(e.getSource()==ButtonClear)
    	{
    		for( x=0;x<NumField.length;x++)
    		{
    		   NumField[x].setText("");
    		   NumField[x].setEditable(false);
    		}
    		 InputField.setText("");
    		 area.setText("");
    		 vector.clear();
    		 ButtonShow.setEnabled(false);
    		 
    	}
    	if(e.getSource()==ButtonDo)
    	{
    		ShowAnswer();
    		out="";
    		if(InputField.getText().equalsIgnoreCase(""))
    		  JOptionPane.showMessageDialog( this,"请输入合适的算法","错误",JOptionPane.ERROR_MESSAGE );
    		else {match();area.setText(out);}
    	}  	
					
	}
	/*运用五种运算+(A+B) -(大数减小数) *(A*B) /(A/B) /(B/A)
	 *因为四个数,运算的时候可以分成两种情况,一种是两个两个配对;第二种是三个一个配对
	 *假设四个数是abcd,第一种的思路是ab-A,cd-B,AB-24;第二种思路是ab-A,Ac-B,Bd-24
	 *每一种运算都要进行上述五种运算情况*/
	
	//22情况
	public void arithmetic1()
	{		
		
		  for(j=0;j<vector.size();j++)		     
		  {	    
		        i=0; 
		      	m=-1;
		      	if(j!=i) 
		      	{
		      		for(k=0;k<4;k++)//4个数
		      		{
		      			if(k!=i&&k!=j&&m==-1)
		      			{m=k;k++;}
		      			if(k!=i&&k!=j&&k!=m)
		      			{n=k;break;}
		      			
		      		}
		      		
		      		for(k=0;k<5;k++)//5种运算	      	
		      	    switch(k)
		      	    {
		      	    	case 0:numberA[k]=(Double)vector.get(i)+(Double)vector.get(j);
		      	    	       numberB[k]=(Double)vector.get(m)+(Double)vector.get(n);
		      	    	       StrA[k][0]=((Double)vector.get(i)).intValue()+"+"+((Double)vector.get(j)).intValue();
		      	    	       StrB[0][k]=((Double)vector.get(m)).intValue()+"+"+((Double)vector.get(n)).intValue();
		   	                   break;
		   	           case 1: if((Double)vector.get(i)>=(Double)vector.get(j))
		   	                   {
		   	                   	 numberA[k]=(Double)vector.get(i)-(Double)vector.get(j);
		   	                   	 StrA[k][0]=((Double)vector.get(i)).intValue()+"-"+((Double)vector.get(j)).intValue();
		   	                   }
		   	                   else 
		   	                   {
		   	                   	 numberA[k]=(Double)vector.get(j)-(Double)vector.get(i);
		   	                   	 StrA[k][0]=((Double)vector.get(j)).intValue()+"-"+((Double)vector.get(i)).intValue();
		   	                   }
		   	                   
		      	    	       if((Double)vector.get(m)>=(Double)vector.get(n))
		   	                   {
		   	                   	 numberB[k]=(Double)vector.get(m)-(Double)vector.get(n);
		   	                   	 StrB[0][k]=((Double)vector.get(m)).intValue()+"-"+((Double)vector.get(n)).intValue();
		   	                   }
		   	                   else 
		   	                   {
		   	                   	 numberB[k]=(Double)vector.get(n)-(Double)vector.get(m);
		   	                   	 StrB[0][k]=((Double)vector.get(n)).intValue()+"-"+((Double)vector.get(m)).intValue();
		   	                   }
		   	                   break;
		   	                  
		   	           case 2: numberA[k]=(Double)vector.get(i)*(Double)vector.get(j);
		      	    	       numberB[k]=(Double)vector.get(m)*(Double)vector.get(n);
		      	    	       StrA[k][0]=((Double)vector.get(i)).intValue()+"*"+((Double)vector.get(j)).intValue();
		      	    	       StrB[0][k]=((Double)vector.get(m)).intValue()+"*"+((Double)vector.get(n)).intValue();
		   	                   break;
		   	                   
		   	                   		   	                   
		   	           case 3: numberA[k]=(Double)vector.get(i)/(Double)vector.get(j);
		      	    	       numberB[k]=(Double)vector.get(m)/(Double)vector.get(n);
		      	    	       StrA[k][0]=((Double)vector.get(i)).intValue()+"/"+((Double)vector.get(j)).intValue();
		      	    	       StrB[0][k]=((Double)vector.get(m)).intValue()+"/"+((Double)vector.get(n)).intValue();
		   	                   break;
		   	           case 4: numberA[k]=(Double)vector.get(j)/(Double)vector.get(i);
		      	    	       numberB[k]=(Double)vector.get(n)/(Double)vector.get(m);
		      	    	       StrA[k][0]=((Double)vector.get(j)).intValue()+"/"+((Double)vector.get(i)).intValue();
		      	    	       StrB[0][k]=((Double)vector.get(n)).intValue()+"/"+((Double)vector.get(m)).intValue();
		   	                   break;
		   	        }//switch end,for end
		   	    	
		   	    	for(int p=0;p<numberA.length;p++)
		   	    	  for(int q=0;q<numberB.length;q++)//5×5=25种情况
		   	    	    for(k=0;k<5;k++)
		   	    	    {
		   	    	    	switch(k)
		   	    	    	{
		   	    	    		case 0:result=numberA[p]+numberB[q];
		      	    	               Str[p][q]=StrA[p][0]+"+"+StrB[0][q]+"="+(int)result;//fourDigits.format(result);
		      	    	               if(result>23.9999&&result<24.0001) 
		      	    	               vectorstring.addElement(Str[p][q]);
		   	                           break;
		   	                           
		   	                    case 1:if(numberA[p]>=numberB[q])
		   	                           {
		   	                           	 result=numberA[p]-numberB[q];
		   	                           	 if(q==0||q==1)
		      	    	                 Str[p][q]=StrA[p][0]+"-"+"("+StrB[0][q]+")"+"="+(int)result;//fourDigits.format(result);
		      	    	                 if(q==2||q==3||q==4)
		      	    	                 Str[p][q]=StrA[p][0]+"-"+StrB[0][q]+"="+(int)result;//fourDigits.format(result);		      	    	               
		      	    	                 if(result>23.9999&&result<24.0001) vectorstring.addElement(Str[p][q]);
		      	    	                 	
		      	    	               }
		      	    	               else
		      	    	               {
		      	    	               	 result=numberB[q]-numberA[p];
		      	    	               	 if(p==0||p==1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -