版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> ( 2016—2017學(xué)年第2學(xué)期)</p><p> 課程名稱Java課程設(shè)計(jì)報(bào)告</p><p> 學(xué)生姓名</p><p> 班級(jí)</p><p> 學(xué)號(hào)</p><p> 指導(dǎo)教師</p&
2、gt;<p> 完成日期2017.6.23</p><p><b> 目錄</b></p><p> 一、 設(shè)計(jì)目的及要求1</p><p> 1.1課程設(shè)計(jì)目的1</p><p> 1.2課程設(shè)計(jì)內(nèi)容和要求1</p><p> 二、系統(tǒng)需求分析2</p>
3、;<p> 2.1 系統(tǒng)目標(biāo)2</p><p><b> 2.2游戲需求2</b></p><p> 2.3 開發(fā)環(huán)境2</p><p> 三、系統(tǒng)總體設(shè)計(jì)3</p><p> 3.1系統(tǒng)的功能模塊劃分3</p><p> 3.2系統(tǒng)流程圖4</p>
4、;<p> 四、系統(tǒng)詳細(xì)設(shè)計(jì)5</p><p> 4.1具體的設(shè)計(jì)步驟如下: 5</p><p><b> 4.2界面設(shè)計(jì)5</b></p><p> 4.3關(guān)鍵功能的實(shí)現(xiàn)6</p><p><b> 五、代碼調(diào)試11</b></p><
5、;p><b> 六、小結(jié)14</b></p><p><b> 參考文獻(xiàn)15</b></p><p><b> 七、附錄15</b></p><p> 設(shè)計(jì)目的及要求 </p><p><b> 1.1課程設(shè)計(jì)目的</b>&l
6、t;/p><p> 通過本游戲的設(shè)計(jì),綜合自己在校期間所學(xué)的理論知識(shí),設(shè)計(jì)開發(fā)24點(diǎn)游戲,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,進(jìn)一步理解面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法,利用Java語言進(jìn)行程序設(shè)計(jì)的能力,培養(yǎng)自主思考能力,檢驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,初步掌握基礎(chǔ)編程知識(shí),并鍛煉發(fā)現(xiàn)問題、分析問題和解決問題的能力。從而達(dá)到理論與實(shí)踐相結(jié)合的目的。</p><p> 加深對(duì)《Java語言與面向?qū)ο蠹夹g(shù)》課
7、程基礎(chǔ)知識(shí)的理解,掌握J(rèn)ava語言面向?qū)ο蟪绦蛟O(shè)計(jì)的開發(fā)方法和步驟。</p><p> 1.2課程設(shè)計(jì)內(nèi)容和要求</p><p> 24點(diǎn)游戲是一種使用撲克牌來進(jìn)行的益智的游戲,游戲內(nèi)容為:從一副撲克牌四個(gè)花色的1到K等52張牌中,任意抽取4張牌,運(yùn)用加、減、乘、除和括號(hào)等運(yùn)算符把牌面上的數(shù)進(jìn)行運(yùn)算得到24。游戲有不同的版本,其實(shí)是對(duì)J、Q、和K的處理有所不同。有的版本版本是把J、Q、
8、和K去除,只用1到10來進(jìn)行游戲;有的版本是把J、Q、和K當(dāng)成10;還有的版本是用J表示11,Q表示12,K表示13。此次課程設(shè)計(jì)采用的是把J表示11,Q表示12,K表示13,使游戲的四張牌在1~K這13張牌中隨機(jī)取牌。具體功能如下: </p><p> ?、艑?duì)游戲設(shè)計(jì)三個(gè)難易級(jí)別,分別為初級(jí)、中級(jí)和高級(jí)。每次開始游戲前可以根據(jù)玩家的需要進(jìn)行難度設(shè)置,如若不設(shè)置,系統(tǒng)默認(rèn)難度級(jí)別為初級(jí),設(shè)置完難度級(jí)別之
9、后就可以開始游戲了,單擊“發(fā)牌”按鈕,桌面上出現(xiàn)四張翻開的撲克牌,與此同時(shí),游戲開始計(jì)時(shí),時(shí)間條開始前進(jìn)。 </p><p> ?、圃谝?guī)定的時(shí)間內(nèi),玩家可以在“輸入結(jié)果”的編輯框中輸入自己想好的算式,然后點(diǎn)擊“驗(yàn)算”按鈕:如果輸入的算式經(jīng)運(yùn)算后所的答案正確,則會(huì)彈出“恭喜,你成功答對(duì)了一題”的窗口;如果輸入的數(shù)字與給出的牌的數(shù)字不符或者符號(hào)不合法,則會(huì)彈出“抱歉,你答錯(cuò)了”的窗口;如果未輸入任何的數(shù)字和
10、算符,則會(huì)彈出“輸入不能為空!”的窗口。</p><p> ?、?#160;程序中可以記錄游戲的歷史記錄。</p><p> ?、热绻谝?guī)定的時(shí)間內(nèi),玩家沒有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“對(duì)不起,你失敗了”的窗口。</p><p> ?、稍诮Y(jié)束本輪游戲后,如果玩家想繼續(xù)游戲,則可點(diǎn)擊“發(fā)牌”按鈕即可重新發(fā)牌,開始下一輪的游戲;如果玩家想結(jié)束游戲,則可點(diǎn)擊“結(jié)束”按鈕即可結(jié)
11、束游戲</p><p><b> 二、系統(tǒng)需求分析</b></p><p><b> 2.1 系統(tǒng)目標(biāo)</b></p><p> 使用所學(xué)知識(shí)制作一個(gè)基于java的24點(diǎn)游戲。</p><p><b> 2.2游戲需求</b></p><p>
12、 游戲界面需求:設(shè)計(jì)良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的背景色是綠色,盡量降低玩家游戲時(shí)的用眼疲勞,最大化的為玩家?guī)硎孢m的娛樂環(huán)境。</p><p> 游戲形狀需求:根據(jù)數(shù)字顏色的不同,顯示不同的紙牌。</p><p> 鼠標(biāo)處理事件需求:通過點(diǎn)擊菜單欄中對(duì)應(yīng)的菜單項(xiàng),可以實(shí)現(xiàn)游戲開始、結(jié)束、數(shù)字的驗(yàn)算及其他游戲選擇等功能。</p><p&g
13、t;<b> 2.3 開發(fā)環(huán)境</b></p><p> MyEclipse,windowbuilder</p><p><b> 三、系統(tǒng)總體設(shè)計(jì)</b></p><p> 3.1系統(tǒng)的功能模塊劃分</p><p><b> 圖一系統(tǒng)功能圖</b></p>
14、;<p><b> 3.2系統(tǒng)流程圖</b></p><p><b> 圖二系統(tǒng)流程圖</b></p><p><b> 四、系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> 4.1具體的設(shè)計(jì)步驟如下: </p><p> 1)在對(duì)話框中添加4個(gè)圖像(分
15、別用于四張撲克牌),3個(gè)按鈕(分別是發(fā)牌、運(yùn)算、結(jié)束),1個(gè)編輯框,一個(gè)進(jìn)度條和一個(gè)下拉框(用于選擇難度級(jí)別)接著根據(jù)屬性對(duì)以上所添加的控件進(jìn)行屬性修改,主要進(jìn)行重命名,以便編輯源代碼的時(shí)候區(qū)分,另外對(duì)圖像的處理除了對(duì)其進(jìn)行重命名外還要對(duì)其添加位圖。之后通過打開圖片,并對(duì)其進(jìn)行重命名。 </p><p> 2)根據(jù)流程圖在類的原文件中逐一添加實(shí)現(xiàn)各個(gè)模塊其功能所需要的各種函數(shù),并添加相應(yīng)的
16、源代碼,同時(shí)在頭文件中添加對(duì)各種函數(shù)及變量的聲明。 </p><p> 3)對(duì)編譯好的程序進(jìn)行保存,開始進(jìn)行調(diào)試,邊調(diào)試邊根據(jù)報(bào)錯(cuò)對(duì)原程序進(jìn)行修改,直到程序不在報(bào)錯(cuò)為止。</p><p><b> 4.2界面設(shè)計(jì)</b></p><p> 表1 控件類型、ID及相關(guān)說明</p><p> 4.3關(guān)鍵功
17、能的實(shí)現(xiàn)</p><p> ?。?)發(fā)牌功能的實(shí)現(xiàn)</p><p> 首先,通過Number[i]=rand()%13。來產(chǎn)生0-9的隨機(jī)數(shù),利用該函數(shù)加載了標(biāo)號(hào)1~10的10張紙牌和一張背景紙牌。然后運(yùn)行中的以下一段代碼,即可在圖像框中得到四張鋪開的紙牌。代碼如下:</p><p> Random random=new Random();
18、r1=random.nextInt(10)+1;</p><p> (2)計(jì)時(shí)功能的實(shí)現(xiàn)</p><p> 首先,定義線程類,通過每隔不同的時(shí)間來發(fā)送信息來控制三個(gè)級(jí)別的時(shí)間不同。設(shè)置了時(shí)間限制,如果時(shí)間超過代表游戲結(jié)束,用戶沒有時(shí)間進(jìn)行思考了,本輪游戲結(jié)束。源代碼如下:</p><p> class MyThread extends
19、60;Thread {boolean lock=true;JProgressBar progressBar;JLabel label_1;JLabel label_2;JLabel label_3;JLabel label_4;JTextField textField;JButton button;int diffic
20、ulty=0;MyThread(JProgressBar progressBar,JLabel label_1,JLabel label_2,JLabel label_3,JLabel label_4,JTextField textField,int difficulty,JButton button){this.progressBar=progress
21、Bar;this.label_1=label_1;this.label_2=label_2;this.label_3=label_3;this.label_4=label_4;this.textField=textField;this.diffic</p><p> ?。?)驗(yàn)算功能的實(shí)現(xiàn)</p><p> 只簡(jiǎn)單介紹彈出框的實(shí)現(xiàn)的功能完成。在規(guī)定的時(shí)間內(nèi)玩家輸入算式進(jìn)行驗(yàn)算
22、,根據(jù)不同的情況會(huì)彈出不同的對(duì)話框。有以下兩種情況:如果玩家輸入的數(shù)字與撲克牌給出的數(shù)字不符合,則會(huì)彈出“抱歉,你答錯(cuò)了”的提示對(duì)話框。如果玩家輸入算式經(jīng)運(yùn)算后所得答案正確,則會(huì)彈出“恭喜,你成功答對(duì)了一題”的提示對(duì)話框。具體代碼如下:</p><p> button.addMouseListener(new MouseAdapter() {@Overridepublic vo
23、id mouseClicked(MouseEvent e) {String s= textField.getText().toString();if(cacComplex(s)==24&&kuohao(s)==1&&shuzi(s)==1){JOptionPane.showMessageDialog(null, "恭喜,你成功答
24、對(duì)了一題", "Message",JOptionPane.PLAIN_MESSAGE);currenttime=System.currentTimeMillis();if(time>currenttime-firsttime||time==0){time=(int) (currenttime-firsttime);}correct++;textField.setText
25、("");label_1.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse </p><p><b> ?、扔?jì)算功能的實(shí)現(xiàn)</b></p><p> 對(duì)于輸入結(jié)果的計(jì)算,主要是通過int LastPos(CString Str),int Fir
26、stPos(CString Str),char FirstF(CString Str),int SubCompute(CString Str),int TotalCompute(CString Str)等函數(shù)來來確定輸入的算式的優(yōu)先級(jí)別并且計(jì)算出輸入算式的最終結(jié)果?,F(xiàn)摘兩段代碼進(jìn)行詳細(xì)說明</p><p> private static double cacComplex(Stri
27、ng str) {if (str.equals(""))return 0;//System.out.println("CAC:" + str);str = str.replaceAll("[\\(]", "(").replaceAll("[\\)]&
28、quot;, ")");int cl = str.lastIndexOf('(');if (cl == -1)return cac(str);int cr = str.indexOf(')', cl);String left =
29、;str.substring(0, cl);String right = str.substring(cr + 1);String middle = str.substring(cl + 1, cr);return cacComplex(left + cac(middle)
30、0;+ right);}public static double cac(String str) {if (str.equals(""))retur</p><p> ⑸括號(hào)匹配功能的實(shí)現(xiàn)</p><p> 進(jìn)行括號(hào)配對(duì)并優(yōu)先進(jìn)行括號(hào)內(nèi)運(yùn)算:</p><p>
31、private static double kuohao(String str){Stack<Character> stack =new Stack<Character>();for(int i=0;i<str.length();i++){if(str.charAt(i)=='('||str.charAt(
32、i)==')'){if(stack.isEmpty()){stack.push(str.charAt(i));}else if(stack.peek()=='('&&str.charAt(i)==')'){stack.pop();}else{stack.push(str.charAt(i));}}}if(stack.isEmpty()){re
33、turn 1;}else{return 0;}}</p><p> 我負(fù)責(zé)的是驗(yàn)算功能的實(shí)現(xiàn),1. 括號(hào)匹配:建立一個(gè)棧stock,自右向左遍歷字符串,當(dāng)匹配到“(”,將“(”放入棧中,繼續(xù)遍歷。當(dāng)匹配到“)”,如果棧頂為“(”,就執(zhí)行stock.pop(),取出棧頂,否則就將字符放入棧中。直到遍歷完字符串。如果??談t匹配成功,否則就算匹配失敗。2. 檢驗(yàn)次數(shù):利用Pattern類
34、,Matcher類,遍歷字符串并檢測(cè)其中中出現(xiàn)4個(gè)隨機(jī)數(shù)的次數(shù),超過1次表明錯(cuò)誤。3. 檢驗(yàn)運(yùn)算式:引入javascript中eval函數(shù),檢驗(yàn)表達(dá)式,如果錯(cuò)誤,返回null。 </p><p><b> 五、代碼調(diào)試</b></p><p><b> (1)進(jìn)入游戲界面</b></p><p> 說明:本界面為游
35、戲初始界面,默認(rèn)難度級(jí)別為初級(jí)。</p><p><b> ?。?)發(fā)牌</b></p><p> 說明:點(diǎn)擊“發(fā)牌”按鈕,自動(dòng)發(fā)牌,計(jì)時(shí)進(jìn)度條開始滾動(dòng)。</p><p> (3)輸入驗(yàn)算公式界面</p><p><b> 說明:驗(yàn)算正確</b></p><p><
36、;b> 說明:驗(yàn)算錯(cuò)誤</b></p><p> ?。?)沒有來的及輸入表達(dá)式,超過限制時(shí)間,頁面顯示為</p><p> 說明:.如果在規(guī)定的時(shí)間內(nèi),玩家沒有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“內(nèi)部錯(cuò)誤”的窗口。 </p><p><b> ?。?)歷史記錄</b></p><p> 說明:每結(jié)束一次游戲會(huì)
37、將歷史記錄在數(shù)據(jù)庫(kù)中。</p><p><b> 六、小結(jié)</b></p><p><b> 心得與體會(huì)</b></p><p> 開始了為期兩周的緊張的java課程設(shè)計(jì),這已經(jīng)是大學(xué)時(shí)代的第四次課程設(shè)計(jì)了,較之之前的三次,感覺這次的與以往大大不同,是利用自己的知識(shí)開發(fā)一個(gè)小游戲,心里著實(shí)興奮了一把,但是這個(gè)設(shè)計(jì)用的
38、是大二下學(xué)期學(xué)的java的知識(shí),不是很理解或是熟練運(yùn)用,所以剛剛開始的時(shí)候,毫無頭緒,感覺好難真的好難,難于上青天。心里障礙阻當(dāng)著我讓我不敢向前邁步。我很怕自己做不好,怕自己不能按時(shí)完成,很怕自己不如其他同學(xué)。內(nèi)心滿是恐懼,被恐懼占具的心靈又怎么能出色的完成課程設(shè)計(jì)呢?</p><p> 最初進(jìn)行設(shè)計(jì)的時(shí)候,沒有一點(diǎn)頭緒,后來上網(wǎng)查閱,將計(jì)算器和菜單欄制作這兩個(gè)范例看了幾遍。感覺很有收獲,但是對(duì)于進(jìn)程條的設(shè)置還
39、是不清楚,又翻出課件來看重新學(xué)習(xí),經(jīng)與同學(xué)討論,終于弄清了進(jìn)程條的設(shè)置。而對(duì)于編程,是最龐大又棘手的一塊,那是忘得更多了,于是把課本和圖書館借來的參考書重新針對(duì)性的學(xué)了一次,遇到難處先是仔細(xì)的思考然后在向同學(xué)請(qǐng)教??梢哉f開始的那么幾天都是在查找資料,翻閱相關(guān)的書籍。在最后添加代碼的時(shí)候還有一些程序不知道怎么寫。于是,于是又利用了網(wǎng)絡(luò)資源,收集里了一些,經(jīng)分析、查詢資料仍有一些地方看不懂。就請(qǐng)教同學(xué),嘗試往對(duì)話框中添加相應(yīng)代碼的方法。根據(jù)
40、一大段的分析,感覺程序執(zhí)行某個(gè)功能,將這段代碼添加到對(duì)應(yīng)位置。所有的代碼添加完后,運(yùn)行、調(diào)試,開始會(huì)出現(xiàn)了很多很多的錯(cuò)誤。逐條進(jìn)行修改,再進(jìn)行運(yùn)行和調(diào)試,有時(shí)候錯(cuò)誤看不懂,就找同學(xué)商量。也不知道錯(cuò)了多少次,改了多少次,終于最后做出了完美的游戲界面。終于完成了設(shè)計(jì)。</p><p> 但是本次課程設(shè)計(jì)是自己第一次開發(fā)小游戲,心理很甜。通過此次課程設(shè)計(jì),收獲頗多,最主要的是對(duì)java知識(shí)重新學(xué)習(xí)了一遍,感受到了它的
41、博大精深. </p><p> 首先,編程有了很大的提高,雖然有時(shí)候自己沒有思路,但是可以借鑒別人的代碼,看別人設(shè)計(jì)的思路,理解的同時(shí)自己小試一下也可以編出來,所以凡事不能被困難嚇倒,只要有開始,去嘗試。就會(huì)有意想不到的收獲。</p><p> 再次,在運(yùn)行、調(diào)試過程中也學(xué)到了很多,以前編程最怕的就是報(bào)錯(cuò),尤其是錯(cuò)誤多了的時(shí)候,感覺毫無頭緒直接頭大,但是編程不可能不出錯(cuò),報(bào)錯(cuò),只要逐一
42、對(duì)付,然后細(xì)心研究改正,終究一切問題都會(huì)迎刃而解的,所以遇到問題,不能急,要心平氣和的去應(yīng)對(duì),才能把所學(xué)的只是真正用于實(shí)際,這不得不說正是我們當(dāng)代大學(xué)生所嚴(yán)重缺乏的,以后的學(xué)習(xí)中更應(yīng)注意。</p><p> 通過這次課程設(shè)計(jì),加強(qiáng)了我動(dòng)手、思考和解決問題的能力。比如細(xì)心還有耐心還有對(duì)自己有一定的自信等等。而且課程設(shè)計(jì)同時(shí)也是對(duì)課本知識(shí)的鞏固和加強(qiáng),由于課本上的知識(shí)太多,平時(shí)只有課間的學(xué)習(xí)是遠(yuǎn)遠(yuǎn)不夠的,所以以后要
43、多花時(shí)間溫故知新。兩個(gè)星期的課程設(shè)計(jì),過程曲折可謂一語難盡。在此期間我也從毫無頭緒到一度熱情高漲。到從開始時(shí)滿富盛激情到調(diào)不出結(jié)果的焦頭爛額,到最后慧心的笑,點(diǎn)點(diǎn)滴滴無不令我回味無長(zhǎng)??傊畬?duì)我而言,知識(shí)上的收獲重要,精神上的豐收更加可喜。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次課設(shè)必是我人生旅途上一個(gè)非常美好的回憶!</p><p><b> 參考文獻(xiàn)</b></p><p
44、> [1]耿祥義,張躍平.Java面向?qū)ο蟪绦蛟O(shè)計(jì) [M].北京:清華大學(xué)出版社,2009.11.</p><p><b> 七、附錄</b></p><p> import java.awt.BorderLayout;</p><p> import java.awt.EventQueue;</p><p&g
45、t; import javax.swing.JFrame;</p><p> import javax.swing.JPanel;</p><p> import javax.swing.border.EmptyBorder;</p><p> import java.awt.Color;</p><p> import javax
46、.swing.JButton;</p><p> import javax.swing.JComboBox;</p><p> import javax.swing.JProgressBar;</p><p> import javax.swing.JScrollPane;</p><p> import javax.swing.Sw
47、ingWorker;</p><p> import java.awt.event.MouseAdapter;</p><p> import java.awt.event.MouseEvent;</p><p> import java.util.List;</p><p> import java.util.concurrent.
48、ExecutionException;</p><p> import java.util.concurrent.TimeUnit;</p><p> import java.util.concurrent.TimeoutException;</p><p> import java.util.regex.Matcher;</p><p&g
49、t; import java.util.regex.Pattern;</p><p> import java.awt.Rectangle;</p><p> import javax.swing.border.CompoundBorder;</p><p> import javax.swing.JLabel;</p><p>
50、import javax.swing.JOptionPane;</p><p> import java.awt.event.ActionListener;</p><p> import java.awt.event.ActionEvent;</p><p> import java.awt.Font;</p><p> impor
51、t javax.swing.ImageIcon;</p><p> import java.util.Random;</p><p> import java.util.Stack;</p><p> import javax.swing.JTextField;</p><p> import javax.swing.SwingCon
52、stants;</p><p> import javax.swing.JList;</p><p> import javax.swing.JTable;</p><p> import javax.swing.table.DefaultTableModel;</p><p> import javax.script.ScriptE
53、ngine;</p><p> import javax.script.ScriptEngineManager;</p><p> import javax.script.ScriptException;</p><p> import javax.swing.DefaultComboBoxModel;</p><p> import
54、 java.awt.event.ItemListener;</p><p> import java.awt.event.ItemEvent;</p><p> import java.sql.*;</p><p> public class MyFrame extends JFrame {</p><p> private JPan
55、el contentPane;</p><p> private JProgressBar progressBar;</p><p> private JLabel label_1;</p><p> private JLabel label_2;</p><p> private JLabel label_3;</p>
56、<p> private JLabel label_4;</p><p> MyThread thread;</p><p> private JTextField textField;</p><p> private JScrollPane scrollPane;</p><p> private JTable ta
57、ble;</p><p> JComboBox comboBox;</p><p> JButton button;</p><p> int difficulty=0;</p><p> int total=0;</p><p> int correct=0;</p><p> i
58、nt time=0;</p><p> long firsttime;</p><p> long currenttime;</p><p> int r1,r2,r3,r4;</p><p><b> /**</b></p><p> * Launch the application.
59、</p><p><b> */</b></p><p> public static void main(String[] args) throws Exception{</p><p> EventQueue.invokeLater(new Runnable() {</p><p> public void
60、run() {</p><p><b> try {</b></p><p> MyFrame frame = new MyFrame();</p><p> frame.setVisible(true);</p><p> } catch (Exception e) {</p><p>
61、 e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> });</b></p><p><b> }</b></p><p> p
62、rivate static double cacComplex(String str) {</p><p> if (str.equals(""))</p><p><b> return 0;</b></p><p> //System.out.println("CAC:" + str);<
63、/p><p> str = str.replaceAll("[\\(]", "(").replaceAll("[\\)]", ")");</p><p> int cl = str.lastIndexOf('(');</p><p> if (cl == -1)<
64、/p><p> return cac(str);</p><p> int cr = str.indexOf(')', cl);</p><p> String left = str.substring(0, cl);</p><p> String right = str.substring(cr + 1);</p
65、><p> String middle = str.substring(cl + 1, cr);</p><p> return cacComplex(left + cac(middle) + right);</p><p><b> }</b></p><p> public static double cac(S
66、tring str) {</p><p> if (str.equals(""))</p><p><b> return 0;</b></p><p> int ml = str.indexOf('*');</p><p> int dl = str.indexOf('
67、;/');</p><p> if (ml == -1 && dl == -1) {</p><p> return cacNoMD(str);</p><p><b> }</b></p><p> int index = ml == -1 ? dl : ml;</p>&
68、lt;p> // 4+5*6*7+8</p><p> String left = str.substring(0, index);// 4+5</p><p> String m1 = lastNumber(left);</p><p> left = left.substring(0, left.length() - m1.length());&l
69、t;/p><p> String right = str.substring(index + 1);// 6*7+8</p><p> String m2 = firstNumber(right);// m2:6</p><p> right = right.substring(m2.length());// *7+8</p><p>
70、double d1 = Double.parseDouble(m1);</p><p> double d2 = Double.parseDouble(m2);</p><p> double tmp = 0;</p><p> if (index == ml) {</p><p> tmp = d1 * d2;</p>
71、<p> } else if (index == dl) {</p><p> tmp = d1 / d2;</p><p><b> }</b></p><p> return cac(left + tmp + right);</p><p><b> }</b></p
72、><p> private static String lastNumber(String str) {</p><p> StringBuilder sb = new StringBuilder();</p><p> for (int i = str.length() - 1; i >= 0; i--) {</p><p> c
73、har c = str.charAt(i);</p><p> if (!Character.isDigit(c) && c != '.')</p><p><b> break;</b></p><p> sb.append(c);</p><p><b> }<
74、/b></p><p> return sb.reverse().toString();</p><p><b> }</b></p><p> private static String firstNumber(String str) {</p><p> StringBuilder sb = new S
75、tringBuilder();</p><p> for (char c : str.toCharArray()) {</p><p> if (!Character.isDigit(c) && c != '.')</p><p><b> break;</b></p><p>
76、sb.append(c);</p><p><b> }</b></p><p> return sb.toString();</p><p><b> }</b></p><p> private static double cacNoMD(String str) {</p>
77、<p> double ret = 0;</p><p> StringBuilder sb = new StringBuilder();</p><p> char sign = '+';</p><p> for (char c : (str + "+").toCharArray()) {</p>
78、;<p> if (!Character.isDigit(c) && c != '.') {</p><p> if (sb.length() == 0)</p><p><b> continue;</b></p><p> double tmp = Double.parseDouble(
79、sb.toString());</p><p> if (sign == '+') {</p><p> ret += tmp;</p><p><b> } else {</b></p><p> ret -= tmp;</p><p><b> }</
80、b></p><p> sb = new StringBuilder();</p><p><b> sign = c;</b></p><p><b> } else {</b></p><p> sb.append(c);</p><p><b>
81、 }</b></p><p><b> }</b></p><p> return ret;</p><p><b> }</b></p><p> private static double kuohao(String str){</p><p>
82、Stack<Character> stack =new Stack<Character>();</p><p> for(int i=0;i<str.length();i++){</p><p> if(str.charAt(i)=='('||str.charAt(i)==')'){</p><p>
83、 if(stack.isEmpty()){</p><p> stack.push(str.charAt(i));</p><p> }else if(stack.peek()=='('&&str.charAt(i)==')'){</p><p> stack.pop();</p><p&g
84、t;<b> }else{</b></p><p> stack.push(str.charAt(i));</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
85、lt;p> if(stack.isEmpty()){</p><p><b> return 1;</b></p><p><b> }else{</b></p><p><b> return 0;</b></p><p><b> }</b&
86、gt;</p><p><b> }</b></p><p> private int shuzi(String str){</p><p> int count1 = 0;</p><p> Pattern p1 = Pattern.compile(String.valueOf(r1));</p>
87、<p> Matcher m1 = p1.matcher(str);</p><p> while (m1.find()) {</p><p><b> count1++;</b></p><p><b> }</b></p><p> int count2 = 0;</
88、p><p> Pattern p2 = Pattern.compile(String.valueOf(r2));</p><p> Matcher m2 = p2.matcher(str);</p><p> while (m2.find()) {</p><p><b> count2++;</b></p&g
89、t;<p><b> }</b></p><p> int count3 = 0;</p><p> Pattern p3 = Pattern.compile(String.valueOf(r3));</p><p> Matcher m3 = p3.matcher(str);</p><p>
90、while (m3.find()) {</p><p><b> count3++;</b></p><p><b> }</b></p><p> int count4 = 0;</p><p> Pattern p4 = Pattern.compile(String.valueOf(r4
91、));</p><p> Matcher m4 = p1.matcher(str);</p><p> while (m4.find()) {</p><p><b> count4++;</b></p><p><b> }</b></p><p> //
92、 ScriptEngineManager sem = new ScriptEngineManager();</p><p> // ScriptEngine se = sem.getEngineByName("js");</p><p> // // String s= textField.getText().toString();</p>
93、<p> // int result = 0;</p><p> // //long startTime = System.currentTimeMillis();</p><p> // try{</p><p> // result = (int)(se.eval(str));</p>
94、<p> // </p><p> // }catch (ScriptException e1) {</p><p> // return 0;</p><p><b> // } </b></p><p> // System.out.println(res
95、ult);</p><p> if(count1==1&&count2==1&&count3==1&&count4==1){</p><p><b> return 1;</b></p><p><b> }else{</b></p><p>&
96、lt;b> return 0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> /**</b></p><p> * Create the frame.</p><p&
97、gt;<b> */</b></p><p> public MyFrame() {</p><p> setResizable(false);</p><p> setTitle("24\u70B9\u6E38\u620F");</p><p> setDefaultCloseOperat
98、ion(JFrame.EXIT_ON_CLOSE);</p><p> setBounds(100, 100, 726, 392);</p><p> contentPane = new JPanel();</p><p> contentPane.setBackground(new Color(0, 128, 0));</p><p>
99、; contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));</p><p> setContentPane(contentPane);</p><p> contentPane.setLayout(null);</p><p> progressBar = new JProgressBar();</p&g
100、t;<p> progressBar.setBounds(102, 281, 383, 29);</p><p> progressBar.setMaximum(60);</p><p> contentPane.add(progressBar);</p><p> JButton btnNewButton = new JButton(&quo
101、t;\u53D1\u724C");</p><p> btnNewButton.setBounds(32, 227, 68, 21);</p><p> btnNewButton.setFont(new Font("宋體", Font.PLAIN, 15));</p><p> btnNewButton.addMouseListe
102、ner(new MouseAdapter() {</p><p><b> @Override</b></p><p> public void mouseClicked(MouseEvent e) {</p><p><b> total++;</b></p><p> firsttime
103、=System.currentTimeMillis();</p><p> textField.setEnabled(true);</p><p> button.setEnabled(true);</p><p> comboBox.setEnabled(false);</p><p> Random random=new Rand
104、om();</p><p> r1=random.nextInt(10)+1;</p><p> r2=random.nextInt(10)+1;</p><p> while(r2==r1){</p><p> r2=random.nextInt(10)+1;</p><p><b> }<
105、/b></p><p> r3=random.nextInt(10)+1;</p><p> while(r3==r2||r3==r1){</p><p> r3=random.nextInt(10)+1;</p><p><b> }</b></p><p> r4=random
106、.nextInt(10)+1;</p><p> while(r4==r1||r4==r2||r4==r3){</p><p> r4=random.nextInt(10)+1;</p><p><b> }</b></p><p> String s1 = "C:\\Users\\zcs\\Works
107、paces\\MyEclipse 2016 CI\\pukeImage\\1\\"+String.valueOf(r1)+".jpg";</p><p> label_1.setIcon(new ImageIcon(s1));</p><p> String s2 = "C:\\Users\\zcs\\Workspaces\\MyEclipse
108、2016 CI\\pukeImage\\2\\"+String.valueOf(r2)+".jpg";</p><p> label_2.setIcon(new ImageIcon(s2));</p><p> String s3 = "C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImag
109、e\\3\\"+String.valueOf(r3)+".jpg";</p><p> label_3.setIcon(new ImageIcon(s3));</p><p> String s4 = "C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\4\\"+Stri
110、ng.valueOf(r4)+".jpg";</p><p> label_4.setIcon(new ImageIcon(s4));</p><p> System.out.println(r1+","+r2+","+r3+","+r4);</p><p> if(thread!
111、=null&&thread.isAlive()==true){</p><p> thread.interrupt();</p><p><b> }</b></p><p> thread=new MyThread(progressBar,label_1,label_2,label_3,label_4,textField
112、,difficulty,button);</p><p> thread.start();</p><p><b> }</b></p><p><b> });</b></p><p> contentPane.add(btnNewButton);</p><p>
113、 JLabel label = new JLabel("\u8017\u65F6\u6807\u5FD7");</p><p> label.setBounds(37, 283, 55, 27);</p><p> label.setForeground(new Color(255, 255, 255));</p><p> conten
114、tPane.add(label);</p><p> label_1 = new JLabel("");</p><p> label_1.setBounds(32, 21, 105, 172);</p><p> label_1.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\
115、\MyEclipse 2016 CI\\pukeImage\\1.jpg"));</p><p> contentPane.add(label_1);</p><p> label_2 = new JLabel("");</p><p> label_2.setBounds(147, 21, 105, 172);</p>
116、;<p> label_2.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\2.jpg"));</p><p> contentPane.add(label_2);</p><p> label_3 = new JLabel("
117、");</p><p> label_3.setBounds(262, 21, 105, 172);</p><p> label_3.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\1.jpg"));</p><p>
118、 contentPane.add(label_3);</p><p> label_4 = new JLabel("");</p><p> label_4.setBounds(379, 21, 105, 172);</p><p> label_4.setIcon(new ImageIcon("C:\\Users\\zcs\\
119、Workspaces\\MyEclipse 2016 CI\\pukeImage\\2.jpg"));</p><p> contentPane.add(label_4);</p><p> textField = new JTextField();</p><p> textField.setEnabled(false);</p>&
120、lt;p> textField.setBounds(179, 228, 124, 21);</p><p> contentPane.add(textField);</p><p> textField.setColumns(10);</p><p> button = new JButton("\u9A8C\u7B97");<
121、;/p><p> button.setEnabled(false);</p><p> button.addMouseListener(new MouseAdapter() {</p><p><b> @Override</b></p><p> public void mouseClicked(MouseEven
122、t e) {</p><p> String s= textField.getText().toString();</p><p> System.out.println(kuohao(s));</p><p> System.out.println(cacComplex(s));</p><p> System.out.printl
123、n(shuzi(s));</p><p> if(cacComplex(s)==24&&kuohao(s)==1&&shuzi(s)==1){</p><p> JOptionPane.showMessageDialog(null, "恭喜,你成功答對(duì)了一題", "Message",JOptionPane.PLAI
124、N_MESSAGE);</p><p> currenttime=System.currentTimeMillis();</p><p> if(time>currenttime-firsttime||time==0){</p><p> time=(int) (currenttime-firsttime);</p><p>&l
125、t;b> }</b></p><p> correct++;</p><p> textField.setText("");</p><p> label_1.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeIm
126、age\\1.jpg"));</p><p> label_2.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\2.jpg"));</p><p> label_3.setIcon(new ImageIcon("C:\\Users\\
127、zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\1.jpg"));</p><p> label_4.setIcon(new ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse 2016 CI\\pukeImage\\2.jpg"));</p><p> threa
溫馨提示
- 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. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)-21點(diǎn)小游戲
- 基于java的掃雷游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)--基于java的掃雷游戲軟件設(shè)計(jì)
- java掃雷游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)---java設(shè)計(jì)貪吃蛇游戲
- java課程設(shè)計(jì)--手機(jī)游戲
- java課程設(shè)計(jì)-掃雷游戲
- java課程設(shè)計(jì)-撲克游戲
- java課程設(shè)計(jì)--基于java的動(dòng)物換位游戲軟件設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)論文 java 24點(diǎn)游戲設(shè)計(jì)
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java火柴游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)---基于java的坦克大戰(zhàn)
- java課程設(shè)計(jì)——猜數(shù)字游戲
- java課程設(shè)計(jì)——蜘蛛紙牌游戲
- java課程設(shè)計(jì)----基于java的坦克大戰(zhàn)
- java課程設(shè)計(jì)-猜數(shù)游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---java 五子棋游戲設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告--- 蜘蛛紙牌游戲
- java貪吃蛇游戲 課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論