📄 calculate24.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 + -