




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