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

📄 calculate24.java

📁 用java写的24点游戏
💻 JAVA
字号:
import javax.swing.JApplet;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Calculate24 extends JApplet implements ActionListener{
	//声明类的成员变量
	JPanel panButtom;
	MyImgPanel panCenter;
	JTextField txtFile;
	//通过数组保存4张牌的大小
	int [] myStatms=new int[4];
	public Calculate24(){
		setLayout(new BorderLayout());
		panCenter=new MyImgPanel(this);
		panCenter.initImg();
		add(panCenter,"Center");
		panButtom=new JPanel();
		add(panButtom,"South");
		JButton btnStart=new JButton("开始游戏");
		JButton btnOk=new JButton("确定");
		txtFile=new JTextField(15);
		JLabel label=new JLabel("请输入表达式:");
		panButtom.add(btnStart);
		panButtom.add(label);
		panButtom.add(txtFile);
		panButtom.add(btnOk);
		btnStart.setActionCommand("start");
		btnStart.addActionListener(this);
		btnOk.setActionCommand("ok");
		btnOk.addActionListener(this);
	}
	//对4张扑克牌初始化
	public void init(){
		for(int i=0;i<4;i++){
			myStatms[i]=0;
		}
	}
	public void actionPerformed(ActionEvent ex){
		//按下开始按纽
		if(ex.getActionCommand().equals("start")){
			for(int i=0;i<4;i++){
				myStatms[i]=(int)(Math.random()*13)+1;//产生随机牌	
			}
			panCenter.repaint();
			
		}else if(ex.getActionCommand().equals("ok")){
			try{
				int result=calculateString(txtFile.getText().trim());
				if(result==-1){
					txtFile.setText("");
					txtFile.requestFocus();
					new MsgDlg("你输入的表达式不合法!请重新输入");
				}else if(result!=24){
					txtFile.setText("");
					txtFile.requestFocus();
					new MsgDlg("你输入的值为"+result+",请重新输入");
				}else if(result==24){
					txtFile.requestFocus();
					new MsgDlg("恭喜你,输入正确");
					for(int i=0;i<4;i++){
						myStatms[i]=(int)(Math.random()*13)+1;
					}
					panCenter.repaint();
					txtFile.setText("");
					txtFile.requestFocus();
				}
			}catch(Exception e){
				e.printStackTrace();
			}	
		}
	}
	public int calculateString(String str){//判断表达式的合法性
		int[]numbers=new int[4];
		String[] operators=new String[4];
		for(int i=0;i<4;i++){
			operators[i]="";
		}
		String tempStr, myString="";
		int numberNo=0,operatorNo=0;
		for(int i=0;i<str.length();i++){
			tempStr=str.substring(i,i+1);
			if(isNumber(tempStr)){
				myString+=tempStr;
			}else if(isOperator(tempStr)){
				if(numberNo>=4||operatorNo>=3)
				return -1;
				try{
					numbers[numberNo]=Integer.parseInt(myString);
				}catch(Exception e){
					e.printStackTrace();
				}
				myString="";
				numberNo++;
				operators[operatorNo]=tempStr;
				operatorNo++;
			}else{
				return -1;
			}
		}
		if(myString.length()!=0&&numberNo==3){
		try{numbers[numberNo]=Integer.parseInt(myString);
		}catch(Exception e){
			return -1;
		}
	}else
		return -1;
	//判断表达式的数字就是牌上的数字
	int tempStatms[]=new int[4];
	for(int i=0;i<4;i++){
		tempStatms[i]=myStatms[i];
	}
	for(int i=0;i<4;i++){
		int j=0;
		boolean existed=false;
		while(j<4&&!existed){
			if(tempStatms[j]==numbers[i]){
				tempStatms[j]=-1;
				existed=true;
			}
			j++;
		}
		if(!existed)
		return -1;
	}
	//计算表达式的值
	int result=numbers[0];
	for(int i=0;i<3;i++){
		if(operators[i].equals("+")){
			result+=numbers[i+1];	
		}else if(operators[i].equals("-")){
			result-=numbers[i+1];
		}else if(operators[i].equals("*")){
			result*=numbers[i+1];
		}else if(operators[i].equals("/")){
			result/=numbers[i+1];
		}
	}
	return result;
}
public boolean isNumber(String str){
	if(str.equals("1")||str.equals("2")||str.equals("3")||str.equals("4")
	||str.equals("5")||str.equals("6")||str.equals("7")||str.equals("8")||str.equals("9")){
		return true;
	}else{
		return false;
	}
}
public boolean isOperator(String str){
	if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")||str.equals("(")||str.equals(")")){
		return true;
	}else{
		return false;
	}	
 }
	
	}


class MyImgPanel extends Panel{
	final int IMGSIZE=100;
	Image[] myImage=new Image[14];
	Calculate24 mycal24;
	//装图
	public MyImgPanel(Calculate24 cal24){
		mycal24=cal24;
	}
	public void initImg(){
		URL url=null;
		try{
			url=Class.forName("Calculate24").getResource("back.gif");
		}catch(Exception e){
			e.printStackTrace();
		}
		myImage[0]=getToolkit().getImage(url);
		for(int i=1;i<=13;i++){
			try{
				url=Class.forName("Calculate24").getResource(i+".gif");
				System.out.println(url.toString());
			}catch(Exception e){
			}
			myImage[i]=getToolkit().getImage(url);
		}
		MediaTracker mt=new MediaTracker(this);
		for(int i=0;i<=13;i++){
			mt.addImage(myImage[i],i);
		}
		try{mt.wait();
		mt.checkAll();
		}catch(Exception e){
		}
	}
	public void paint(Graphics g){
		for(int i=0;i<4;i++){
			g.drawImage(myImage[mycal24.myStatms[i]],i*IMGSIZE+5,5,this);
		}
	}
}


class MsgDlg extends JFrame implements ActionListener{
	JLabel label=new JLabel();
	public MsgDlg(String strMsg){
		super();
		setTitle("表达式结果");
		JPanel p=new JPanel();
		add(p);
		p.add(label);
		label.setText(strMsg);
		setSize(300,100);
		setLocation(400,300);
		JButton btnOk=new JButton("确定");
		btnOk.addActionListener(this);
		p.add(btnOk);
		show();
	}
	public void actionPerformed(ActionEvent evt){
		this.dispose();
	}
}

⌨️ 快捷键说明

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