赛马程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Run extends JFrame implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
racing ht;//赛马的进程
Draw h1,h2,h3,h4;//画出马的运动图形
JPanel p1;//赛马区
JPanel p2;
JPanel p3;//投注区
JButton jb;//开始按钮
JFrame frame;
boolean cotrol;//输出胜者和对投注金额改变的控制变量
int no;//名次编号
String s;//投注单选按钮事件的变量符号
JRadioButton b1,b2,b3,b4;//投注的单选按钮
ButtonGroup bg;//按钮注,使其为单选
JTextArea ta;//赛马的文字显示
JLabel money;//投注总金额标签
TextField tf;//投注金额的输入窗口
int tz;//投注金额变化的变量
String tfget;//投注总金额的中转变量
FlowLayout ly;//布局变量
public Run()
{
frame=new JFrame("赛马");
p1=new JPanel();
p2=new JPanel();
p3=new JPanel();
ly=new FlowLayout();
jb=new JButton("开始");
h1=new Draw();
h2=new Draw();
h3=new Draw();
h4=new Draw();
no=0;
tz=20000;
cotrol=true;
h1.s="1号马";
h2.s="2号马";
h3.s="3号马";
h4.s="4号马";
b1=new JRadioButton("1号马");
b2=new JRadioButton("2号马");
b3=new JRadioButton("3号马");
b4=new JRadioButton("4号马");
bg=new ButtonGroup();
money=new JLabel("总金额为"+String.valueOf(tz));
tf=new TextField(10);
ta=new JTextArea("",5,10);
//放置单选按钮,去除按钮方框
b1.setOpaque(false);b2.setOpaque(false);
b3.setOpaque(false);b4.setOpaque(false);
bg.add(b1); bg.add(b2); bg.add(b3); bg.add(b4);
//设置投注区,去除方框
p3.setBorder(BorderFactory.createTitledBorder("投注区"));
p3.add(b1);p3.add(b2);p3.add(b3);p3.add(b4);
p3.add(money); p3.add(tf);
p3.setOpaque(false);
//设置P2
p2.setBackground(Color.pink);
ly.setHgap(30);
p2.setLayout(ly);
p2.add(p3);
p2.add(jb);
p2.add(ta);
//设置赛马区
p1.setBackground(Color.white);
p1.setBorder(BorderFactory.createTitledBorder("赛马区"));
p1.setLayout(new GridLayout(4,1));
p1.add(h1);
p1.add(h2);
p1.add(h3);
p1.add(h4);
//UI界面设定
frame.setLayout(new BorderLayout());
frame.add("Center",p1);
frame.add("South",p2);
frame.setBounds(100,100,800,620);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加动作事件
tf.addActionListener(this);
jb.addActionListener(this);
b1.addActionListener(new RadioListener());
b2.addActionListener(new RadioListener());
b3.addActionListener(new RadioListener());
b4.addActionListener(new RadioListener());
frame.setVisible(true);
}
public static void main(String args[])
{
new Run();
}
public void actionPerformed(ActionEvent e)
{
if(bg.getSelection()!=null)
{//投注单选按钮选择确认
if(e.getActionCommand()=="开
始")
{
tfget=tf.getText();
try{
if(Integer.parseInt(tfget)>0&&Integer.parseInt(tfget)<=tz)
{//投注金额确认
ta.setText("比赛开始了"+'\n');
new racing(h1,this).start();
new racing(h2,this).start();
new racing(h3,this).start();
new racing(h4,this).start();
jb.setText("重新开始");//赛马按键标签改变
b1.setEnabled(false);//赛马开始后,禁止操作
b2.setEnabled(false);//赛马开始后,禁止操作
b3.setEnabled(false);//赛马开始后,禁止操作
b4.setEnabled(false);//赛马开始后,禁止操作
tf.setEditable(false);//赛马开始后,禁止操作
jb.setEnabled(false);//赛马开始后,禁止操作
}
else
{
JOptionPane.showMessageDialog(null, "投注金额错误,请重新投注");//信息对话框
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "投注格式错误,请重新投注");
}
}
}
else
{
JOptionPane.showMessageDialog(null, "请选号确认投注");
}
if(e.getActionCommand()=="重新开始")
{//重新开始,相应的控制重置
restar(h1,this);
restar(h2,this);
restar(h3,this);
restar(h4,this);
cotrol=true;
no=0;
ta.setText("");
tf.setEditable(true);
b1.setEnabled(true);
b2.setEnabled(true);
b3.setEnabled(true);
b4.setEnabled(true);
jb.setText("开始");
}
}
public void restar(Draw h,Run b)
{//重新开始,马匹归位,记得重画马匹(h.repaint())
h.x=0;
h.repaint();
}
class racing extends Thread
{//马运动的线程控制
Draw a;
Run r;
racing(Draw h,Run b)
{//构造函数,通过Draw h和Run b使其与前面设定的界面统一
this.a=h;
this.r=b;
}
public void run()
{
int t;
while(a.x<600)
{
t=(int)(Math.random()*1000);
a.x=a.x+10;
a.repaint();//赛马的重画,使马运动
try {
Thread.sleep(t);
}
catch (Exception ee) { }
}
no=no+1;
ta.append(a.s+"是第"+String.valueOf(no)+"名"+'\n');
if(no==4)
{
jb.setEnabled(true);//当四匹马都跑完了,才对jb解除禁止
}
if(cotrol)
{//第一名,相应的输出和变化
cotrol=false;
JOptionPane.showMessageDialog(null, a.s+"赢" );
if(s==a.s)
{
tz=tz+Integer.parseInt(tfget);
}
else
{
tz=tz-Integer.parseInt(tfget);
}
r.money.setText("总金额为"+String.valueOf(tz));//改变总金额数值
}
}
}
class RadioListener implements ActionListener
{//投注单选按钮的动作事件响应
public void actionPerformed(ActionEvent radioe)
{
s=radioe.getActionCommand();
}
}
}
public class Draw extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
int x=0;
String s;
int w,h;
public void paint(Graphics g)
{
super.paint(g);
this.setBackground(Color.WHITE);
w=this.getWidth();
h=this.getHeight();
g.setColor(Color.PINK);
g.fillRect(70,h/2-44,596,4);
g.fillRect(70,h/2+40,59
6,4);
g.setColor(Color.blue);
g.fillRect(66,0,4,h);
g.setColor(Color.red);
g.fillRect(666,0,4,h);
g.setColor(Color.GREEN);
g.fillRect(36+x,h/2-10,30,20);
g.setColor(Color.BLACK);
g.drawString(s,26,h/2-12);
}
}