軟件測試課程設(shè)計_第1頁
軟件測試課程設(shè)計_第2頁
軟件測試課程設(shè)計_第3頁
軟件測試課程設(shè)計_第4頁
軟件測試課程設(shè)計_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、word 軟件測試小論文題目:五子棋的開發(fā)與測試 班 級: 12計算機科學(xué)與技術(shù)特色本2班 小組成員: 劉文志18、劉學(xué)19、朱和中 51 完成日期: 2022.4.18 指導(dǎo)教師: 錢 麗 .word摘 要五子棋游戲不僅能增強思維能力,提高記憶力,而且富含哲理,有助于修身養(yǎng)性。既有“場的概念,亦有“點的連接,是古今哲理的結(jié)晶。因此,開發(fā)出一款簡單實用的單機版五子棋軟件很有意義。 本論文分析了五子棋游戲的游戲規(guī)那么,設(shè)計了游戲算法,并選擇eclipse作為該軟件的開發(fā)平臺,實現(xiàn)了五子棋的多種對戰(zhàn)模式,既可人與人對戰(zhàn),也可人與電腦對戰(zhàn)。還實現(xiàn)了,自定義棋盤行列數(shù)。本文將從開發(fā)環(huán)境的安裝

2、,到五子棋的功能分析與設(shè)計,到各功能模塊的實現(xiàn),逐步向您展現(xiàn)五子棋的實現(xiàn)過程。經(jīng)測試,本游戲系統(tǒng)功能齊全,能平穩(wěn)運行,具有較強的使用價值。 關(guān)鍵詞:五子棋;思考算法;多人對戰(zhàn);人機對戰(zhàn); .word目 錄1.引言11.1編寫目的11.2背景12.單機版五子棋系統(tǒng)介紹22.1平臺簡介22.2游戲概述23.基于Java的五子棋游戲的設(shè)計33.1游戲模塊33.1.1 開局、退出、棋盤33.1.2 模式欄43.2游戲流程圖44.軟件測試54.1測試的目的54.2測試的方法54.3白盒測試64.3.1測試用例74.4黑盒測試104.5測試游戲存在的問題124.6游戲缺乏的解決方案124.6.1

3、游戲改良后的代碼124.7回歸測試135.總結(jié)15參考文獻16附錄17.word1.引言1.1編寫目的根據(jù)測試方案報告,對軟件進行測試,詳細(xì)記錄測試過程,以對軟件的質(zhì)量進行評價,為軟件設(shè)計人員提供BUG依據(jù),故做產(chǎn)生測試分析報告。1.2背景為了使游戲更加完善,使玩家有更好的游戲體驗,針對游戲出現(xiàn)的一些問題,做出修復(fù),使游戲更加生動,符合玩家的游戲習(xí)慣。2.單機版五子棋系統(tǒng)介紹2.1平臺簡介Eclipse 是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組效勞,用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具J

4、ava Development Kit,JDK。2.2游戲概述該游戲軟件采用 Java 語言設(shè)計,在 Windows 系統(tǒng)為玩家提供五子棋游戲人 機對戰(zhàn)的根本功能。玩家可以通過鼠標(biāo)在棋盤的相應(yīng)位置下子,一方為白色,另 一方為黑色,先下的為黑子主場。游戲過程中,只要有一人先連成五個棋子, 不管橫、豎或斜,就會在屏幕上顯示是誰贏了比賽,也可以是平局收場,從而可 以進行下一場比賽。在比賽過程中,如果一方需要悔棋,先得通過對手的同意才可以。3.基于Java的五子棋游戲的設(shè)計 本工程中五子棋主要包含兩大主要模塊,如以下圖3.1a所示。第一個模塊為主要模塊,用于實現(xiàn)五子棋的游戲功能。第二個模塊為輔助模塊,

5、用于實現(xiàn)五子棋的相關(guān)輔助設(shè)置。游戲主界面如圖3.1b。五子棋游戲視圖幫助塊游戲模塊圖3.1a 主要模塊圖3.1b游戲主界面3.1游戲模塊該模塊實現(xiàn)游戲的主要功能,共包含兩個小模塊,如以下圖3.2a所示。第一個模塊為棋盤欄,實現(xiàn)游戲玩家點擊下棋的功能。第二個小模塊為模式欄,對下棋的方式進行選擇。游戲菜單如圖3.2b所示。游戲模塊模式欄開局、退出、棋盤欄圖3.2a 游戲模塊圖3.2b 游戲菜單 開局、退出、棋盤實現(xiàn)可視化的開局與退出功能,以及棋盤選擇對戰(zhàn)模式。圖3.3 開局、退出、棋盤3.1.2 模式欄模式欄,主要實現(xiàn)游戲過程中的各種控制功能,包括人人、人機實例化對戰(zhàn)模式。圖3.4 模式選擇是電腦

6、下子電腦是否下子是電腦下子電腦是否下子否游戲結(jié)束是白子或黑子是否有5個連成一線否游戲者是否下子否游戲者下子模式選擇開局3.2游戲流程圖4.軟件測試4.1測試的目的軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f,軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果,并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤的過程。設(shè)計測試的目標(biāo)是想以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。如果成功地實施了測試,就能夠發(fā)現(xiàn)軟件中的錯誤。測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。此外,實施測試收集到的測試結(jié)果數(shù)據(jù)為可靠性分析提

7、供了依據(jù)。而測試的目的就是在軟件投入生產(chǎn)性運行之前,盡可能地發(fā)現(xiàn)軟件中的錯誤。4.2測試的方法常見的軟件測試階段的工作主要分為單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試四個步驟,測試方法有黑盒測試和白盒測試兩種方法:黑盒測試已經(jīng)知道產(chǎn)品應(yīng)該具有的功能,可以通過測試來檢驗是否每個功能都正常;白盒測試如果知道產(chǎn)品內(nèi)部工作過程,可以通過測試來檢驗內(nèi)部動作是否按照說明書的規(guī)定正常進行。本游戲測試的主要方法包括黑盒測試和白盒測試,由小組人員通過自己親自去玩,然后觀察游戲在運行過程中,所需要實現(xiàn)的功能有沒有實現(xiàn),以及在測試過程中有沒有發(fā)現(xiàn)新的問題記錄在案。然后根據(jù)測試后所產(chǎn)生的一系列的問題,有本組負(fù)責(zé)編碼人員

8、對游戲進行改良,然后在進行測試,就這樣重復(fù)的進行這樣的工作,直到游戲的運行與預(yù)想時的狀況根本一致時,才算通過測試。圖4.1 完整游戲圖4.3白盒測試通過程序的源代碼進行測試而不使用用戶界面。這種類型的測試需要從代碼句法發(fā)現(xiàn)內(nèi)部代碼在算法,溢出,路徑,條件等等中的缺點或者錯誤,進而加以修正,這一方法是把測試對象看作一個翻開的盒子,測試人員依據(jù)程序內(nèi)部邏輯結(jié)構(gòu)相關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試,通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。用軟件白盒測試產(chǎn)生的測試用例能夠:1.保證一個模塊中的所有獨立路徑至少被使用一次;2.對所有邏輯值均需測試true和fa

9、lse;3.在上下邊界及可操作范圍內(nèi)運行所有循環(huán);4.檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。 4.3.1測試用例1用例1:因為類ChessFrame主要功能是創(chuàng)立五子棋游戲主窗體,所以對其進行測試,看其構(gòu)造五子棋游戲的主窗體的方法是否正確。class ChessFrame extends JFrame implements ActionListener private String strsize="20x15","30x20","40x30"private String strmode="人機對弈","人人對

10、弈"public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPanel mp;public ChessFrame() this.setTitle("五子棋游戲"); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,"Center"); t

11、his.setResizable(false); this.addWindowListener(new ChessWindowEvent(); MapSize(20,15); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戲"); mbar.add(makeMenu(gameMenu, new Object "開局", "棋盤","模式", null, "退出" , thi

12、s); JMenu lookMenu =new JMenu("視圖"); mbar.add(makeMenu(lookMenu,new Object "Metal","Motif","Windows" ,this); JMenu helpMenu = new JMenu("幫助"); mbar.add(makeMenu(helpMenu, new Object "關(guān)于" , this);2用例2:用play(int x,int y)方法實現(xiàn)電腦下子,并先通過方法readypl

13、ay(int x,int y)判斷某坐標(biāo)位置是否可下棋子。public void readyplay(int x,int y) if(badxy(x,y) return; if (chessExist(x,y) return; this.arrMapShowxy=3;public void play(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) this.isExist=true; return; else this.isExist=false; if(getisOdd() setisOdd(false); this.arrMapS

14、howxy=1; else setisOdd(true); this.arrMapShowxy=2; 3用例3:計算機走棋方法computerDo測試通過方法 computerDo實現(xiàn)電腦下子的思想public void computerDo(int width,int height) int max_black,max_white,max_temp,max=0; setisOdd(true); System.out.println("計算機走棋 ."); for(int i = 0; i <= width; i+) for(int j = 0; j <= he

15、ight; j+) if(!chessExist(i,j) max_white=checkMax(i,j,2); max_black=checkMax(i,j,1); max_temp=Math.max(max_white,max_black); if(max_temp>max) max=max_temp; this.x=i; this.y=j; 4用例4:根據(jù)提供的棋子信息顏色、坐標(biāo)畫棋子方法 draw的測試public void draw(Graphics g, int i, int j, int v) int x = 20 * i+20; int y = 20 * j+20; /畫

16、棋盤 if(i!=width && j!=height) g.setColor(Color.white); g.drawRect(x,y,20,20); /畫黑色棋子 if(v = 1 ) g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.black); g.fillOval(x-8,y-8,16,16); /畫白色棋子 if(v = 2 ) g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.white);

17、g.fillOval(x-8,y-8,16,16); if(v =3) g.setColor(Color.cyan); g.drawOval(x-8,y-8,16,16); 5用例5:響應(yīng)鼠標(biāo)的點擊事件,構(gòu)造方法mousePressed實現(xiàn)鼠標(biāo)的點擊來實現(xiàn)下棋的動作。public void mousePressed(MouseEvent evt) int x = (evt.getX()-10) / 20; int y = (evt.getY()-10) / 20; System.out.println(x+" "+y); if (evt.getModifiers()=Mou

18、seEvent.BUTTON1_MASK) cm.play(x,y); System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()xy); repaint(); if(cm.judgeSuccess(x,y,cm.getisOdd() cm.showSuccess(this); evt.consume(); ChessFrame.iscomputer=false;6用例6:構(gòu)造方法judgeSuccess(int x,int y,boolean isodd)對當(dāng)前棋子各個位置的判斷來得出是否勝負(fù)。public boolea

19、n judgeSuccess(int x,int y,boolean isodd) int num=1; int arrvalue; int x_temp=x,y_temp=y; if(isodd) arrvalue=2; else arrvalue=1; int x_temp1=x_temp,y_temp1=y_temp; 4.4黑盒測試軟件黑盒測試也是軟件測試的主要方法之一,也可以稱為功能測試、數(shù)據(jù)驅(qū)動測試或基于規(guī)格說明的測試。測試者不了解程序的內(nèi)部情況,只知道程序的輸入、輸出和系統(tǒng)的功能,這是從用戶的角度針對軟件界面、功能及外部結(jié)構(gòu)進行測試,而不考慮程序內(nèi)部邏輯結(jié)構(gòu)。軟件黑盒測試法注重于

20、測試軟件的功能需求,主要試圖發(fā)現(xiàn)以下幾類錯誤:1功能不正確或遺漏;2界面錯誤;3數(shù)據(jù)庫訪問錯誤;4性能錯誤;5初始化和終止錯誤等。測試方法可以分為以下幾種:等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅(qū)動法、正交試驗設(shè)計法、功能圖法等。從理論上講,軟件黑盒測試只有采用窮舉輸入測試,把所有可能的輸入都作為測試情況考慮,才能查出程序中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有合法的輸入,而且還要對那些不合法但可能的輸入進行測試。這樣看來,完全測試是不可能的,所以我們要進行有針對性的測試,通過制定測試案例指導(dǎo)測試的實施,保證軟件測試有組織、按步驟,以及有方案地進行。軟件黑盒

21、測試行為必須能夠加以量化,才能真正保證軟件質(zhì)量,而測試用例就是將測試行為具體量化的方法之一。五子棋游戲測試用例如下表所示:用例操作預(yù)期結(jié)果實際結(jié)果用例1能否在不同版本的eclipese中運行該游戲 游戲能夠在設(shè)計該游戲版本及以上中正常運行Pass用例2運行時能否正常顯示主界面運行時能正常顯示主界面Pass用例3鼠標(biāo)單擊菜單開始,是否可以運行游戲可以運行游戲Pass用例4鼠標(biāo)單擊棋盤,是否會有棋子落于該位置棋子落于鼠標(biāo)單擊位置Pass用例5當(dāng)人下子出現(xiàn)“活三、“沖四,電腦是否會下子堵截電腦會下子阻擋Pass用例6屢次游戲測試:在人黑棋沒有出現(xiàn)“活三、“沖四的情況下,電腦白棋落子是否存在規(guī)律黑棋沒

22、有出現(xiàn)“活三、“沖四的情況下,電腦白棋隨機落子,不存在規(guī)律Pass用例7進行對戰(zhàn)時,按照規(guī)那么下棋能否正常輸贏可以正常輸贏Pass用例8判斷在橫線上5子能否獲得勝利可以Pass用例9判斷在豎線上5子能否獲得勝利可以Pass用例10判斷在斜線上5子能否獲得勝利可以Pass4.5測試游戲存在的問題1.通過小組以外人員的游戲測試發(fā)現(xiàn),由于棋盤大小問題,使得可能導(dǎo)致有時棋子滿格也沒有分出勝負(fù),這樣,就很難顯示博弈者的水平。2.小組以外人員的游戲測試后建議認(rèn)為,我們所設(shè)計的五子棋游戲只能實現(xiàn)人機博弈,不能實現(xiàn)人與人之間的博弈,這樣很難讓更多的人一展他們的高超棋藝。4.6游戲缺乏的解決方案1.通過對后臺代

23、碼的修改實現(xiàn)對游戲棋盤大小的規(guī)格控制選擇,新添規(guī)格30*20格和40*30格模式,讓博弈者盡展各自高超棋藝。2.在人機對戰(zhàn)的根底上新增人人對戰(zhàn)模式,以方便人與人之間棋藝博弈的樂趣讓更多的愛好五子棋的玩家參與進來。4.6.1游戲改良1. 在菜單中新加棋盤選項,再在模式中新增規(guī)格30*20格和40*30格模式實現(xiàn)代碼如下:public ChessModel(int modeChess) this.isOdd=true; if(modeChess = 1) PanelInit(20, 15, modeChess); if(modeChess = 2) PanelInit(30, 20, modeCh

24、ess); if(modeChess = 3) PanelInit(40, 30, modeChess);private void PanelInit(int width, int height, int modeChess) this.width = width; this.height = height; this.modeChess = modeChess; arrMapShow = new intwidth+1height+1; for(int i = 0; i <= width; i+) for(int j = 0; j <= height; j+) arrMapShow

25、ij = -5; 2在菜單中新加模式選項,新增人人對戰(zhàn)模式if(arg.equals("人人對弈") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); 4.7回歸測試對修改后的游戲版本執(zhí)行回歸測試用例操作預(yù)期結(jié)果測試結(jié)果用例1選擇不同規(guī)格棋盤,能否正常運行能正常運行Pass用例2選擇人人對戰(zhàn),

26、能否正常運行能正常運行Pass用例3選擇不同規(guī)格棋盤,對其他功能正常運行是否產(chǎn)生影響沒有影響Pass用例4選擇人人對戰(zhàn)模式,對其他功能正常運行是否產(chǎn)生影響沒有影響Pass5.總結(jié) 在測試階段,一系列的測試方案都是為了“破壞已經(jīng)建造好的軟件系統(tǒng)而特地設(shè)計的,它的存在是為了竭力證明程序中的錯誤不能按照預(yù)定要求正確工作。軟件測試從不同的角度出發(fā)會派生出兩種不同的測試原那么,從用戶的角度出發(fā),就是希望通過軟件測試能充分暴露軟件中存在的問題和缺陷,從而考慮是否可以接受該產(chǎn)品,從開發(fā)者的角度出發(fā),就是希望測試能說明軟件產(chǎn)品不存在錯誤,已經(jīng)正確地實現(xiàn)了用戶的需求,確立人們對軟件質(zhì)量的信心。  通過

27、此次軟件測試的課程設(shè)計,深刻學(xué)習(xí)掌握了軟件測試和軟件測試過程的根本方法和根本技術(shù),關(guān)于黑盒、白盒的測試用例的設(shè)計,也進行了認(rèn)真學(xué)習(xí)研究,從而進一步提高了自己在程序上的編寫能力,以及一些之前未觸及的問題。 總之,收獲頗豐,增強了自己動手以及團隊合作的能力。付出才會有回報,實踐才能出真知。為即將踏上社會的自己又做了一份理論和實踐的準(zhǔn)備。參考文獻1 謝希仁.  計算機網(wǎng)絡(luò)第五版M. 北京:電子工業(yè)出版社,2022年2月 2 胡小強   計算機網(wǎng)絡(luò)M 北京:北京郵電大學(xué)出版社2005年1月 3

28、 劉群策  LoadRunner和軟件工程性能測試 M 機械工業(yè)出版社 2022年 4 朱少民 軟件測試方法和技術(shù) M 清華大學(xué)出版社  2005年 5 鄭人杰  軟件測試 M 人民郵電出版社 2022年 附錄/Java編程:五子棋游戲源代碼import java.awt.*;import java.awt.event.*;import java.applet.*;import java

29、x.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;/*main方法創(chuàng)立了ChessFrame類的一個實例對象cf,*并啟動屏幕顯示顯示該實例對象。*/public class FiveChessAppletDemo public static void main(String args) ChessFrame cf = new ChessFrame(); cf.show();/*類ChessFrame主要功能是創(chuàng)立五子棋游戲主窗體和菜單*/class Ches

30、sFrame extends JFrame implements ActionListener private String strsize="20x15","30x20","40x30"private String strmode="人機對弈","人人對弈"public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPane

31、l 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.addWindowListener(new ChessWindowEvent(); MapSize(20,15); JMenuBar mbar = new JMenuBa

32、r(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戲"); mbar.add(makeMenu(gameMenu, new Object "開局", "棋盤","模式", null, "退出" , this); JMenu lookMenu =new JMenu("視圖"); mbar.add(makeMenu(lookMenu,new Object "Metal","Motif&

33、quot;,"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 = null; if(parent instanceof JMenu) m = (JMenu)parent; else if(parent inst

34、anceof 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=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;j<strsize

35、.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=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int h=0;h<strmode.

36、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(Object item, Object target) JMenuItem r = null; if(item instanceof Strin

37、g) 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 JRadioButtonMenuItem makeRadioButtonMenuItem( Object item, Object target) J

38、RadioButtonMenuItem 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) r.addActionListener(ActionListener)target); return r; public void M

39、apSize(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 restart() int modeChess = cm.getModeChess(); if(modeChess <= 3 &&

40、; 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 (arg.equals("Windows") UIManager.setLookAndFeel( "com.sun

41、.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.metal.MetalLookAndFeel" ); SwingUtilities.updateComponentTreeUI(

42、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.width=30; this.height=20; cm=new ChessModel(2); MapSize(this.width,this.

43、height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("40x30") this.width=40; this.height=30; cm=new ChessModel(3); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人機對弈") this.checkcomputer=true; this.iscomputer=true; cm=ne

44、w 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(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponent

45、TreeUI(this); if(arg.equals("開局") restart(); if(arg.equals("關(guān)于") JOptionPane.showMessageDialog(this, "五子棋游戲測試版本", "關(guān)于", 0); if(arg.equals("退出") System.exit(0);/*類ChessModel實現(xiàn)了整個五子棋程序算法的核心*/class ChessModel /棋盤的寬度、高度、棋盤的模式如20×15private int width,

46、height,modeChess;/棋盤方格的橫向、縱向坐標(biāo)private int x=0,y=0;/棋盤方格的橫向、縱向坐標(biāo)所對應(yīng)的棋子顏色,/數(shù)組arrMapShow只有3個值:1,2,3,-5,/其中1代表該棋盤方格上下的棋子為黑子,/2代表該棋盤方格上下的棋子為白子,/3代表為該棋盤方格上沒有棋子,/-5代表該棋盤方格不能夠下棋子private int arrMapShow;/交換棋手的標(biāo)識,棋盤方格上是否有棋子的標(biāo)識符private boolean isOdd,isExist;public ChessModel() /該構(gòu)造方法根據(jù)不同的棋盤模式modeChess來構(gòu)建對應(yīng)大小的棋盤

47、public ChessModel(int modeChess) this.isOdd=true; if(modeChess = 1) PanelInit(20, 15, modeChess); if(modeChess = 2) PanelInit(30, 20, modeChess); if(modeChess = 3) PanelInit(40, 30, modeChess); /按照棋盤模式構(gòu)建棋盤大小private void PanelInit(int width, int height, int modeChess) this.width = width; this.height

48、= height; this.modeChess = modeChess; arrMapShow = new intwidth+1height+1; for(int i = 0; i <= width; i+) for(int j = 0; j <= height; j+) arrMapShowij = -5; /獲取是否交換棋手的標(biāo)識符public boolean getisOdd() return this.isOdd;/設(shè)置交換棋手的標(biāo)識符public void setisOdd(boolean isodd) if(isodd) this.isOdd=true; else t

49、his.isOdd=false;/獲取某棋盤方格是否有棋子的標(biāo)識值public boolean getisExist() return this.isExist;/獲取棋盤寬度public int getWidth() return this.width;/獲取棋盤高度public int getHeight() return this.height;/獲取棋盤模式public int getModeChess() return this.modeChess;/獲取棋盤方格上棋子的信息public int getarrMapShow() return arrMapShow;/判斷下子的橫向、縱

50、向坐標(biāo)是否越界private boolean badxy(int x, int y) if(x >= width+20 | x < 0) return true; return y >= height+20 | y < 0;/計算棋盤上某一方格上八個方向棋子的最大值,/這八個方向分別是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j) if(this.arrMapShowij=1 | this.arrMapShowij=2) return true; return false;/判斷該坐標(biāo)位置是否可下棋子public void readyplay(int x,int y) if(badxy(x,y) return; if (chessExist(x,y) return; this.arrMapShowxy=3;/在該坐標(biāo)位置下棋子public void play(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) this.isExist=true; return; else this.isExist=false; if(getisOd

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論