Java程序之賽馬游戲


這是當時做的一個小游戲,大概就是程序開始后,會進入用戶登錄界面,用戶輸入自己的姓名和密碼后,選擇登錄會進入到賽馬比賽的界面,這時可以看見賽馬場和馬匹的編號,用戶可以選擇任何一個編號的馬進行投注,輸入有效的投注金額(因為系統設置了初始金額,所以不得投注的超過初始金額)。投注完成后用戶可以選擇開始比賽,賽馬期間用戶不得進行任何操作,賽馬結束后,用戶可以重新進行新一輪的賽馬比賽,方法上同。

程序流程圖:

一、賽馬比賽模塊
其中此模塊包括對畫出馬匹和賽道部分,通過使用Draw類來向Jpanel面板中添加馬和賽道。
部分代碼:
class Draw extends JPanel
{
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.BLACK);
g.drawLine(66,h/2-44,666,h/2-44);
g.drawLine(66,h/2+40,666,h/2+40);
g.setColor(Color.BLACK);
g.drawLine(66,0,66,h);
g.setColor(Color.red);
g.drawLine(666,0,666,h);
g.drawRect(36+x,h/2-10,30,20);//馬的顯示
g.setColor(Color.BLACK);//文字顯示
g.drawString(s,26,h/2-12);
}
}

二、投注區模塊
a.投注馬匹模塊
主要是實現馬匹的選擇及投注的模擬,增加JRadioButton單選按鈕選擇馬匹。
b. 投注金額模塊
TextField來輸入投注金額,tfget接收后與總金額進行比較。
c. 賭金變化模塊
同時變量tz控制金額改變。

代碼:
public class Run extends JFrame implements ActionListener
{
……
JPanel p3;//投注區
JButton jb;//開始按鈕
JFrame frame;
DateUtil d1=new DateUtil();
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 void actionPerformed(ActionEvent e)
{
if(bg.getSelection()!=null)
{//投注單選按鈕選擇確認
if(e.getActionCommand()"開始")
{
tfget=tf.getText();
try{
if(Integer.parseInt(tfget)>0&&Integer.parseInt(tfget)<=tz)//string轉換成int
{//投注金額確認
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, "請選號確認投注");
}
三、線程啟動及結束模塊
a. 線程啟動及結束部分模塊
模塊代碼:
public void actionPerformed(ActionEvent e)
{
……
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);
}
……
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("開始");
}
}
class racing extends Thread
{//馬運動的線程控制
Draw a;
Run r ;
DateUtil d=new DateUtil();
racing(Draw h,Run b)
{
this.a=h;
this.r=b;
}
b. 獲取比賽初始系統時間模塊
線程run啟動時,通過使用Calendar類來獲取比賽開始時的系統時間,其中使用getNow_HMS()方法來獲取比賽的初始時間。
模塊代碼:
import java.util.;
public class DateUtil{
public static String getNow_M(){
Calendar c=Calendar.getInstance();
String minute=String.valueOf(c.get(Calendar.MINUTE));
if(minute.length()1){
minute="0"+minute;
}
String ms1=minute;
return ms1;
}
public static String getNow_S(){
Calendar c=Calendar.getInstance();
String second=String.valueOf(c.get(Calendar.SECOND));
if(second.length()
1){
second="0"+second;
}
String ms2=second;
return ms2;
}
public int getNow_HMS(){
String s1,s2;
s1=getNow_M();
s2=getNow_S();
int a=Integer.parseInt(s1)
60+Integer.parseInt(s2);
return a;
}
public static void main(String[] args) {
DateUtil d;
d=new DateUtil();
d.getNow_HMS();
}
}
public int Time(){
int oo=d1.getNow_HMS();
return oo;
}
c. 獲取比賽結束系統時間模塊
當比賽結束,線程終止時,通過使用Calendar類來獲取比賽結束時的系統時間,其中使用getNow_HMS()方法來獲取比賽的結束時間。
模塊代碼:
public void run()
{ int t;
int o,y;
o=r.Time();
……
y=d.getNow_HMS();
int z=y-o;
ta.append("用時:"+z+"秒"+'\n');
}

四、比賽結果顯示區模塊
在JTextArea()分布的空間內,通過方法append()顯示馬匹的名次,用時等信息。

五、賽馬游戲運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM