版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、沈陽理工大學(xué)課程設(shè)計專用紙 .15目錄目錄11 問題定義 21.1 游戲需求及功能.22 可行性研究.22.1 項目概述22.2 可行性分析的前提22.2.1 項目的目標(biāo)22.2.2 項目的環(huán)境32.3 可選的方案32.3.1 方案一32.3.2 方案二32.4.2 高層數(shù)據(jù)流圖32.5 經(jīng)濟(jì)可行性32.6 技術(shù)可行性42.7 操作可行性43.1 需求概述43.2 需求模型43.2.1 數(shù)據(jù)模型43.2.2 功能模型53.2.3 行為模型54 總體設(shè)計64.1 系統(tǒng)體系結(jié)構(gòu)64.2 模塊詳細(xì)說明65 詳細(xì)設(shè)計75.1 人機(jī)界面設(shè)計75.2 過程設(shè)計76 測試156.1 白盒測試15圖
2、 6.1 五子棋流程圖156.2 黑盒測試157 結(jié)論166.陳國君等編著.Java2程序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2006161 問題定義 1.1游戲需求及功能 近年來,隨著網(wǎng)絡(luò)的發(fā)展,游戲成為許多人關(guān)注的焦點。與傳統(tǒng)的影音產(chǎn)業(yè)一樣,游戲產(chǎn)業(yè)也是娛樂行業(yè)的一個重要組成部分,基于數(shù)字化的網(wǎng)絡(luò)游戲更讓人們找到了前所未有的感受,并已經(jīng)成為全球互聯(lián)產(chǎn)業(yè)的熱點。五子棋,亦稱“連五子”、“串珠”、“五目”、“五格”等等,日文稱之為“連珠”,英文則稱之為“Gobang”或“Renju”或“FIR(Five In a Row)”,是起源于中國古代的傳統(tǒng)黑白棋種之
3、一,是一種體現(xiàn)民族特色的休閑游戲,同時能較好的鍛煉人的思維。具有廣闊的開發(fā)前景。 五子棋的玩法想必大家都很熟悉了,想辦法把自己的棋子在橫、豎、斜任意一個方向上連續(xù)排滿5個就算贏,本項目實現(xiàn)的五子棋的主要功能是實現(xiàn)不同的對戰(zhàn)模式:人機(jī)對戰(zhàn)和人人對戰(zhàn)兩種模式。 2 可行性研究2.1 項目概述 人工智能是一門正在迅速發(fā)展的新興的,綜合性很強(qiáng)的交叉科學(xué)。它與生物工程、空間技術(shù)一起被并列為二十一世界三大尖端技術(shù)。它的中心任務(wù)是研究如何使計算機(jī)去做那些過去只能靠人的智力才能做的工作。目前各發(fā)達(dá)國家都把人工智能作為重點項目,列入本國的高科技發(fā)展計劃當(dāng)中,投入巨大的人力和物力。計算機(jī)人機(jī)對弈也是其中之一。作為
4、人智能研究的一個重要分支,計算機(jī)博弈是檢驗人工水平的一個重要方面。它的研究為人工智能帶來了很多重要的方法和理論,產(chǎn)生了廣泛的社會影響和學(xué)術(shù)影響。五子棋人機(jī)對弈是計算機(jī)博弈中的一種。研究其計算機(jī)算法,可以讓我們看到人工智能的稚形,也有助于我們?nèi)四X的開發(fā)。五子棋是我國發(fā)明的,研究它可以讓更多的外國人了解五子棋,這有助于我國優(yōu)秀文化的推廣2.2 可行性分析的前提2.2.1 項目的目標(biāo) 此系統(tǒng)為智力游戲,適合于各類游戲愛好者。由于其經(jīng)典性及其游戲的簡單性,各類人士都可以也都愛玩。人們在與電腦對戰(zhàn)享受娛樂的同時,也會體會到自己的智力也會有所提升。2.2.2 項目的環(huán)境編程語言:JAVA操作系統(tǒng):Wind
5、ows 系列開發(fā)工具:Myeclipse2.3 可選的方案2.3.1 方案一 對于五子棋游戲的實現(xiàn),可以將其分為面板類,棋子類,來實現(xiàn)五子棋游戲,二者之間通過棋子落在棋盤上的方法取得聯(lián)系:2.3.2 方案二相比較方案一:方案二將其分為菜單類,鼠標(biāo)響應(yīng)事件類,面板類,實現(xiàn)類這四部分,我們采用的是第二方案2.4 所建議的系統(tǒng)2.4.1 系統(tǒng)說明設(shè)計一五子棋游戲軟件,使之能提供以下功能: 1. 可以選擇不同的棋盤2更改游戲的背景顏色3實現(xiàn)不同的游戲模式;人機(jī)對戰(zhàn)和人人對戰(zhàn)其中,最后五子棋的算法部分功能由我實現(xiàn)。2.4.2 高層數(shù)據(jù)流圖1.1下棋1.2棋盤狀態(tài) 玩 家1 玩 家2 圖 2.1 數(shù)據(jù)流圖
6、2.5 經(jīng)濟(jì)可行性 本系統(tǒng)開發(fā)成本低,不需要過多人員、金錢和特殊要求。2.6 技術(shù)可行性系統(tǒng)現(xiàn)階段的發(fā)展過程中,利用現(xiàn)有人力和物力是完全具備的能力開發(fā)出來的,本系統(tǒng)的實現(xiàn)方法步驟簡單容易,所以本系統(tǒng)的技術(shù)上是完全可行的。a. 在當(dāng)前的限制條件下,該系統(tǒng)的功能目標(biāo)能達(dá)到;b. 利用現(xiàn)有的技術(shù),該系統(tǒng)的功能能實現(xiàn);c. 對開發(fā)人員的數(shù)量和質(zhì)量的要求并說明這些要求因該能滿足;d. 在規(guī)定的期限內(nèi),本系統(tǒng)的開發(fā)能完成。2.7 操作可行性 游戲是由鼠標(biāo)操作,簡單 易上手??刹僮餍詮?qiáng)。 3 需求分析3.1 需求概述(1) 人機(jī)對弈模式:選擇該模式可以實現(xiàn)人與電腦之間的對弈,電腦會智能的選擇該在哪處下子,并
7、會在每次下棋結(jié)束后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家游戲結(jié)束。(2) 人人對弈模式:選擇該模式可以實現(xiàn)人與人之間的對弈,系統(tǒng)會提示哪方先下,然后玩家之間交替的下棋,同樣系統(tǒng)會在下完每次棋后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家游戲結(jié)束。(3) 更換棋盤背景:次功能可以根據(jù)玩家的愛好任意更換棋盤的背景顏色,由于每個人對顏色的喜好不一樣,因此這個功能也是非常必需的。也行更換一種玩家所喜歡的顏色,玩家能發(fā)揮得更好。3.2 需求模型顏色黑色3.2.1 數(shù)據(jù)模型下 棋 棋 子 棋 盤 N 1 白色 大小 圖3.1 實體之間的關(guān)系E-R圖 3.2.2 功能模型(
8、是對2.4.3中數(shù)據(jù)流圖的細(xì)化,要有編號,與前圖對應(yīng))3.2.3 行為模型 4 總體設(shè)計 五子棋游戲4.1 系統(tǒng)體系結(jié)構(gòu) 3.0算法實現(xiàn)模塊 1.0面板模塊 2.0菜單模塊 圖 4.1 五子棋系統(tǒng)結(jié)構(gòu)圖4.2 模塊詳細(xì)說明IPO表系統(tǒng):五子棋游戲模塊: 算法實現(xiàn)編號:3.0作者:李偉 日期:2014/03/06被調(diào)用:調(diào)用:輸入: 輸出: 處理:五子棋算法的實現(xiàn)模塊局部數(shù)據(jù)元素:注釋: 圖4.2 五子棋IPO圖5 詳細(xì)設(shè)計5.1 人機(jī)界面設(shè)計 5.1 五子棋游戲界面5.2 過程設(shè)計package wuziqi;import java.awt.Container;import java.awt.
9、event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;import javax.swing.SwingUtilities;i
10、mport javax.swing.UIManager;/*類ChessFrame主要功能是創(chuàng)建五子棋游戲主窗體和菜單*/class ChessFrame extends JFrame implements ActionListener private String strsize="20x15","30x20","40x30"private String strmode="人機(jī)對弈","人人對弈"public static boolean iscomputer=true,checkcomput
11、er=true;private int width,height;private ChessModel cm;private MainPanel mp;/構(gòu)造五子棋游戲的主窗體public ChessFrame() this.setTitle("五子棋游戲"); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,"Center"); this.setResizable(false); this.addWindowListe
12、ner(new ChessWindowEvent(); MapSize(20,15); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戲"); mbar.add(makeMenu(gameMenu, new Object "開局", "棋盤","模式", null, "退出" , this); JMenu lookMenu =new JMenu("視圖"
13、); mbar.add(makeMenu(lookMenu,new Object "Metal","Motif","Windows" ,this); JMenu helpMenu = new JMenu("幫助"); mbar.add(makeMenu(helpMenu, new Object "關(guān)于" , this);/構(gòu)造五子棋游戲的主菜單public JMenu makeMenu(Object parent, Object items, Object target) JMenu m = n
14、ull; if(parent instanceof JMenu) m = (JMenu)parent; else if(parent instanceof String) m = new JMenu(String)parent); else return null; for(int i = 0; i < items.length; i+) if(itemsi = null) m.addSeparator(); else if(itemsi = "棋盤") JMenu jm = new JMenu("棋盤"); ButtonGroup group=n
15、ew ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;j<strsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if (j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(itemsi = "模式") JMenu jm = new JMenu("模式"); ButtonGroup group=ne
16、w ButtonGroup(); JRadioButtonMenuItem rmenu; for (int h=0;h<strmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(makeMenuItem(itemsi, target); return m;/構(gòu)造五子棋游戲的菜單項public JMenuItem makeMenuItem(O
17、bject item, Object target) JMenuItem r = null; if(item instanceof String) r = new JMenuItem(String)item); else if(item instanceof JMenuItem) r = (JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target); return r;/構(gòu)造五子棋游戲的單選按鈕式菜單項public JRadio
18、ButtonMenuItem makeRadioButtonMenuItem( Object item, Object target) JRadioButtonMenuItem r = null; if(item instanceof String) r = new JRadioButtonMenuItem(String)item); else if(item instanceof JRadioButtonMenuItem) r = (JRadioButtonMenuItem)item; else return null; if(target instanceof ActionListener
19、) r.addActionListener(ActionListener)target); return r; public void MapSize(int w,int h) setSize(w * 20+50 , h * 20+100 ); if(this.checkcomputer) this.iscomputer=true; else this.iscomputer=false; mp.setModel(cm); mp.repaint(); public boolean getiscomputer() return this.iscomputer; public void restar
20、t() int modeChess = cm.getModeChess(); if(modeChess <= 3 && modeChess >= 1) cm = new ChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight(); else System.out.println("u81EAu5B9Au4E49"); public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try if (ar
21、g.equals("Windows") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); else if(arg.equals("Motif") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); else UIManager.setLookAndFeel( "javax.swing.plaf.
22、metal.MetalLookAndFeel" ); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.equals("20x15") this.width=20; this.height=15; cm=new ChessModel(1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("30x20") this.wid
23、th=30; this.height=20; cm=new ChessModel(2); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("40x30") this.width=40; this.height=30; cm=new ChessModel(3); MapSize(this.width,this.height);y SwingUtilities.updateComponentTreeUI(this); if(arg.equals(
24、"人機(jī)對弈") this.checkcomputer=true; this.iscomputer=true; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人人對弈") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess()
25、; MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("開局") restart(); if(arg.equals("關(guān)于") JOptionPane.showMessageDialog(this, "五子棋游戲測試版本", "關(guān)于", 0); if(arg.equals("退出") System.exit(0); 6 測試6.1 白盒測試 1.白盒測試:白盒測試的前提是可以把程序看成裝在一個透明的白盒子里,測試者完全知道程序的結(jié)構(gòu)和處理算法。這種方法按照程序內(nèi)部的邏輯測試程序,檢測程序中的主要執(zhí)行通路是否能按預(yù)定的要求正確工作。本次課程設(shè)計采用語句覆蓋的方法: 圖 6.1 五子棋流程圖6.2 黑盒測試 1.黑盒測試:黑盒測試把程序看作一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。也就是說,黑盒測試是在程序接口進(jìn)行的測
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運動頭盔內(nèi)部結(jié)構(gòu)對安全性能的影響考核試卷
- 如何選擇適合的嵌入式開發(fā)平臺試題及答案
- 公路建設(shè)項目的生命周期管理試題及答案
- 藥用純化水設(shè)備與系統(tǒng)設(shè)計考核試卷
- 行政組織理論變革的動態(tài)分析及2025年試題及答案
- 航空員工培訓(xùn)與發(fā)展考核試卷
- 油砂資源綜合利用考核試卷
- 應(yīng)對突發(fā)情況的公路工程試題及答案
- 數(shù)據(jù)庫技術(shù)文檔的重要性試題及答案
- 信息系統(tǒng)監(jiān)理師考試各省市情況試題及答案
- 2023年《畜牧獸醫(yī)綜合知識復(fù)習(xí)題及答案》
- 八年級語文下冊(部編版) 第四單元 經(jīng)典演講-單元主題閱讀訓(xùn)練(含解析)
- 2024新高考英語1卷試題及答案(含聽力原文)
- 2023-2024學(xué)年譯林版四年級英語下冊Unit8《How are you?》單元檢測卷(含聽力及答案)
- DL/T 5352-2018 高壓配電裝置設(shè)計規(guī)范
- 養(yǎng)老院食物中毒應(yīng)急預(yù)案
- 國家開放大學(xué)《消費者行為學(xué)》形考任務(wù)實訓(xùn)(六選一)參考答案
- AQ∕T 7009-2013 機(jī)械制造企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化規(guī)范
- JTG-C30-2002公路工程水文勘測設(shè)計規(guī)范-PDF解密
- 2024年廣東廣州越秀區(qū)小升初考試語文試卷含答案
- 慢性病照護(hù)智慧樹知到期末考試答案2024年
評論
0/150
提交評論