




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/成績:課程設計報告書所屬課程名稱Java綜合實踐題目取火柴小游戲院〔系信息工程學院班級軟件工程〔2班學號學生姓名指導教師2016年12月26日課程設計〔論文任務書學院信息工程學院專業15軟件工程班級1一、課程設計〔論文題目取火柴小游戲二、課程設計〔論文工作:自2016年12月20日起至2016年12月31日止。三、課程設計〔論文的內容要求:1.本課程設計的目的〔1掌握Java語言的程序設計方法;〔2理論聯系實際.進一步提高學生的軟件開發技術;〔3培養學生分析、解決問題的能力;〔4提高學生實踐論文撰寫能力。2.課程設計的任務及要求1基本要求:〔1熟悉JAVA開發環境.掌握JAVA程序的編譯和運行;〔2掌握JAVA基本編程技術和方法;〔3掌握GUI圖形界面編程技術;〔4了解異常處理機制。2課程設計論文編寫要求〔1理論設計部分以課程設計論文的形式提交.格式必須按照課程設計論文標準格式進行書寫和裝訂。〔2課程設計報告〔論文包括目錄、設計目的、實現思路、實現步驟、設計心得參考文獻、附錄等;3課程設計評分標準:〔1學習態度:10分;〔2系統設計:20分;〔3編程調試:20分;〔4回答問題:20分;〔5論文撰寫:30分。4參考文獻:〔1丁振凡主編.Java語言實用教程[M].北京郵電大學出版社.2004.12〔2丁振凡主編.Java語言實用教程實驗指導[M].北京郵電大學出版社.2004.125課程設計進度安排1.準備階段〔4學時:選擇設計題目、了解設計目的要求、查閱相關資料2.程序模塊設計分析階段〔8學時:程序總體設計、詳細設計3.代碼編寫調試階段〔8學時:程序模塊代碼編寫、調試、測試4.撰寫論文階段〔4學時:總結課程設計任務和設計內容.撰寫課程設計論文6課程設計題目具體要求:編寫一個程序使計算機隨機產生20—50根火柴.由人與計算機輪流拿.每次拿的數量不超過3根.拿到最后一根為勝。使用圖形界面編寫.要求界面布局合理.并且能夠順利關閉界面.退出程序。學生簽名:2016年12月25日目錄系統設計目的1系統實現思路2系統詳細設計3系統調試運行10課程設計心得13參考文獻13附錄14第1章系統設計目的1設計一個簡單的取火柴小游戲,可以實現以下功能:1:使計算機隨機產生數;2:設計出人性化的游戲界面;3:給予不同的提示完成游戲;4:能夠順利關閉游戲.退出游戲。2通過這次設計.可以幫助學生:1:提高對Java語言設計的掌握能力;2:理論聯系實際.進一步提高學生的軟件開發技術;3:培養學生分析、解決問題的能力。第2章系統實現思路該游戲程序設計的主要內容是使用java中的各種組件與容器互相搭配來完成的一個小游戲。游戲設計中的主要的知識要點包括java的awt包中的顏色類.圖形類.圖像類.事件監聽器類.和util包中的stack類.timer類.和timertask類的使用方法.以及swing包中的窗口類.按鈕類.標簽類.面板類.復選框類等一些常用組件的用法。通過這些組件來掌握事件監聽器的用法.java中棧的用法.以及實現了Runnable類的TimerTask類的用法.通過這個類實現線程技術.還有Graphics類中的主要方法的使用.學會運用這些方法來來繪制火柴.繪制圖片的目的。1:界面設計設置重置按鈕的位置.左上角坐標為〔250.10.大小為寬100.高20;設置用戶標簽的位置.左上角坐標為〔400,10.大小為寬200.高20;2:功能設計為"Reset"添加行為事件監聽器.采用匿名類的方式。為用戶按鈕定義行為事件監聽器。3:代碼設計編寫每個控件的相關代碼.并進行調試。第3章系統詳細設計1:界面設計創建一個游戲界面.設置用戶拿按鈕的位置.下拉列表框中的位置.游戲中火柴的顏色.位置和大小。主要代碼:importjava.awt.Color;//引入顏色類importjava.awt.Component;//引入組件類importjava.awt.Dimension;//引入封裝單個對象中組件的寬度和高度〔精確到整數的類importjava.awt.Graphics;//引入圖形類importjava.awt.Graphics2D;//引入二維圖形類importjava.awt.event.ActionEvent;//引入事件類importjava.awt.event.ActionListener;//引入事件監聽器類importjava.awt.image.BufferedImage;//引入緩沖圖像類importjava.util.Stack;//引入棧類importjava.util.Timer;//引入計時器類importjava.util.TimerTask;//引入了實現Runnable接口的類.并具有了線程的功能importjavax.swing.JButton;//引入按鈕類importjavax.swing.JComboBox;//引入下拉列表框類importjavax.swing.JFrame;//引入主框架主窗口類importjavax.swing.JLabel;//引入標簽類importjavax.swing.JOptionPane;//引入選項面板類importjavax.swing.JPanel;//引入面板類publicclassha//定義一個公共的主類Test{publicstaticvoidmain<String[]args>//定義主方法main{newha<>;//調用Test類的構造方法Test<>}privatestaticfinalintMIN_CNT=20;//定義一個常量.設置為最小火柴棍數量為20privatestaticfinalintMAX_CNT=50;//定義一個常量.設置為最大火柴棍數量為50privatestaticfinalintMAX_TAKE=3;//定義一個常量.設置為最大拿火柴數量為3privatestaticfinalintDELAY=1000;//定義一個常量.設置為延遲時間為1000privateJFramemainFrame;//定義主框架變量privateMyPaintPanel[]paints;//定義我自己畫的面板數組變量privateJButtonuserBtn;//定義我的按鈕屬性privateJComboBoxuserNum;//定義我的下拉列表privateJButtoncompBtn;//定義電腦按鈕屬性privateJLabelcompTxt;//定義電腦標簽privateTimertimer;//定義計時器的變量privateha<>//定義一個私有的構造方法.來完成游戲的初始化動作{mainFrame=newJFrame<>;//實例化一個主窗口mainFrame.setResizable<false>;//設置窗體大小不可調整mainFrame.setDefaultCloseOperation<JFrame.EXIT_ON_CLOSE>;//設置默認的關閉操作為關閉窗口JPanelmainPanel=newJPanel<>;//實例化一個主面板對象mainPanel.setLayout<null>;//設置布局為空.即沒有任何布局mainPanel.setPreferredSize<newDimension<600,400>>;//將組件的首選大小設置為常量值mainFrame.add<mainPanel>;//將主面板添加到框架〔窗口中JLabellab11=newJLabel<"電腦">;//創建并設置標簽按鈕的內容為電腦lab11.setHorizontalAlignment<JLabel.CENTER>;//設置標簽內容沿X軸的對齊方式lab11.setBounds<0,10,200,20>;//設置該標簽顯示位置為坐標〔0,10.寬200.高20mainPanel.add<lab11>;//將標簽加入主面板JButtonbtn11=newJButton<"Reset">;//定義一個重新來的按鈕btn11.addActionListener<newActionListener<>//為"Reset"添加行為事件監聽器.采用匿名類的方式{publicvoidactionPerformed<ActionEvente>//實現監聽器中的方法{init<>;//當單擊此按鈕時.調用該初始化方法}}>;btn11.setBounds<250,10,100,20>;//設置重置按鈕的位置.左上角坐標為〔250.10.大小為寬100.高20mainPanel.add<btn11>;//重來標簽添加到主面板上JLabellab12=newJLabel<"用戶">;//定義用戶標簽lab12.setHorizontalAlignment<JLabel.CENTER>;//設置用戶水平方式為居中lab12.setBounds<400,10,200,20>;//設置用戶標簽的位置.左上角坐標為〔400,10.大小為寬200.高20mainPanel.add<lab12>;//將用戶標簽添加到主面板上compBtn=newJButton<"ComputerFirst">;//定義一個電腦首先拿的按鈕compBtn.addActionListener<newActionListener<>//為電腦開始按鈕定義行為事件監聽器{@OverridepublicvoidactionPerformed<ActionEvente>//行為監聽器中的默認方法{compTake<>;//當單擊電腦按鈕時.調用電腦拿方法}}>;compBtn.setBounds<10,40,180,20>;//設置電腦按鈕的位置.左上角坐標為〔10.40.大小為寬180.高20mainPanel.add<compBtn>;//按鈕添加到主面板上compTxt=newJLabel<>;//定義一個空標簽compTxt.setBounds<10,70,400,20>;//設置空標簽的位置.左上角坐標為〔10.70.大小為寬400.高20mainPanel.add<compTxt>;//將空標簽加到主面板上userBtn=newJButton<"Take">;//定義用戶拿按鈕userBtn.addActionListener<newActionListener<>//為用戶按鈕定義行為事件監聽器publicvoidactionPerformed<ActionEvente>{userTake<>;//當單擊用戶拿按鈕時.調用用戶拿方法}}>;userBtn.setBounds<400,40,90,20>;//設置用戶拿按鈕的位置.左上角的坐標為〔400,40.大小為寬90.高20mainPanel.add<userBtn>;//用戶按鈕添加到主面板上userNum=newJComboBox<>;//定義一個下拉列表框for<inti=0;i<MAX_TAKE;i++>//定義一個拿最大的循環{userNum.addItem<i+1>;//通過循環給列表框逐個添加選項}userNum.setBounds<495,40,90,20>;//設置下拉列表框中的位置.左上角的坐標為〔495,40.大小為寬90.高20mainPanel.add<userNum>;//將列表框添加到主面板上paints=newMyPaintPanel[3];//定義我畫的面板for<inti=0;i<3;i++>//用3次循環來畫出三個面板{paints[i]=newMyPaintPanel<>;//分別創建3個面板.并調用構造方法初始化三個面板paints[i].setBounds<5+200*i,110,190,285>;//設置三個面板的位置和坐標.間距為5mainPanel.add<paints[i]>;//將三個面板分別添加到主面板上}mainFrame.pack<>;//調整此窗口的大小.以適合其子組件的首選大小和布局。mainFrame.setVisible<true>;//設置當前主窗口的可見性init<>;//調用初始化方法}2:功能設計定義初始化方法.調用重置方法.定義三塊初始面板.定義用戶拿火柴棒的方法和電腦拿火柴棒的方法.定義一個自定義的面板類并繼承了組件類。主要代碼:privatevoidinit<>//定義初始化的方法{if<timer!=null>//如果計時器不為空的話就執行下面的語句{timer.cancel<>;//快速終止計時器的任務執行線程}timer=newTimer<>;//實例化一個計時器的對象compTxt.setText<"">;//設置空標簽的文本為空compBtn.setEnabled<true>;//設置是否啟用電腦按鈕組件.即電腦組件可用userBtn.setEnabled<true>;//設置是否啟用用戶按鈕組件.即用戶組件可用paints[0].reset<>;//調用重置方法.來重新定義第一塊面板paints[1].reset<>;//調用重置方法.來重新定義第二塊面板paints[2].reset<>;//調用重置方法.來重新定義第三塊面板intnum=MIN_CNT+<int><<MAX_CNT+1-MIN_CNT>*Math.random<>>;//隨機產生一個大于20小于50的數for<inti=0;i<num;i++>//分別用for循環添加面板{paints[1].add<i+1>;//分別將產生的隨機數添加到第二塊面板}}privatevoiduserTake<>//定義一個用戶拿火柴棒的方法{compBtn.setEnabled<false>;//設置按鈕不可用inttakeCnt=userNum.getSelectedIndex<>+1;//定義用戶拿得火柴棍的數量intrel=paints[1].getCnt<>;//將自定義的第二個面板中的火柴棍的數量賦給relif<takeCnt>rel>//如果用戶拿火柴棍的數量比面板中的數量大的話.執行下面的語句{JOptionPane.showMessageDialog<mainFrame,"Thereisonly"+rel+"matches.">;//用標準對話框類調用顯示"Thereisonlymachines"的對話框return;}for<inti=0;i<takeCnt;i++>//定義一個將第二塊面板中的火柴棍的數量移動到用戶面板的循環{intindex=paints[1].remove<>;//將第二個面板要移除的火柴棍的數量給index變量paints[2].add<index>;//將index的值添加到用戶拿的面板上}if<takeCnt==rel>//如果用戶拿的火柴棍的數量和第二個相等執行下面的語句{JOptionPane.showMessageDialog<mainFrame,"Youarethewinner.">;//顯示"你勝利的對話框"init<>;//并重新初始化}else//如果不相等的話.執行下面的語句.{compTake<>;//讓電腦接著拿火柴棍}}privatevoidcompTake<>//定義電腦拿的方法{compBtn.setEnabled<false>;//設置電腦按鈕的當前狀態為不可用userBtn.setEnabled<false>;//設置用戶按鈕的當前狀態為不可用MyTasktask=newMyTask<>;//實例化一個MyTask的對象timer.schedule<task,DELAY>;//執行線程.安排在指定延遲1秒后執行指定的任務}privateclassMyTaskextendsTimerTask//定義一個繼承了實現Runnable接口的類使自己也具有線程功能{@Overridepublicvoidrun<>//因為TimerTask實現了Runnable接口.重寫父類的run方法{intrel=paints[1].getCnt<>;//將火柴棍面板中的火柴的數量賦給relinttakeCnt=0;//設置當前拿火柴棍的數量為0if<rel<=MAX_TAKE>//如果當前火柴棍的數量比最大拿火柴的數量小的話.執行下面的語句{takeCnt=rel;//將火柴棍的數量賦給電腦要拿的數量}elseif<rel%<MAX_TAKE+1>>0>//如果面板中的火柴棍的數量對4取余大于0的話執行下面的語句{takeCnt=rel%<MAX_TAKE+1>;//將面板中的火柴的數量對4取余之后賦給電腦要拿的火柴的數量}else//否則面板中的火柴棍的數量對4取余小于或等于0的話執行下面的語句{takeCnt=1+<int><MAX_TAKE*Math.random<>>;//隨機產生一個小于4的數.給電腦要拿的數量}for<inti=0;i<takeCnt;i++>{intindex=paints[1].remove<>;//將火柴面板中的火柴移除并賦給indexpaints[0].add<index>;//將移除的火柴添加到電腦拿的面板上}compTxt.setText<"Computertakes"+takeCnt+"matchesthistime.">;//設置電腦顯示拿火柴的數量if<takeCnt==rel>//如果和電腦那的數量和面板中的數量相等執行下面的語句{JOptionPane.showMessageDialog<mainFrame,//顯示信息對話框提示電腦勝利了!"Computeristhewinner.">;init<>;//并重新初始化}userBtn.setEnabled<true>;//設置用戶按鈕重新可用}}@SuppressWarnings<"serial">privateclassMyPaintPanelextendsComponent//定義一個自定義的面板類并繼承了組件類{privateBufferedImagebimg;//創建一個BufferedImage的變量bimgprivateStack<Integer>data;//定義一個私有的棧類型的變量dataprivateMyPaintPanel<>//構造我的初始面板的方法{bimg=newBufferedImage<190,285,BufferedImage.TYPE_3BYTE_BGR>;//表示一個具有8位RGB顏色分量的圖像.Graphics2Dg2=bimg.createGraphics<>;//創建一個Graphics2D.并將它繪制到此BufferedImage中g2.setColor<Color.WHITE>;//設置要畫的顏色.即面板的顏色g2.fillRect<0,0,190,285>;//在坐標〔0,0處畫一個大小為寬190.高為285的白色矩形區域g2.dispose<>;//釋放此圖形的上下文以及它使用的所有系統資源。調用dispose之后.就不能再使用Graphics對象。data=newStack<Integer><>;//在此面板中實例化一個具體的棧的對象}publicvoidpaint<Graphicsg>//定義畫圖形的默認方法{g.drawImage<bimg,0,0,null>;//從坐標〔0,0出開始畫圖片g.dispose<>;//釋放此圖形的上下文以及它使用的所有系統資源。調用dispose之后.就不能再使用Graphics對象。}3:代碼設計privatevoidadd<intnum>//添加火柴棍的方法{Graphics2Dg2=bimg.createGraphics<>;//創建一個Graphics2D.并將它繪制到此BufferedImage中intloc=data.size<>;//將當前棧的大小賦給變量loc//System.out.println<"當前棧為"+data.size<>>;intoffX=loc%3*65;//動態的坐標intoffY=loc/3*15;//動態的坐標g2.setColor<Color.YELLOW>;//設置火柴棒的顏色為黃色g2.fillRect<offX+8,offY+5,50,6>;//填充火柴棒的顏色區域g2.setColor<Color.GREEN>;//設置火柴棒頭的顏色為綠色g2.fillArc<offX+50,offY+3,10,10,0,360>;//設置火柴棒頭的坐標.大小為寬和高為10的360度的弧g2.setColor<Color.BLACK>;//設置當前火柴棒的根數的顏色g2.drawString<String.valueOf<num>,offX,offY+g2.getFont<>.getSize<>>;//畫出數字data.push<num>;//把數字1壓入堆棧頂部repaint<>;//重畫g2.dispose<>;//釋放此圖形的上下文以及它使用的所有系統資源。調用dispose之后.就不能再使用Graphics對象}privateintremove<>//定義一個移除火柴棍的方法{Graphics2Dg2=bimg.createGraphics<>;//創建一個Graphics2D.并將它繪制到此BufferedImage中intloc=data.size<>-1;//將當前棧的大小即火柴棍的數量減1//System.out.println<"當前棧為"+data.size<>>;intoffX=loc%3*65;//動態的獲取坐標intoffY=loc/3*15;//動態的獲取坐標g2.setColor<Color.WHITE>;//設置移除填充顏色為白色g2.fillRect<offX,offY,60,15>;//畫出移除火柴棍的位置g2.dispose<>;//釋放此圖形的上下文以及它使用的所有系統資源。調用dispose之后.就不能再使用Graphics對象repaint<>;//調用重新畫的方法returndata.pop<>;//移除堆棧頂部的對象.并作為此函數的值返回該對象。}privatevoidreset<>//定義一個重置的方法{data.clear<>;//清楚該面板棧中的內容Graphics2Dg2=bimg.createGraphics<>;//創建一個Graphics2D.并將它繪制到此BufferedImage中g2.setColor<Color.WHITE>;//設置顏色為白色g2.fillRect<0,0,190,285>;//在坐標為〔0,0處填充大小為190,285的矩形區域g2.dispose<>;//釋放此圖形的上下文以及它使用的所有系統資源。調用dispose之后.就不能再使用Graphics對象。repaint<>;//重繪此組件。}privateintgetCnt<>//定義一個返回第二個面板火柴棍的數量{returndata.size<>;//返回當前棧中的火柴棍數量}}}第4章系統調試運行1:運行界面2:游戲步驟截圖〔1如果是電腦先拿先單擊ComputerFirst按鈕.電腦隨機拿走幾根火柴.并在電腦按鈕下方顯示"Computertakes*matchesthistime"提示信息.單擊之后電腦拿走的按鈕被禁用.直到用戶單擊自己的按鈕之后才能再拿。〔2用戶單擊自己的Take按鈕.根據自己的情況拿相應的火柴數.比如說用戶拿三根火柴。〔3用戶根據自己的需要拿了三根火柴.之后電腦又拿了一根.如此循環.直到哪一方贏得比賽的勝利。從下圖中可以看到電腦贏得了比賽的勝利。第5章課程設計心得經過一個星期的我的火柴小游戲的課程設計.我在湯柱亮老師的指導下.順利完成該課程設計。通過該課程設計.收獲頗多。在本次的課程設計中.我遇到了很多問題.也學會了很多東西。比如Graphics的繪圖方法的問題.如何繪制曲線.如何繪制直線.如何繪制矩形.如何繪制圓形等一些基本圖形的繪制.經過自己與同學的討論.學會了圖形類的使用方法。還有瀏覽器中不能顯示Applet程序使由于缺少某種插件等等。但是隨著這些問題的解決.我也從中學習到了新知識.感覺付出是值得的。第6章參考文獻[1]耿詳義.張躍平.Java2實用教程.北京:清華大學出版社.2004.2[2]張利國.Java實用教程案例.北京:清華大學出版社.2003.10[3]周曉聰.等.面向對象程序設計與Java語言.北京:機械工業出版社.2004.3[4]李尊朝.Java語言程序設計.北京:中國鐵道出版社.2004.2[5]<美>PhilipHeller.ComplateJava2CertificationStudyGuideFourthEdition<Java2證學習指南><第四版英文版>.北京:電子工業出版社,2004.1第7章附錄程序源代碼:importjava.awt.Color;//引入顏色類importjava.awt.Component;//引入組件類importjava.awt.Dimension;//引入封裝單個對象中組件的寬度和高度〔精確到整數的類importjava.awt.Graphics;//引入圖形類importjava.awt.Graphics2D;//引入二維圖形類importjava.awt.event.ActionEvent;//引入事件類importjava.awt.event.ActionListener;//引入事件監聽器類importjava.awt.image.BufferedImage;//引入緩沖圖像類importjava.util.Stack;//引入棧類importjava.util.Timer;//引入計時器類importjava.util.TimerTask;//引入了實現Runnable接口的類.并具有了線程的功能importjavax.swing.JButton;//引入按鈕類importjavax.swing.JComboBox;//引入下拉列表框類importjavax.swing.JFrame;//引入主框架主窗口類importjavax.swing.JLabel;//引入標簽類importjavax.swing.JOptionPane;//引入選項面板類importjavax.swing.JPanel;//引入面板類publicclassha//定義一個公共的主類Test{publicstaticvoidmain<String[]args>//定義主方法main{newha<>;//調用Test類的構造方法Test<>}privatestaticfinalintMIN_CNT=20;//定義一個常量.設置為最小火柴棍數量為20privatestaticfinalintMAX_CNT=50;//定義一個常量.設置為最大火柴棍數量為50privatestaticfinalintMAX_TAKE=3;//定義一個常量.設置為最大拿火柴數量為3privatestaticfinalintDELAY=1000;//定義一個常量.設置為延遲時間為1000privateJFramemainFrame;//定義主框架變量privateMyPaintPanel[]paints;//定義我自己畫的面板數組變量privateJButtonuserBtn;//定義我的按鈕屬性privateJComboBoxuserNum;//定義我的下拉列表privateJButtoncompBtn;//定義電腦按鈕屬性privateJLabelcompTxt;//定義電腦標簽privateTimertimer;//定義計時器的變量privateha<>//定義一個私有的構造方法.來完成游戲的初始化動作{mainFrame=newJFrame<>;//實例化一個主窗口mainFrame.setResizable<false>;//設置窗體大小不可調整mainFrame.setDefaultCloseOperation<JFrame.EXIT_ON_CLOSE>;//設置默認的關閉操作為關閉窗口JPanelmainPanel=newJPanel<>;//實例化一個主面板對象mainPanel.setLayout<null>;//設置布局為空.即沒有任何布局mainPanel.setPreferredSize<newDimension<600,400>>;//將組件的首選大小設置為常量值mainFrame.add<mainPanel>;//將主面板添加到框架〔窗口中JLabellab11=newJLabel<"電腦">;//創建并設置標簽按鈕的內容為電腦lab11.setHorizontalAlignment<JLabel.CENTER>;//設置標簽內容沿X軸的對齊方式lab11.setBounds<0,10,200,20>;//設置該標簽顯示位置為坐標〔0,10.寬200.高20mainPanel.add<lab11>;//將標簽加入主面板JButtonbtn11=newJButton<"Reset">;//定義一個重新來的按鈕btn11.addActionListener<newActionListener<>//為"Reset"添加行為事件監聽器.采用匿名類的方式{@OverridepublicvoidactionPerformed<ActionEvente>//實現監聽器中的方法{init<>;//當單擊此按鈕時.調用該初始化方法}}>;btn11.setBounds<250,10,100,20>;//設置重置按鈕的位置.左上角坐標為〔250.10.大小為寬100.高20mainPanel.add<btn11>;//重來標簽添加到主面板上JLabellab12=newJLabel<"用戶">;//定義用戶標簽lab12.setHorizontalAlignment<JLabel.CENTER>;//設置用戶水平方式為居中lab12.setBounds<400,10,200,20>;//設置用戶標簽的位置.左上角坐標為〔400,10.大小為寬200.高20mainPanel.add<lab12>;//將用戶標簽添加到主面板上compBtn=newJButton<"ComputerFirst">;//定義一個電腦首先拿的按鈕compBtn.addActionListener<newActionListener<>//為電腦開始按鈕定義行為事件監聽器{@OverridepublicvoidactionPerformed<ActionEvente>//行為監聽器中的默認方法{compTake<>;//當單擊電腦按鈕時.調用電腦拿方法}}>;compBtn.setBounds<10,40,180,20>;//設置電腦按鈕的位置.左上角坐標為〔10.40.大小為寬180.高20mainPanel.add<compBtn>;//按鈕添加到主面板上compTxt=newJLabel<>;//定義一個空標簽compTxt.setBounds<10,70,400,20>;//設置空標簽的位置.左上角坐標為〔10.70.大小為寬400.高20mainPanel.add<compTxt>;//將空標簽加到主面板上userBtn=newJButton<"Take">;//定義用戶拿按鈕userBtn.addActionListener<newActionListener<>//為用戶按鈕定義行為事件監聽器{@OverridepublicvoidactionPerformed<ActionEvente>{userTake<>;//當單擊用戶拿按鈕時.調用用戶拿方法}}>;userBtn.setBounds<400,40,90,20>;//設置用戶拿按鈕的位置.左上角的坐標為〔400,40.大小為寬90.高20mainPanel.add<userBtn>;//用戶按鈕添加到主面板上userNum=newJComboBox<>;//定義一個下拉列表框for<inti=0;i<MAX_TAKE;i++>//定義一個拿最大的循環{userNum.addItem<i+1>;//通過循環給列表框逐個添加選項}userNum.setBounds<495,40,90,20>;//設置下拉列表框中的位置.左上角的坐標為〔495,40.大小為寬90.高20mainPanel.add<userNum>;//將列表框添加到主面板上paints=newMyPaintPanel[3];//定義我畫的面板for<inti=0;i<3;i++>//用3次循環來畫出三個面板{paints[i]=newMyPaintPanel<>;//分別創建3個面板.并調用構造方法初始化三個面板paints[i].setBounds<5+200*i,110,190,285>;//設置三個面板的位置和坐標.間距為5mainPanel.add<paints[i]>;//將三個面板分別添加到主面板上}mainFrame.pack<>;//調整此窗口的大小.以適合其子組件的首選大小和布局。mainFrame.setVisible<true>;//設置當前主窗口的可見性init<>;//調用初始化方法}privatevoidinit<>//定義初始化的方法{if<timer!=null>//如果計時器不為空的話就執行下面的語句{timer.cancel<>;//快速終止計時器的任務執行線程}timer=newTimer<>;//實例化一個計時器的對象compTxt.setText<"">;//設置空標簽的文本為空compBtn.setEnabled<true>;//設置是否啟用電腦按鈕組件.即電腦組件可用userBtn.setEnabled<true>;//設置是否啟用用戶按鈕組件.即用戶組件可用paints[0].reset<>;//調用重置方法.來重新定義第一塊面板paints[1].reset<>;//調用重置方法.來重新定義第二塊面板paints[2].reset<>;//調用重置方法.來重新定義第三塊面板intnum=MIN_CNT+<int><<MAX_CNT+1-MIN_CNT>*Math.random<>>;//隨機產生一個大于20小于50的數for<inti=0;i<num;i++>//分別用for循環添加面板{paints[1].add<i+1>;//分別將產生的隨機數添加到第二塊面板}}privatevoiduserTake<>//定義一個用戶拿火柴棒的方法{compBtn.setEnabled<false>;//設置按鈕不可用inttakeCnt=userNum.getSelectedIndex<>+1;//定義用戶拿得火柴棍的數量intrel=paints[1].getCnt<>;//將自定義的第二個面板中的火柴棍的數量賦給relif<takeCnt>rel>//如果用戶拿火柴棍的數量比面板中的數量大的話.執行下面的語句{JOptionPane.showMessageDialog<mainFrame,"Thereisonly"+rel+"matches.">;//用標準對話框類調用顯示"Thereisonlymachines"的對話框return;}for<inti=0;i<takeCnt;i++>//定義一個將第二塊面板中的火柴棍的數量移動到用戶面板的循環{intindex=paints[1].remove<>;//將第二個面板要移除的火柴棍的數量給index變量paints[2].add<index>;//將index的值添加到用戶拿的面板上}if<takeCnt==rel>//如果用戶拿的火柴棍的數量和第二個相等執行下面的語句{JOptionPane.showMessageDialog<mainFrame,"Youarethewinner.">;//顯示"你勝利的對話框"init<>;//并重新初始化}else//如果不相等的話.執行下面的語句.{compTake<>;//讓電腦接著拿火柴棍}}privatevoidcompTake<>//定義電腦拿的方法{compBtn.setEnabled<false>;//設置電腦按鈕的當前狀態為不可用userBtn.setEnabled<false>;//設置用戶按鈕的當前狀態為不可用MyTasktask=newMyTask<>;//實例化一個MyTask的對象timer.schedule<task,DELAY>;//執行線程.安排在指定延遲1秒后執行指定的任務}privateclassMyTaskextendsTimerTask//定義一個繼承了實現Runnable接口的類使自己也具有線程功能{@Overridepublicvoidrun<>//因為TimerTask實現了Runnable接口.重寫父類的run方法{intrel=paints[1].getCnt<>;//將火柴棍面板中的火柴的數量賦給relinttakeCnt=0;//設置當前拿火柴棍的數量為0if<rel<=MAX_TAKE>//如果當前火柴棍的數量比最大拿火柴的數量小的話.執行下面的語句{takeCnt=rel;//將火柴棍的數量賦給電腦要拿的數量}elseif<rel%<MAX_TAKE+1>>0>//如果面板中的火柴棍的數量對4取余大于0的話執行下面的語句{takeCnt=rel%<MAX_TAKE+1>;//將面板中的火柴的數量對4取余之后賦給電腦要拿的火柴的數量}else//否則面板中的火柴棍的數量對4取余小于或等于0的話執行下面的語句{takeCnt=1+<int><MAX_TAKE*Math.random<>>;//隨機產生一個小于4的數.給電腦要拿的數量}for<inti=0;i<takeCnt;i++>{intindex=paints[1].remove<>;//將火柴面板中的火柴移除并賦給indexpaints[0].add<index>;//將移除的火柴添加到電腦拿的面板上}compTxt.setText<"Computertakes"+takeCnt+"matchesthistime.">;//設置電腦顯示拿火柴的數量if<takeCnt==rel>//如果和電腦那的數量和面板中的數量相等執行下面的語句{JOptionPane.showMessageDialog<mainFrame,//顯示信息對話框提示電腦勝利了!"Computeristhewinner.">;init<>;//并重新初始化}userBtn.setEnabled<true>;//設置用戶按鈕重新可用}}@SuppressWarnings<"serial">privateclassMyPaintPanelextendsComponent//定義一個自定義的面板類并繼承了組件類{privateBufferedImagebimg;//創建一個BufferedImage的變量bimgprivateStack<Integer>data;//定義一個私有的棧類型的變量dataprivateMyPaintPanel<>//構造我的初始面板的方法{bimg=newBufferedImage<190,285,BufferedImage.TYPE_3BYTE_BGR>;//表示一個具有8位RGB顏色分量的圖像.Graphics2Dg2=bimg.createGraphics<>;//創建一個Graphics2D.并將它繪制到此BufferedImage中g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 算法可視化-洞察闡釋
- KOL營銷效果評估模型-第1篇-洞察闡釋
- 后身份理論與敘事-洞察闡釋
- 網絡虛擬現實-洞察闡釋
- 藝術教育中的技術融合-洞察闡釋
- 機器人感知與定位-洞察闡釋
- 數學組家長參與教研活動計劃
- 機械設備故障診斷技術研究范文
- 機關單位火災應急演練方案計劃
- 在線教育平臺教師工作總結范文
- 2025年南京市七下期中英語試卷 (試卷版)
- 國有企業雙重目標導向與雙軌治理機制的研究進展及前景展望
- 2025年山東省煙草專賣局(公司)高校畢業生招聘(208名)筆試參考題庫附帶答案詳解
- 浙江省寧波市2024學年第二學期高考與選考模擬考試化學試卷及答案(寧波二模)
- 國開電大軟件工程形考作業3參考答案 (二)
- 棋牌轉讓免責協議書
- 歷城二中生物試卷及答案
- 設備定制技術協議書
- 實習帶教護理教學大賽課件
- 6.2 做核心思想理念的傳承者 課時訓練(含答案)-2024-2025學年下學期 七年級道德與法治
- 工業園區裝修管理規定
評論
0/150
提交評論