📄 cal24.java
字号:
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Cal24 extends Applet implements ActionListener
{
Panel m_pBottom;
PicPanel m_pCenter;
TextField m_txField;
int[] m_nStatus=new int[4];
public Cal24()
{
setLayout(new BorderLayout());
m_pCenter=new PicPanel(this);
m_pCenter.initImg();
add(m_pCenter,BorderLayout.CENTER);
m_pBottom=new Panel();
add(m_pBottom,BorderLayout.SOUTH);
Button btStart=new Button("开始游戏");
Button btOk=new Button("确定");
m_txField=new TextField(15);
Label label=new Label("请输入表达式:");
m_pBottom.add(btStart);
m_pBottom.add(label);
m_pBottom.add(m_txField);
m_pBottom.add(btOk);
btStart.setActionCommand("start");
btStart.addActionListener(this);
btOk.setActionCommand("ok");
btOk.addActionListener(this);
}
public void init()
{
for(int i=0;i<4;i++)
{
m_nStatus[i]=0;
}
}
public void actionPerformed(ActionEvent evt)
{
/**按下开始按钮**/
if(evt.getActionCommand().equals("start"))
{
for(int i=0;i<4;i++)
{
m_nStatus[i]=(int)(Math.random()*13)+1;
}
m_pCenter.repaint();
}
/**按下确定按钮**/
else if(evt.getActionCommand().equals("ok"))
{
try
{
int result=calString(m_txField.getText().trim());
if(result==-1)
{
m_txField.setText("");
m_txField.requestFocus();
new MsgDlg("你输入的表达式不合法,请重新输入!");
}
else if(result!=24)
{
m_txField.setText("");
m_txField.requestFocus();
new MsgDlg("你输入的表达式的值为"+result+",请重新输入!");
}
else if(result==24)
{
m_txField.requestFocus();
new MsgDlg("祝贺你,你的输入正确!");
for(int i=0;i<4;i++)
{
m_nStatus[i]=(int)(Math.random()*13)+1;
}
m_pCenter.repaint();
m_txField.setText("");
m_txField.requestFocus();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public int calString(String str)
{
/**
判断表达式的合法性
**/
int[] nums=new int[4];
String[] ops=new String[4];
for(int i=0;i<4;i++)
{
ops[i]="";
}
String tempStr,s="";
int numNo=0,opNo=0;
for(int i=0;i<str.length();i++)
{
tempStr=str.substring(i,i+1);
if(isNumber(tempStr))
{
s+=tempStr;
}
else if(isOperator(tempStr))
{
if(numNo>=4 || opNo>=3)return -1;
try
{
nums[numNo]=Integer.parseInt(s);
}
catch(Exception e)
{
}
s="";
numNo++;
ops[opNo]=tempStr;
opNo++;
}
else
{
return -1;
}
}
if(s.length()!=0 && numNo==3)
{
try
{
nums[numNo]=Integer.parseInt(s);
}
catch(Exception e)
{
return -1;
}
}
else return -1;
/**
判断表达式的数字就是扑克牌上的数字
**/
int tempStatus[]=new int[4];
for(int i=0;i<4;i++)
{
tempStatus[i]=m_nStatus[i];
}
for(int i=0;i<4;i++)
{
int j=0;
boolean existed=false;
while(j<4 && !existed)
{
if(tempStatus[j]==nums[i])
{
tempStatus[j]=-1;
existed=true;
}
j++;
}
if(!existed)return -1;
}
/**
计算表达式的值
**/
int result=nums[0];
for(int i=0;i<3;i++)
{
if(ops[i].equals("+"))
{
result+=nums[i+1];
}
else if(ops[i].equals("-"))
{
result-=nums[i+1];
}
else if(ops[i].equals("*"))
{
result*=nums[i+1];
}
else if(ops[i].equals("/"))
{
result/=nums[i+1];
}
}
return result;
}
private boolean isNumber(String str)
{
if(str.equals("0")||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;
}
}
private boolean isOperator(String str)
{
if(str.equals("+")||str.equals("-")||
str.equals("*")||str.equals("/"))
{
return true;
}
else
{
return false;
}
}
}
class PicPanel extends Panel
{
final int IMG_SIZE=100;
Image[] m_img=new Image[14];
Cal24 m_cal24;
/**Load picture**/
public PicPanel(Cal24 cal24)
{
m_cal24=cal24;
}
public void initImg()
{
System.out.println("hahahhah");
URL url=null;
try
{
url=Class.forName("Cal24").getResource("pic/back.JPG");
}
catch(Exception e){e.printStackTrace();}
m_img[0]=getToolkit().getImage(url);
for(int i=1;i<=13;i++)
{
try
{
url=Class.forName("Cal24").getResource("pic/"+i+".JPG");
System.out.println(url.toString());
}
catch(Exception e){}
m_img[i]=getToolkit().getImage(url);
}
MediaTracker mt=new MediaTracker(this);
for(int i=0;i<=13;i++)
{
mt.addImage(m_img[i],i);
}
try{
mt.wait();
mt.checkAll();
}
catch(Exception e){}
}
public void paint(Graphics g)
{
for(int i=0;i<4;i++)
{
g.drawImage(m_img[m_cal24.m_nStatus[i]],i*IMG_SIZE+5,5,this);
}
}
}
class MsgDlg extends Frame implements ActionListener
{
Label label=new Label();
public MsgDlg(String strMsg)
{
super();
setTitle("表达式的结果");
Panel p=new Panel();
add(p);
p.add(label);
label.setText(strMsg);
setSize(200,100);
setLocation(300,200);
Button btOk=new Button("确定");
btOk.addActionListener(this);
p.add(btOk);
show();
}
public void actionPerformed(ActionEvent evt)
{
this.dispose();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -