




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告(20162017學(xué)年第2學(xué)期)課程名稱 _Java課程設(shè)計(jì)報(bào)告_學(xué)生姓名_張曉甜 _班級(jí) _學(xué)號(hào) _指導(dǎo)教師_康軍 _完成日期_2017623 _4.1 具體的設(shè)計(jì)步驟如下:. 5七、附錄.錯(cuò). 誤!未定義書簽?zāi)夸浺弧?設(shè)計(jì)目的及要求 . 11.1課程設(shè)計(jì)目的 . 11.2課程設(shè)計(jì)內(nèi)容和要求 . 1二、系統(tǒng)需求分析 . 22.1 系統(tǒng)目標(biāo) . 22.2游戲需求 . 22.3 開發(fā)環(huán)境 . 2三、系統(tǒng)總體設(shè)計(jì) . 23.1系統(tǒng)的功能模塊劃分 . 23.2 系統(tǒng)流程圖 . 4四、系統(tǒng)詳細(xì)設(shè)計(jì) . 54.2 界面設(shè)計(jì)4.3 關(guān)鍵功能的實(shí)現(xiàn)五、代碼調(diào)試 .錯(cuò). 誤!未定義書簽。六、小結(jié)
2、.錯(cuò). 誤!未定義書簽。參考文獻(xiàn) . 24設(shè)計(jì)目的及要求1.11.1 課程設(shè)計(jì)目的通過本游戲的設(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é)合的目的。加深對(duì) Java 語言與面向?qū)ο蠹夹g(shù)課程基礎(chǔ)知識(shí)的理解,掌握 Java 語言面向?qū)ο蟪绦蛟O(shè)計(jì) 的開發(fā)方法和步驟。1.21.2 課程設(shè)計(jì)內(nèi)容和要求24 點(diǎn)游戲是一種使用撲克牌來進(jìn)行的益智的
3、游戲,游戲內(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和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,使游戲的四張牌在 1K這 13 張牌中隨機(jī)取牌。具體功能如下: ?對(duì)游戲設(shè)計(jì)三個(gè)難易級(jí)別,分別為初級(jí)、中級(jí)和高級(jí)。每次開始游戲前可以根據(jù)玩家的需要 進(jìn)行難度設(shè)置,如若不設(shè)置,系統(tǒng)默認(rèn)難度級(jí)別
4、為初級(jí),設(shè)置完難度級(jí)別之后就可以開始游戲了, 單擊“發(fā)牌”按鈕,桌面上出現(xiàn)四張翻開的撲克牌,與此同時(shí),游戲開始計(jì)時(shí),時(shí)間條開始前進(jìn)。?在規(guī)定的時(shí)間內(nèi),玩家可以在“輸入結(jié)果”的編輯框中輸入自己想好的算式,然后點(diǎn)擊“驗(yàn) 算”按鈕:如果輸入的算式經(jīng)運(yùn)算后所的答案正確,則會(huì)彈出“恭喜,你成功答對(duì)了一題”的窗口; 如果輸入的數(shù)字與給出的牌的數(shù)字不符或者符號(hào)不合法,則會(huì)彈出“抱歉,你答錯(cuò)了”的窗口;如 果未輸入任何的數(shù)字和算符,則會(huì)彈出“輸入不能為空! ”的窗口。?程序中可以記錄游戲的歷史記錄。如果在規(guī)定的時(shí)間內(nèi),玩家沒有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“對(duì)不起,你失敗了”的窗口。在結(jié)束本輪游戲后,如果玩家想繼續(xù)游
5、戲,則可點(diǎn)擊“發(fā)牌”按鈕即可重新發(fā)牌,開始下一 輪的游戲;如果玩家想結(jié)束游戲,則可點(diǎn)擊“結(jié)束”按鈕即可結(jié)束游戲二、系統(tǒng)需求分析2.12.1系統(tǒng)目標(biāo)使用所學(xué)知識(shí)制作一個(gè)基于java的24點(diǎn)游戲。2.22.2游戲需求游戲界面需求:設(shè)計(jì)良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的背景色 是綠色,盡量降低玩家游戲時(shí)的用眼疲勞,最大化的為玩家?guī)硎孢m的娛樂環(huán)境。游戲形狀需求:根據(jù)數(shù)字顏色的不同,顯示不同的紙牌。鼠標(biāo)處理事件需求:通過點(diǎn)擊菜單欄中對(duì)應(yīng)的菜單項(xiàng),可以實(shí)現(xiàn)游戲開始、結(jié)束、數(shù)字的驗(yàn)算 及其他游戲選擇等功能。2.32.3開發(fā)環(huán)境MyEclipse , windowbuilder三、系
6、統(tǒng)總體設(shè)計(jì)3.13.1系統(tǒng)的功能模塊劃分圖一系統(tǒng)功能圖3.23.2系統(tǒng)流程圖圖二系統(tǒng)流程圖四、系統(tǒng)詳細(xì)設(shè)計(jì)4.14.1具體的設(shè)計(jì)步驟如下:??1)在對(duì)話框中添加 4個(gè)圖像(分別用于四張撲克牌),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)行重命名。?2) 根據(jù)流程圖在類的原文件中逐一添加實(shí)現(xiàn)各個(gè)模塊其功能所需要的各種函數(shù),并添加相應(yīng)的源代碼,同時(shí)在頭文件中添加對(duì)各種函數(shù)及變量的聲明。?
7、3) 對(duì)編譯好的程序進(jìn)行保存, 開始進(jìn)行調(diào)試,邊調(diào)試邊根據(jù)報(bào)錯(cuò)對(duì)原程序進(jìn)行修改,直到 程序不在報(bào)錯(cuò)為止。4.24.2界面設(shè)計(jì)表1控件類型、ID及相關(guān)說明對(duì)象變量名Caption或說明靜態(tài)文本Label耗時(shí)標(biāo)志靜態(tài)文本Label-1第一張圖靜態(tài)文本Label-2第二張圖靜態(tài)文本Label-3第三張圖靜態(tài)文本Label-4第四張圖靜態(tài)文本IblNewLabel輸入算式靜態(tài)文本lblNewLabel-1歷史記錄靜態(tài)文本Label-5選擇難度下拉框comboBox選擇難度表格table歷史記錄編輯框textField輸入計(jì)算滾動(dòng)條progressBar耗時(shí)按鈕btnN ewButt on發(fā)牌按鈕But
8、ton驗(yàn)算按鈕Butto n-1結(jié)束4.34.3 關(guān)鍵功能的實(shí)現(xiàn)(1)發(fā)牌功能的實(shí)現(xiàn)首先,通過 Numberi=rand()%13 。來產(chǎn)生0-9的隨機(jī)數(shù),禾U用該函數(shù)加載了標(biāo)號(hào)110的 1 0張紙牌和一張背景紙牌。 然后運(yùn)行中的以下一段代碼, 即可在圖像框中得到四張鋪開的紙 牌。代碼如下:Random?random=new?Random();r1=random.nextInt(10)+1;(2)計(jì)時(shí)功能的實(shí)現(xiàn) 首先,定義線程類,通過每隔不同的時(shí)間來發(fā)送信息來控制三個(gè)級(jí)別的時(shí)間不同。設(shè)置了 時(shí)間限制,如果時(shí)間超過代表游戲結(jié)束,用戶沒有時(shí)間進(jìn)行思考了,本輪游戲結(jié)束。源代碼如 下:class?My
9、Thread?extends?Thread?boolean?lock=true;JProgressBar?progressBar;JLabel?label_1;JLabel?label_2;JLabel?label_3;JLabel?label_4;JTextField?textField;JButton?button;int?difficulty=0;MyThread(JProgressBar?progressBar,JLabel?label_1,JLabel?label_2,JLabel?label_3,JLa bel?label_4,JTextField?textField,int?di
10、fficulty,JButton?button)gressBar=progressBar;this.label_1=label_1;this.label_2=label_2;this.label_3=label_3;this.label_4=label_4;this.textField=textField;this.difficulty=difficulty;this.button=button;public?void?run()?/?TODO?Auto-generated?method?stub for(int?i=0;icurrenttime-firsttime|time=
11、0) time=(int)?(currenttime-firsttime);correct+;textField.setText();label_1.setIcon(new?ImageIcon(C:zcsWorkspacesMyEclipse?2016?CIkeImage1.jpg);label_16.setIcon(new?ImageIcon(C:UserspuzcsWorkspacesMyEclipse?2016?CIkeImage2.jpg);errupt();progressBar.setValue(0);textField.setEnabled(false);bu
12、tton.setEnabled(false);elseJOptionPane.showMessageDialog(null,? 抱歉,你答錯(cuò)了 ,?Message,JOptionPane.PLAIN_MESSAGE); textField.setText();label_20.setIcon(new?ImageIcon(C:UserszcsWorkspacesMyEclipse?2016?CI pu keImage2.jpg);errupt();progressBar.setValue(0);textField.setEnabled(false);button.setEna
13、bled(false););計(jì)算功能的實(shí)現(xiàn)對(duì)于輸入結(jié)果的計(jì)算,主要是通過int LastPos(CString Str), int FirstPos(CStringStr) ,char FirstF(CString Str) ,int SubCompute(CString Str) , int TotalCompute(CStringStr) 等函數(shù)來來確定輸入的算式的優(yōu)先級(jí)別并且計(jì)算出輸入算式的最終結(jié)果。現(xiàn)摘兩段代碼進(jìn) 行詳細(xì)說明private?static?double?cacComplex(String?str)?,?)if?(str.equals()return?0;(int?cl?=
14、?str.lastIndexOf();if?(cl?=?-1) return?cac(str);int?cr?=?str.indexOf(),?cl);String?left?=?str.substring(0,?cl);String?right?=?str.substring(cr?+?1);String?middle?=?str.substring(cl?+?1,?cr);return?cacComplex(left?+?cac(middle)?+?right);public?static?double?cac(String?str)?if?(str.equals()return?0;in
15、t?ml?=?str.indexOf(*);int?dl?=?str.indexOf(/);if?(ml?=?-1?&?dl?=?-1)? return?cacNoMD(str);int?index?=?ml?=?-1?dl?:?ml;/?4+5*6*7+8String?left?=?str.substring(0,?index);/?4+5String?m1?=?lastNumber(left);left?=?left.substring(0,?left.length()?-?m1.length();String?right?=?str.substring(index?+?1);/?6*7+
16、8String?m2?=?firstNumber(right);/?m2:6right?=?right.substring(m2.length();/?*7+8double?d1?=?Double.parseDouble(m1);double?d2?=?Double.parseDouble(m2);double?tmp?=?0;if?(index?=?ml)? tmp?=?d1?*?d2;?else?if?(index?=?dl)? tmp?=?d1?/?d2;return?cac(left?+?tmp?+?right);private?static?String?lastNumber(Str
17、ing?str)?StringBuilder?sb?=?new?StringBuilder();for?(int?i?=?str.length()?-?1;?i?=?0;?i-)? char?c?=?str.charAt(i);if?(!Character.isDigit(c)?&?c?!=?.)break;sb.append(c);return?sb.reverse().toString();private?static?String?firstNumber(String?str)? StringBuilder?sb?=?new?StringBuilder(); for?(char?c?:?
18、str.toCharArray()? if?(!Character.isDigit(c)?&?c?!=?.) break;sb.append(c);return?sb.toString();private?static?double?cacNoMD(String?str)? double?ret?=?0;StringBuilder?sb?=?new?StringBuilder(); char?sign?=?+;for?(char?c?:?(str?+?+).toCharArray()? if?(!Character.isDigit(c)?&?c?!=?.)? if?(sb.length()?=
19、?0)continue;double?tmp?=?Double.parseDouble(sb.toString(); if?(sign?=?+)?ret?+=?tmp;?else?ret?-=?tmp;sb?=?new?StringBuilder();sign?=?c;?else?sb.append(c);return?ret;括號(hào)匹配功能的實(shí)現(xiàn) 進(jìn)行括號(hào)配對(duì)并優(yōu)先進(jìn)行括號(hào)內(nèi)運(yùn)算: private?static?double?kuohao(String?str) Stack?stack?=new?Stack();for(int?i=0;i= 0; i-) char c = str.charAt
20、(i);if (!Character.isDigit(c) & c != .) break;sb.append(c);return sb.reverse().toString();private static String firstNumber(String str) StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray() if (!Character.isDigit(c) & c != .) break;sb.append(c);return sb.toString();private static d
21、ouble cacNoMD(String str) double ret = 0;StringBuilder sb = new StringBuilder(); char sign = +;for (char c : (str + +).toCharArray() if (!Character.isDigit(c) & c != .) if (sb.length() = 0) continue;double tmp = Double.parseDouble(sb.toString(); if (sign = +) ret += tmp; else ret -= tmp;sb = new Str
22、ingBuilder();sign = c; else sb.append(c);return ret;private static double kuohao(String str)Stack stack =new Stack(); for(int i=0;icurrenttime-firsttime|time=0)correct+;textField.setText();label_1.setIcon(new2016 CIpukeImage1.jpg);label_2.setIcon(new2016 CIpukeImage2.jpg);label_3.setIcon(new2016 CIp
23、ukeImage1.jpg);label_4.setIcon(new2016 CIpukeImage2.jpg);errupt();ImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorkspacesMyEclipseMessage,JOptionPane.PLAIN_MESSAGE); textField.setText(); label_1.set
24、Icon(new 2016 CIpukeImage1.jpg);label_2.setIcon(new2016 CIpukeImage2.jpg);label_3.setIcon(new2016 CIpukeImage1.jpg);label_4.setIcon(new2016 CIpukeImage2.jpg);ImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorkspacesMyEclipseImageIcon(C:UserszcsWorks
25、pacesMyEclipsetime=(int) (currenttime-firsttime);progressBar.setValue(0);textField.setEnabled(false);button.setEnabled(false);elseJOptionPane.showMessageDialog(null, 抱 歉 , 你 答 錯(cuò) 了 errupt();progressBar.setValue(0);textField.setEnabled(false);button.setEnabled(false););button.setBounds(307,
26、228, 68, 21);button.setFont(new Font( 宋體 , Font.PLAIN, 15);contentPane.add(button);JButton button_1 = new JButton(u7ED3u675Fu6E38u620F);button_1.setBounds(379, 228, 105, 21);button_1.addMouseListener(new MouseAdapter() Overridepublic void mouseClicked(MouseEvent e) /輸入數(shù)據(jù)庫 if(total!=0)Connection conn
27、=null;PreparedStatement pstmt=null;trypstmt=conn.prepareStatement(insert into record values(?, ?, ?, ?); pstmt.setInt(1, total);pstmt.setInt(2, correct);pstmt.setInt(3, difficulty);pstmt.setInt(4, time);pstmt.executeUpdate(); catch(ClassNotFoundException e1)e1.printStackTrace(); catch(SQLException e
28、1)e1.printStackTrace();finally try pstmt.close(); conn.close();catch(SQLException e1)e1.printStackTrace();MyFrame frame = new MyFrame(); frame.setVisible(true);setVisible(false); if(thread!=null&thread.isAlive()=true) errupt(););button_1.setFont(new Font( 宋體 , Font.PLAIN, 15); contentPane.
29、add(button_1);JLabel lblNewLabel = new JLabel(u8F93u5165u7B97u5F0FuFF1A); lblNewLabel.setBounds(102, 227, 75, 21);lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); lblNewLabel.setForeground(Color.WHITE);lblNewLabel.setFont(new Font( 宋體, Font.PLAIN, 15); contentPane.add(lblNewLabel);scrollPa
30、ne = new JScrollPane(); scrollPane.setBounds(495, 197, 215, 108);contentPane.add(scrollPane);final String columnNames= 題數(shù),正確率 ,難度, 最短時(shí)間 ; /數(shù)據(jù)庫輸出Object data; data=new Object54; Connection conn=null; Statement stmt=null;ResultSet rs=null;trystmt=conn.createStatement(); rs=stmt.executeQuery(select * fr
31、om record);int recordx=0; while(rs.next() datarecordx0=rs.getString(total);datarecordx1=String.valueOf(Float.parseFloat(rs.getString(correct)/Float.parseFloat(rs.get String(total);if(Integer.valueOf(rs.getString(difficulty)=0) datarecordx2= 初級(jí) ;else if(Integer.valueOf(rs.getString(difficulty)=1) dat
32、arecordx2= 中級(jí) ;else if(Integer.valueOf(rs.getString(difficulty)=2) datarecordx2= 高級(jí) ;/datarecordx2=rs.getString(difficulty); if(Integer.valueOf(rs.getString(time)=0) datarecordx3=null;elsedatarecordx3=String.valueOf(Integer.valueOf(rs.getString(time)/1000); recordx=(+recordx)%5;catch(ClassNotFoundEx
33、ception e)e.printStackTrace();catch(SQLException e)e.printStackTrace();finallytryrs.close();stmt.close();conn.close();catch(SQLException e)e.printStackTrace();table = new JTable(data,columnNames);scrollPane.setViewportView(table);JLabel lblNewLabel_1 = new JLabel(u5386u53F2u7EAAu5F55:); lblNewLabel_
34、1.setForeground(Color.WHITE);lblNewLabel_1.setBounds(494, 153, 75, 40);contentPane.add(lblNewLabel_1);comboBox = new JComboBox(); comboBox.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) difficulty=comboBox.getSelectedIndex(););comboBox.setBackground(Color.WHITE);comboBo
35、x.setModel(new DefaultComboBoxModel(new String u521Du7EA7, u4E2Du7EA7, u9AD8u7EA7);comboBox.setBounds(494, 69, 193, 29);contentPane.add(comboBox);JLabel label_5 = new JLabel(u9009u62E9u96BEu5EA6:);label_5.setForeground(Color.WHITE);label_5.setBounds(494, 27, 75, 40);contentPane.add(label_5);class MyThread extends Thread boolean lock=true;JProgressBar progressBar;JLabel label_1;JLabel label_2;JLabel label_3;JLabel
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DBJ04-T488-2025 《綠道建設(shè)標(biāo)準(zhǔn)》
- 人教版(2019) 必修第一冊(cè) Unit 5 Languages Around the World Reading and thinking 課件
- Brand KPIs for neobanking Aspiration in the United States-英文培訓(xùn)課件2025.4
- 汽車傳感器與檢測技術(shù)電子教案:萬用表檢測傳感器故障的方法
- 兩大主流資本結(jié)構(gòu)理論概述
- 梅州市房地產(chǎn)市場專題調(diào)研報(bào)告
- 單位人員怎樣管理制度
- 培訓(xùn)學(xué)校規(guī)則管理制度
- 中考地理復(fù)習(xí)教案專題三 自然地理要素之間的相互聯(lián)系-綜合思維
- 從化夏天拓展活動(dòng)方案
- 化工企業(yè)安全管理評(píng)估手冊(cè) 依據(jù)化工過程安全管理導(dǎo)則AQ3034-2022
- 四年級(jí)如何進(jìn)行有效期末復(fù)習(xí)課件
- 北京開放大學(xué)《集裝箱班輪運(yùn)輸業(yè)務(wù)與法律》終結(jié)性考試復(fù)習(xí)題庫(附答案)
- DB32/T 4700-2024 蓄熱式焚燒爐系統(tǒng)安全技術(shù)要求
- 腫瘤醫(yī)院推廣方案
- 公路混凝土橋梁火災(zāi)后安全性能評(píng)定技術(shù)規(guī)程
- 公路工程安全風(fēng)險(xiǎn)辨識(shí)與防控手冊(cè)
- 藥品共線生產(chǎn)質(zhì)量風(fēng)險(xiǎn)管理指南
- 海南大學(xué)本科畢業(yè)論文正文范文
- XX跨境電商公司運(yùn)營人員晉升及淘汰制度方案
- 構(gòu)建中學(xué)人工智能教育的教學(xué)計(jì)劃
評(píng)論
0/150
提交評(píng)論