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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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 "開(kāi)局", "棋盤(pán)","模式", 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)方法實(shí)現(xiàn)電腦下子,并先通過(guò)方法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:計(jì)算機(jī)走棋方法computerDo測(cè)試通過(guò)方法 computerDo實(shí)現(xiàn)電腦下子的思想public void computerDo(int width,int height) int max_black,max_white,max_temp,max=0; setisOdd(true); System.out.println("計(jì)算機(jī)走棋 ."); 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)畫(huà)棋子方法 draw的測(cè)試public void draw(Graphics g, int i, int j, int v) int x = 20 * i+20; int y = 20 * j+20; /畫(huà)

16、棋盤(pán) if(i!=width && j!=height) g.setColor(Color.white); g.drawRect(x,y,20,20); /畫(huà)黑色棋子 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); /畫(huà)白色棋子 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)的點(diǎn)擊事件,構(gòu)造方法mousePressed實(shí)現(xiàn)鼠標(biāo)的點(diǎn)擊來(lái)實(shí)現(xiàn)下棋的動(dòng)作。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)對(duì)當(dāng)前棋子各個(gè)位置的判斷來(lái)得出是否勝負(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黑盒測(cè)試軟件黑盒測(cè)試也是軟件測(cè)試的主要方法之一,也可以稱(chēng)為功能測(cè)試、數(shù)據(jù)驅(qū)動(dòng)測(cè)試或基于規(guī)格說(shuō)明的測(cè)試。測(cè)試者不了解程序的內(nèi)部情況,只知道程序的輸入、輸出和系統(tǒng)的功能,這是從用戶(hù)的角度針對(duì)軟件界面、功能及外部結(jié)構(gòu)進(jìn)行測(cè)試,而不考慮程序內(nèi)部邏輯結(jié)構(gòu)。軟件黑盒測(cè)試法注重于

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

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

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

23、碼的修改實(shí)現(xiàn)對(duì)游戲棋盤(pán)大小的規(guī)格控制選擇,新添規(guī)格30*20格和40*30格模式,讓博弈者盡展各自高超棋藝。2.在人機(jī)對(duì)戰(zhàn)的根底上新增人人對(duì)戰(zhàn)模式,以方便人與人之間棋藝博弈的樂(lè)趣讓更多的愛(ài)好五子棋的玩家參與進(jìn)來(lái)。4.6.1游戲改良1. 在菜單中新加棋盤(pán)選項(xiàng),再在模式中新增規(guī)格30*20格和40*30格模式實(shí)現(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在菜單中新加模式選項(xiàng),新增人人對(duì)戰(zhàn)模式if(arg.equals("人人對(duì)弈") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); 4.7回歸測(cè)試對(duì)修改后的游戲版本執(zhí)行回歸測(cè)試用例操作預(yù)期結(jié)果測(cè)試結(jié)果用例1選擇不同規(guī)格棋盤(pán),能否正常運(yùn)行能正常運(yùn)行Pass用例2選擇人人對(duì)戰(zhàn),

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

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

28、 劉群策  LoadRunner和軟件工程性能測(cè)試 M 機(jī)械工業(yè)出版社 2022年 4 朱少民 軟件測(cè)試方法和技術(shù) M 清華大學(xué)出版社  2005年 5 鄭人杰  軟件測(cè)試 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類(lèi)的一個(gè)實(shí)例對(duì)象cf,*并啟動(dòng)屏幕顯示顯示該實(shí)例對(duì)象。*/public class FiveChessAppletDemo public static void main(String args) ChessFrame cf = new ChessFrame(); cf.show();/*類(lèi)ChessFrame主要功能是創(chuàng)立五子棋游戲主窗體和菜單*/class Ches

30、sFrame extends JFrame implements ActionListener private String strsize="20x15","30x20","40x30"private String strmode="人機(jī)對(duì)弈","人人對(duì)弈"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 "開(kāi)局", "棋盤(pán)","模式", 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 = "棋盤(pán)") JMenu jm = new JMenu("棋盤(pán)"); 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)造五子棋游戲的菜單項(xiàng)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)造五子棋游戲的單項(xiàng)選擇按鈕式菜單項(xiàng)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("人機(jī)對(duì)弈") this.checkcomputer=true; this.iscomputer=true; cm=ne

44、w ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人人對(duì)弈") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponent

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

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

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); /按照棋盤(pán)模式構(gòu)建棋盤(pán)大小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)識(shí)符public boolean getisOdd() return this.isOdd;/設(shè)置交換棋手的標(biāo)識(shí)符public void setisOdd(boolean isodd) if(isodd) this.isOdd=true; else t

49、his.isOdd=false;/獲取某棋盤(pán)方格是否有棋子的標(biāo)識(shí)值public boolean getisExist() return this.isExist;/獲取棋盤(pán)寬度public int getWidth() return this.width;/獲取棋盤(pán)高度public int getHeight() return this.height;/獲取棋盤(pán)模式public int getModeChess() return this.modeChess;/獲取棋盤(pán)方格上棋子的信息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;/計(jì)算棋盤(pán)上某一方格上八個(gè)方向棋子的最大值,/這八個(gè)方向分別是:左、右、上、下、左上、左下、右上、右下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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論