Java小程序賽馬游戲?qū)崿F(xiàn)過(guò)程詳解
這是當(dāng)時(shí)做的一個(gè)小游戲,大概就是程序開(kāi)始后,會(huì)進(jìn)入用戶(hù)登錄界面,用戶(hù)輸入自己的姓名和密碼后,選擇登錄會(huì)進(jìn)入到賽馬比賽的界面,這時(shí)可以看見(jiàn)賽馬場(chǎng)和馬匹的編號(hào),用戶(hù)可以選擇任何一個(gè)編號(hào)的馬進(jìn)行投注,輸入有效的投注金額(因?yàn)橄到y(tǒng)設(shè)置了初始金額,所以不得投注的超過(guò)初始金額)。投注完成后用戶(hù)可以選擇開(kāi)始比賽,賽馬期間用戶(hù)不得進(jìn)行任何操作,賽馬結(jié)束后,用戶(hù)可以重新進(jìn)行新一輪的賽馬比賽,方法上同。
程序流程圖:
一、賽馬比賽模塊
其中此模塊包括對(duì)畫(huà)出馬匹和賽道部分,通過(guò)使用Draw類(lèi)來(lái)向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); } }
二、投注區(qū)模塊
a.投注馬匹模塊
主要是實(shí)現(xiàn)馬匹的選擇及投注的模擬,增加JRadioButton單選按鈕選擇馬匹。
b. 投注金額模塊
TextField來(lái)輸入投注金額,tfget接收后與總金額進(jìn)行比較。
c. 賭金變化模塊
同時(shí)變量tz控制金額改變。
代碼:
public class Run extends JFrame implements ActionListener { …… JPanel p3; //投注區(qū) JButton jb; //開(kāi)始按鈕 JFrame frame; DateUtil d1=new DateUtil(); Boolean cotrol; //對(duì)投注額改變的變量 int no; //名次編號(hào) String s; //投注單選事件的變量符號(hào) JRadioButton b1,b2,b3,b4; //投注的單選按鈕 ButtonGroup bg; //按鈕注,使其為單選 JTextArea ta; //賽馬的文字顯示 JLabel money; //投注總金額標(biāo)簽 TextField tf; //投注金額的輸入窗口 int tz; //投注金額變化的變量 String tfget; //投注總金額的中轉(zhuǎn)變量 FlowLayout ly; //布局變量 } public void actionPerformed(ActionEvent e) { if(bg.getSelection()!=null) { //投注單選按鈕選擇確認(rèn) if(e.getActionCommand()=="開(kāi)始") { tfget=tf.getText(); try{ if(Integer.parseint(tfget)>0&&Integer.parseint(tfget)<=tz)//string轉(zhuǎn)換成int { //投注金額確認(rèn) ta.setText("比賽開(kāi)始了"+'n'); new racing(h1,this).start(); new racing(h2,this).start(); new racing(h3,this).start(); new racing(h4,this).start(); jb.setText("重新開(kāi)始");//賽馬按鍵標(biāo)簽改變 b1.setEnabled(false);//賽馬開(kāi)始后,禁止操作 b2.setEnabled(false); b3.setEnabled(false); b4.setEnabled(false); tf.setEditable(false); jb.setEnabled(false); } else { JOptionPane.showMessageDialog(null, "投注金額錯(cuò)誤,請(qǐng)重新投注");//信息對(duì)話(huà)框 } } catch(Exception ex) { JOptionPane.showMessageDialog(null, "投注格式錯(cuò)誤,請(qǐng)重新投注"); } } } else { JOptionPane.showMessageDialog(null, "請(qǐng)選號(hào)確認(rèn)投注"); }
三、線程啟動(dòng)及結(jié)束模塊
a. 線程啟動(dòng)及結(jié)束部分模塊
模塊代碼:
public void actionPerformed(ActionEvent e) { …… ta.setText("比賽開(kāi)始了"+'n'); new racing(h1,this).start(); new racing(h2,this).start(); new racing(h3,this).start(); new racing(h4,this).start(); jb.setText("重新開(kāi)始");//賽馬按鍵標(biāo)簽改變 b1.setEnabled(false);//賽馬開(kāi)始后,禁止操作 b2.setEnabled(false); b3.setEnabled(false); b4.setEnabled(false); tf.setEditable(false); jb.setEnabled(false); } …… if(e.getActionCommand()=="重新開(kāi)始") {//重新開(kāi)始,相應(yīng)的控制重置 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("開(kāi)始"); } } class racing extends Thread {//馬運(yùn)動(dòng)的線程控制 Draw a; Run r ; DateUtil d=new DateUtil(); racing(Draw h,Run b) { this.a=h; this.r=b; }
b. 獲取比賽初始系統(tǒng)時(shí)間模塊
線程run啟動(dòng)時(shí),通過(guò)使用Calendar類(lèi)來(lái)獲取比賽開(kāi)始時(shí)的系統(tǒng)時(shí)間,其中使用getNow_HMS()方法來(lái)獲取比賽的初始時(shí)間。
模塊代碼:
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. 獲取比賽結(jié)束系統(tǒng)時(shí)間模塊
當(dāng)比賽結(jié)束,線程終止時(shí),通過(guò)使用Calendar類(lèi)來(lái)獲取比賽結(jié)束時(shí)的系統(tǒng)時(shí)間,其中使用getNow_HMS()方法來(lái)獲取比賽的結(jié)束時(shí)間。
模塊代碼:
public void run() { int t; int o,y; o=r.Time(); …… y=d.getNow_HMS(); int z=y-o; ta.append("用時(shí):"+z+"秒"+'n'); }
四、比賽結(jié)果顯示區(qū)模塊
在JTextArea()分布的空間內(nèi),通過(guò)方法append()顯示馬匹的名次,用時(shí)等信息。
五、賽馬游戲運(yùn)行結(jié)果
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java web項(xiàng)目啟動(dòng)Tomcat報(bào)錯(cuò)解決方案
這篇文章主要介紹了Java web項(xiàng)目啟動(dòng)Tomcat報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07java常見(jiàn)報(bào)錯(cuò):Array?Out?of?Bounds兩種解決辦法
這篇文章主要給大家介紹了關(guān)于java報(bào)錯(cuò)Array?Out?of?Bounds的兩種解決辦法,Array out of bounds錯(cuò)誤表示你嘗試訪問(wèn)數(shù)組中不存在的索引,即索引小于零或者大于等于數(shù)組的大小,文中通過(guò)代碼將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08spring boot jpa寫(xiě)原生sql報(bào)Cannot resolve table錯(cuò)誤解決方法
在本篇文章里小編給大家整理的是關(guān)于spring boot jpa寫(xiě)原生sql報(bào)Cannot resolve table錯(cuò)誤的解決方法,需要的朋友學(xué)習(xí)下。2019-11-11JAVA 16位ID生成工具類(lèi)含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫(xiě)
這篇文章主要介紹了JAVA 16位ID生成工具類(lèi)含16位不重復(fù)的隨機(jī)數(shù)數(shù)字+大小寫(xiě),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Java LinkedHashSet集合的底層原理和TreeSet集合
LinkedHashSet保證元素有序且唯一,底層通過(guò)雙鏈表實(shí)現(xiàn),TreeSet元素不重復(fù)且可排序,底層使用紅黑樹(shù)實(shí)現(xiàn)排序,自定義類(lèi)型排序可通過(guò)實(shí)現(xiàn)Comparable接口或提供Comparator來(lái)定義排序規(guī)則,適用于需要大量元素快速檢索的場(chǎng)景2024-10-10SpringBoot整合Groovy腳本實(shí)現(xiàn)動(dòng)態(tài)編程詳解
這篇文章主要為大家介紹了SpringBoot整合Groovy腳本實(shí)現(xiàn)動(dòng)態(tài)編程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Intellij Idea 多模塊Maven工程中模塊之間無(wú)法相互引用問(wèn)題
這篇文章主要介紹了Intellij Idea 多模塊Maven工程中模塊之間無(wú)法相互引用問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01