軟件工程-2及軟件工程課設六子棋_第1頁
軟件工程-2及軟件工程課設六子棋_第2頁
軟件工程-2及軟件工程課設六子棋_第3頁
軟件工程-2及軟件工程課設六子棋_第4頁
軟件工程-2及軟件工程課設六子棋_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

程序編碼習題【4-1】從下列關于模塊化程序設計的敘述中選出5條正確的敘述。①程序設計比較方便,但比較難以維護。②便于由多個人分工編制大型程序。③軟件的功能便于擴充。④程序易于理解,也便于排錯。⑤在主存儲器能夠容納得下的前提下,應使模塊盡可能大,以便減少模塊的個數。⑥模塊之間的接口叫做數據文件。⑦只要模塊之間的接口關系不變,各模塊內部實現細節的修改將不會影響別的模塊。⑧模塊間的單向調用關系叫做模塊的層次結構。⑨模塊越小,模塊化的優點越明顯。一般來說,模塊的大小都在10行以下。【4-2】結構化程序設計有時被錯誤地稱為“無GOTO語句”的程序設計。請說明為什么會出現這樣的說法,并討論環繞著這個問題的一些爭論。【4-3】從下面關于程序編制的敘述中,選出三條正確的敘述。①在編制程序之前,首先必須仔細閱讀給定的程序說明書。然后,必須如實地依照說明書編寫程序。說明書中常會有含糊不清或難以理解的地方。程序員在作業時應該對這些地方作出適當的解釋。②在著手編制程序時,重要的是采用既能使程序正確地按設計說明書進行處理,又易于出錯的編寫方法。③在編制程序時,首先應該對程序的結構充分考慮,不要急于開始編碼,而要象寫軟件文檔那樣,很好地琢磨程序具有什么樣的功能,這些功能如何安排等等。④考慮到以后的程序變更,為程序編寫完整的說明書是一項很重要的工作。只要有了完整的程序說明書,即使程序的編寫形式難以讓他人看懂也沒有什么關系。⑤編制程序時不可缺少的條件是,程序的輸入和輸出數據的格式都應確定。其他各項規定都是附帶的,無足輕重。⑥作為一個好的程序,不僅處理速度要快,而且易讀易修改等等也都是重要的條件。為了能得到這樣的程序,不僅要熟悉程序設計語言的語法,還要注意采用適當的規程和單純的表現方法,注意使整個程序的結構簡潔。【4-7】下面給出一個求實函數方程F(x)在自變量區間[a,b]中的全部實根的算法。首先閱讀此程序,然后 畫出消去全部goto語句的結構化程序流程圖。 在算法中,a與b是區間[a,b]的兩端點值;eps1與eps2是用戶要求的求解精度。如果區間中點的函數值的絕對值小于eps1或新的小區間的長度小于eps2,就認為這個中點為根。 floatBinRoot(floata,floatb,floateps1,floateps2){ floatlow=a,high=b,mid,fmid;floatflow=Func(low),fhigh:=Func(high); labelL1,L2,L3;//標號說明,給定某些程序地址 if(flow*fhigh>0.0){BinRoot=0;gotoL3;}//無實根L1: mid=(low+high)/2;fmid=Func(mid); if(abs(fmid)<=eps1){L2: BinRoot=mid;gotoL3; } elseif(high-mid<=eps2)gotoL2; elseif(flow*fmid>0.0){low=mid;flow=fmid;gotoL1;} else{high=mid;gotoL1};L3:}習題解答【4-1】正確的敘述有②、③、④、⑦、⑧。如果程序結構的模塊化滿足評價的標準(高內聚,低耦合),這樣的結構是容易編碼,容易測試,容易理解,容易修改,容易維護的。程序的功能也容易擴充。特別適合于大型程序編制時,多人分工合作,協同完成任務的情形。因為是采用自頂向下,逐層分解來劃分模塊結構的,所以模塊之間的調用關系是分層次的模塊結構,就叫做模塊的層次結構。模塊之間的信息傳遞叫做模塊的接口,模塊之間傳遞信息可以通過參數表、全局變量或全局數據結構、數據文件、專門的通信模塊,不是專指數據文件。劃分模塊時,模塊大小要適中。模塊太大,控制路徑數目多、涉及的范圍廣、變量的數目多、總體復雜性高,可理解性、可修改性、可靠性就會變差。模塊太小,模塊個數增大,調用的系統開銷就會增大。所以要有一個權衡。【紛亂如麻的程序流程4-2】早在1963年,針對當時流行的ALGOL語言,PeterNaur指出,在程序中大量地,沒有節制地使用GOTO語句,會使程序結構變得非常混亂。但是很多人還不太注意這一問題。以致許多人寫出來的程序仍然是紛亂如麻的。紛亂如麻的程序流程1965年,E.W.Dijkstra在一次會議上提出,應當把GOTO語句從高級語言中取消。并指出,程序的質量與程序中包含的GOTO語句的數量成反比。在這種思想的影響下,當時新開發的幾種高級程序設計語言,例如LISP、ISWIM、BLISS等,都把GOTO語句取消了。1966年,Bohm與Jacopini證明了任何單入口單出口的沒有“死循環”的程序都能由三種最基本的控制結構構造出來。這三種基本控制結構就是“順序結構”、“選擇IF-THEN-ELSE結構”、“重復DO-WHILE或DO-UNTIL結構”。1968年,Dijkstra在寫給<ACM>(美國計算機協會通訊)雜志編輯部的信中再次建議從一切高級語言中取消GOTO語句,只使用三種基本控制結構編寫程序。他的建議引起了激烈的爭論。爭論集中在如何看待GOTO語句的問題上。贊成取消GOTO語句的一方認為,GOTO語句對程序清晰性有很大破壞作用,凡是使用GOTO語句多的程序,其控制流時而GOTO向前,時而GOTO向后,常使程序變得很難理解,從而增加查錯和維護的困難,降低程序的可維護性。但以D.E.Knuth為代表的另一方認為,GOTO語句雖然存在著破壞程序清晰性的問題,但不應完全禁止。因為GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔,并且GOTO語句可直接得到硬件指令的支持。經過爭論,人們認識到,不是簡單地去掉GOTO語句的問題,而是要創立一種新的程序設計思想、方法和風格,以顯著提高軟件生產率和軟件質量,降低軟件維護的成本。70年代初N.Wirth在設計Pascal語言時對GOTO語句的處理可被當做對GOTO語句爭論的結論。在Pascal語言中設置了支持上述三種基本控制結構的語句;另一方面,GOTO語句仍然保留在該語言中。不過,N.Wirth解釋說,通常使用所提供的幾種基本控制結構已經足夠,習慣于這樣做的人不會感到GOTO語句的必要。也就是說,在一般情況下,可以完全不使用GOTO語句。如果在特殊情況下,由于特定的要求,偶然使用GOTO語句能解決問題,那也未嘗不可,只是不應大量使用罷了。事實上,大量采用GOTO語句實現控制路徑,會使程序路徑變得復雜而且混亂,從而使程序變得不易閱讀,給程序的測試和維護造成困難,還會增加出錯的機會,降低程序的可靠性。因此要控制GOTO語句的使用。但有時完全不用GOTO語句進行程序編碼,比用GOTO語句編出的程序可讀性差。例如,在查找結束時,文件訪問結束時,出現錯誤情況要從循環中轉出時,使用布爾變量和條件結構來實現就不如用GOTO語句來得簡潔易懂。【4-3】①、④、⑥。編制程序的過程實際上是根據設計的結果,用某種機器能夠識別的程序設計語言,將設計翻譯成機器代碼的過程。因此,必須如實地按照設計說明書編寫程序。至于設計說明書中含糊不清的地方,應當在編程時與分析人員或設計人員協商,對這些地方做出適當的解釋。另外,考慮到將來的程序修改,必須為程序編寫完整的說明書,同時程序必須編寫得容易讓別人看得懂,這樣程序才容易修改,修改時不容易出錯,而且容易驗證修改后得結果。還有,編寫程序的人不須重新考慮程序要完成什么功能,這些已經在軟件分析與設計過程中充分考慮過了。【4-7】結構化的程序流程圖:low=alow=a;high=b;flow=Func(low);fhigh=Func(high);mid=(low+highmid=(low+high)/2;fmid=Func(mid);end=1;flow*fhigh>0.0?Tretval=0;T|fmid|epsT|fmid|eps1?Fend==1?返回retval;結束Fend==1?返回retval;結束Fhigh-mideps2high-mideps2?FTend=0;retval=end=0;retval=mid;TTFflow*fmid>0.0?FTFflow*fmid>0.0?Fhigh=mid;low=mid;flow=high=mid;low=mid;flow=fmid;軟件測試復習要求1.了解軟件測試的目的和原則。2.了解軟件錯誤的分類。3.了解軟件測試的過程和策略。4.了解軟件測試用例設計的方法,掌握邏輯覆蓋、基本路徑測試、因果圖等測試用例設計方法。5.了解程序靜態測試的方法。習題【5-1】從供選擇的答案中選出應填入下列()中的字句。軟件測試的目的是(A)。為了提高測試的效率,應該(B)。使用白盒測試方法時,確定測試數據應根據(C)和指定的覆蓋標準。與設計測試數據無關的文檔是(D)。軟件的集成測試工作最好由(E)承擔,以提高集成測試的效果。供選擇的答案:A. ①評價軟件的質量 ②發現軟件的錯誤③找出軟件中的所有錯誤 ④證明軟件是正確的B. ①隨機地選取測試數據 ②取一切可能的輸入數據作為測試數據③在完成編碼以后制定軟件的測試計劃④選擇發現錯誤的可能性大的數據作為測試數據C. ①程序的內部邏輯 ②程序的復雜程度③使用說明書 ④程序的功能D. ①該軟件的設計人員 ②程序的復雜程度③源程序 ④項目開發計劃E. ①該軟件的設計人員 ②該軟件開發組的負責人③該軟件的編程人員 ④不屬于該軟件開發組的軟件設計人員【5-2】請從供選擇的答案中選出應填入下列()中的字句。程序的三種基本控制結構是(A)。它們的共同點是(B)。結構化程序設計的一種基本方法是(C)。軟件測試的目的是(D)。軟件調試的目的是(E)。供選擇的答案:A. ①過程,子程序,分程序 ②順序,條件,循環③遞歸,堆棧,隊列 ④調用,返回,轉移B. ①不能嵌套使用 ②只能用來寫簡單的程序③已經用硬件實現 ④只有一個入口和一個出口C. ①篩選法 ②遞歸法 ③歸納法 ④逐步求精法D. ①證明程序中沒有錯誤 ②發現程序中的錯誤③測量程序的動態特性 ④檢查程序中的語法錯誤E. ①找出錯誤所在并改正之 ②排除存在錯誤的可能性③對錯誤性質進行分類 ④統計出錯的次數【5-3】從下列關于軟件測試的敘述中,選出5條正確的敘述。(1)用黑盒法測試時,測試用例是根據程序內部邏輯設計的。(2)盡量用公共過程或子程序去代替重復的代碼段。(3)測試是為了驗證該軟件已正確地實現了用戶的要求。(4)對于連鎖型分支結構,若有n個判定語句,則有2n條路徑。(5)盡量采用復合的條件測試,以避免嵌套的分支結構。(6)GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔。(7)發現錯誤多的程序模塊,殘留在模塊中的錯誤也多。(8)黑盒測試方法中最有效的是因果圖法。(9)在做程序的單元測試時,樁(存根)模塊比驅動模塊容易編寫。(10)程序效率的提高主要應通過選擇高效的算法來實現。【5-4】從供選擇的答案中選出同下列關于軟件測試的各條敘述關系最密切的字句。(1)對可靠性要求很高的軟件,例如操作系統,由第三者對源代碼進行逐行檢查。(2)已有的軟件被改版時,由于受到變更的影響,改版前正常的功能可能發生異常,性能也可能下降。因此,對變更的軟件進行測試是必要的。(3)在意識到被測試模塊的內部結構或算法的情況下進行測試。(4)為了確認用戶的需求,先做出系統的主要部分,提交給用戶試用。(5)在測試具有層次結構的大型軟件時,有一種方法是從上層模塊開始,由上到下進行測試。此時,有必要用一些模塊替代尚未測試過的下層模塊。供選擇的答案:AE: ①仿真器 ②代碼審查③模擬器 ④樁 ⑤驅動器⑥域測試 ⑦黑盒測試 ⑧原型 ⑨白盒測試 ⑩退化測試【5-5】對小的程序進行窮舉測試是可能的,用窮舉測試能否保證程序是百分之百正確呢?【5-6】在任何情況下單元測試都是可能的嗎?都是需要的嗎?【5-7】從供選擇的答案中選出應填入下面有關軟件測試的敘述的()內的正確答案。軟件測試方法可分為黑盒測試法和白盒測試法兩種。黑盒測試法是通過分析程序的(A)來設計測試用例的方法。除了測試程序外,它還適用于對(B)階段的軟件文檔進行測試。白盒測試法是根據程序的(C)來設計測試用例的方法。除了測試程序外,它也適用于對(D)階段的軟件文檔進行測試。白盒法測試程序時常按照給定的覆蓋條件選取測試用例。(E)覆蓋比(F)覆蓋嚴格,它使得每一個判定的每一條分支至少經歷一次。(G)覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。(H)覆蓋比其他條件都要嚴格,但它不能保證覆蓋程序中的每一條路徑。單元測試一般以(I)為主,測試的依據是(J)。供選擇的答案:A,C:①應用范圍 ②內部邏輯 ③功能 ④輸入數據B,D:①編碼 ②軟件詳細設計 ③軟件總體設計④需求分析E,F,G,H:①語句 ②判定 ③條件 ④判定/條件⑤多重條件 ⑥路徑I:①白盒法 ②黑盒法J:①模塊功能規格說明 ②系統模塊結構圖 ③系統需求規格說明【5-8】從供選擇的答案中選出應該填入下列關于軟件測試的敘述的()內的正確答案。軟件測試中常用的靜態分析方法是(A)和(B)。(B)用于檢查模塊或子程序間的調用是否正確。分析方法(白盒方法)中常用的方法是(C)方法。非分析方法(黑盒方法)中常用的方法是(D)方法和(E)方法。(E)方法根據輸出對輸入的依賴關系設計測試用例。供選擇的答案:AB: ①引用分析 ②算法分析 ③可靠性分析 ④效率分析 ⑤接口分析 ⑥操作分析C~E: ①路徑測試②等價類 ③因果圖 ④歸納測試⑤綜合測試⑥追蹤 ⑦深度優先 ⑧調試⑨相對圖習題解答【5-1】A.②B.④C.①D.④E.④軟件測試的目的是軟件中的錯誤。因為不可能把所有可能的輸入數據都拿來測試(時間花費不起),為了提高測試的效率,應該選擇發現錯誤的可能性大的數據作為測試數據。使用白盒測試方法時,確定測試數據應根據程序的內部邏輯和指定的覆蓋標準,可以不考慮程序的功能。與設計測試數據無關的文檔是項目開發計劃。軟件的集成測試工作最好由不屬于該軟件開發組的軟件設計人員承擔,以提高集成測試的效果。【5-2】A.②B.④C.④D.②E.① 1966年,Bohm與Jacopini提出任何單入口單出口的沒有“死循環”的程序都能由三種最基本的控制結構構造出來。這三種基本控制結構就是“順序結構”、“選擇IF-THEN-ELSE結構”、“重復DO-WHILE或DO-UNTIL結構”。它們的共同點是只有一個入口和一個出口。E.W.Dijkstra提出了程序要實現結構化的主張,并將這一類程序設計稱為結構化程序設計。這種方法的一個重要原則就是采用自頂向下、逐步求精的方法編寫程序。N.Wirth曾做過如下說明:“我們對付一個復雜問題的最重要的方法就是抽象。因此,對于一個復雜的問題,不要急于馬上用計算機指令、數字和邏輯符號來表示它,而應當先用較自然的抽象的語句來表示,從而得到抽象的程序。抽象程序對抽象的數據類型進行某些特定的運算,并用一些合適的記號(可以是自然語言)來表示。下一步對抽象程序再做分解,進入下一個抽象的層次。這樣的細化過程一直進行下去,直到程序能被計算機接受為止。此時的程序已經是用某種高級語言或機器指令書寫的了。”軟件調試則是在進行了成功的測試之后才開始的工作。它與軟件測試不同,軟件測試的目的是盡可能多地發現軟件中的錯誤,但進一步診斷和改正程序中潛在的錯誤,則是調試的任務。調試活動由兩部分組成:①確定程序中可疑錯誤的確切性質和位置。②對程序(設計,編碼)進行修改,排除這個錯誤。【5-3】正確的敘述有(4)、(5)、(6)、(7)、(10)。黑盒測試主要是根據程序的有關功能規格說明和覆蓋準則來設計測試用例,進行測試的,不是根據程序的內部邏輯來設計測試用例,這是白盒測試做的事情。在所有黑盒測試方法中,最有效的不是因果圖法,而是邊界值分析方法。測試的目的是盡可能多地發現軟件中的錯誤,其附帶的收獲才是驗證該軟件已正確地實現了用戶的要求。測試的一條重要原則是:發現錯誤多的程序模塊,殘留在模塊中的錯誤也多。軟件可靠性模型(Shooman)就是依據這個原則建立它的公式的。對于連鎖型分支結構,若有n個判定語句,則有2n條路徑。因此,隨著n的增大,路徑數增長非常快。單元測試時,因為樁模塊要模擬子模塊的功能,這不是一件容易的事情,而驅動模塊只是控制被測模塊的執行,所以樁模塊的編寫比驅動模塊的編寫要難得多。在程序設計風格方面,如果重復的代碼段沒有明顯的功能,不可以抽取出來形成獨立的公共過程或子程序,只有在這些代碼段表現出獨立的功能時,才可把它們抽取出來形成獨立的公共過程或子程序。另外,程序效率的提高主要應通過選擇高效的算法或使用高效的語言編譯器來實現。GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔,這句話是正確的。【5-4】(1)②(2)⑩(3)⑨(4)⑧(5)④(1)對可靠性要求很高的軟件,由第三者對源代碼進行逐行檢查,這是代碼審查。(2)軟件變更時可能發生退化現象:原來正常的功能可能發生異常,性能也可能下降。因此,對變更的軟件要進行退化測試。(3)基于被測試模塊的內部結構或算法設計測試用例進行測試,這是白盒測試。(4)為了確認用戶的需求,先做出系統的原型,提交給用戶試用。(5)自頂向下對具有層次結構的大型軟件進行集成測試時,需要設計一些虛擬模塊來替代尚未測試過的下層模塊,這些模塊叫做樁模塊。【5-5】對小程序進行窮舉測試,不見得能保證程序百分之百正確。所謂窮舉測試是拿所有可能的輸入數據來作為測試用例(黑盒測試),或覆蓋程序中所有可能的路徑(白盒測試)。對于小程序來說,實際上并不能真正作到窮舉測試。例如前面講過,一個小程序P只有兩個輸入X和Y及輸出Z,在字長為32位的計算機上運行。如果X、Y只取整數,考慮把所有的X、Y值都做為測試數據,按黑盒方法進行窮舉測試,這樣做可能采用的測試數據組(Xi,Yi),基數(radix)i的最大可能數目為:232×232=264。如果程序P測試一組X、Y數據需要1毫秒,而且假定一天工作24小時,一年工作365天,要完成264組測試,需要5億年。

【5-6】單元測試又稱模塊測試,是針對軟件設計的最小單位─程序模塊,進行正確性檢驗的測試工作。其目的在于發現各模塊內部可能存在的各種差錯。單元測試需要從程序的內部結構出發設計測試用例。多個模塊可以平行地獨立進行單元測試。單元測試是在編碼階段完成的,每編寫出一個程序模塊,就開始做這個模塊的單元測試,所以只要采用模塊化方法開發軟件,單元測試都是必需的。它可由編寫程序的人來完成。因為它需要根據程序的內部結構設計測試用例,對于那些不了解程序內部細節的人,這種測試無法進行。【5-7】A.③B.④C.②D.②E.②F.①G.④H.⑤I.①J.①軟件測試方法可分為黑盒測試法和白盒測試法兩種。黑盒測試法是基于程序的功能來設計測試用例的方法。除了測試程序外,它還適用于對需求分析階段的軟件文檔進行測試。白盒測試法是根據程序的內部邏輯來設計測試用例的方法。除了測試程序外,它也適用于對軟件詳細設計階段的軟件文檔進行測試。白盒法測試程序時常按照給定的覆蓋條件選取測試用例。判定覆蓋比語句覆蓋嚴格,它使得每一個判定的每一條分支至少經歷一次。判定/條件覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。多重條件覆蓋,也叫組合條件覆蓋,比其他條件都要嚴格,但它不能保證覆蓋程序中的每一條路徑。單元測試一般以白盒法為主,測試的依據是系統的模塊功能規格說明。【5-8】A.①B.⑤C.①D.②E.③軟件測試中常用的靜態分析方法是引用分析和接口分析。接口分析用于檢查模塊或子程序間的調用是否正確。分析方法(白盒方法)中常用的方法是路徑測試方法。非分析方法(黑盒方法)中常用的方法是等價類(劃分)方法和因果圖方法。因果圖方法根據輸出對輸入的依賴關系設計測試用例。面向對象技術復習要求1.了解面向對象的概念2.了解用面向對象方法構造軟件的開發過程3.了解面向對象分析方法4.了解面向對象設計方法習題【6-1】什么叫面向對象?面向對象方法的特點是什么?為什么要用面向對象方法開發軟件?【6-2】什么是“對象”?識別對象時將潛在對象分成7類,試給出這7類對象的名稱,并舉例說明。【6-3】什么是“類”?“類”與傳統的數據類型有什么關系?有什么區別?【6-6】面向對象開發方法與面向數據流的結構化開發方法有什么不同?使用面向對象開發方法的優點在什么地方?【6-12】在類的設計中需要遵循的方針是什么?三個主要的設計準則:抽象、信息隱蔽和模塊化如何才能作到?習題解答【6-1】關于“面向對象”,有許多不同的看法。Coad和Yourdon給出了一個定義:“面向對象=對象+類+繼承+消息通信”。如果一個軟件系統是使用這樣4個概念設計和實現的,則認為這個軟件系統是面向對象的。面向對象方法的特點是:方法的唯一性,即方法是對軟件開發過程所有階段進行綜合考慮而得到的。從生存期的一個階段到下一個階段的高度連續性,即生存期后一階段的成果只是在前一階段成果的補充和修改。把面向對象分析(OOA)、面向對象設計(OOD)和面向對象程序設計(OOP)集成到生存期的相應階段。使用面向對象方法開發軟件的好處是:開發方法的唯一性,開發階段的高度連續性,表示方式的一致性;問題空間實體的自然表示,減輕了設計者的負擔,在設計系統之初不必考慮一個很完整的解決方案。建立穩定的系統結構,可促進復用性,易于維護,易于修改,可合理利用共同性,減少復雜性。【6-2】對象的定義:對象是面向對象開發模式的基本成分,是現實世界中個體或事物的抽象表示。每個對象可由一組屬性和它可以執行的一組操作來定義。可能的潛在對象有7類:外部實體:它們產生或接受為目標系統所使用的信息。如各種物理設備、使用人員、其它相關的子系統。事物:問題的信息域所涉及的概念實體。如各種報告、顯示、文字、信號、規格說明等。事件:系統運行時發生的并需要系統記憶的事件。如狀態轉換、物理運動等。角色:與系統有交互的各種人員所扮演的角色。如經理、工程師、銷售人員等。場所或位置:建立系統整體環境或問題上下文的場所、位置。如基于計算機的系統的安裝場所等。組織機構:與應用有關的組織機構。如組織,部門等。結構:定義由一組成分對象組成的聚合對象,或在極端情況下,定義對象的相關類。如傳感器、四輪驅動車、計算機等。【6-3】把具有相同特征和行為的對象歸在一起就形成了類。類成為某些對象的模板,抽象地描述了屬于該類的全部對象的屬性和操作。屬于某個類的對象叫做該類的實例。對象的狀態則包含在它的實例變量,即實例的屬性中。類定義了各個實例所共有的結構,類的每一個實例都可以使用類中定義的操作。實例的當前狀態是由實例所執行的操作定義的。類,就它是一個數據值的聚合的意義上來看,與Pascal中的記錄或C中的結構類似,但又有差別。類擴展了通常的記錄語義,可提供各種級別的可訪問性。也就是說,記錄的某些成份可能是不可訪問的,而這些成份對于本記錄型來說具有可訪問性。類不同于記錄,因為它們包括了操作的定義,這些操作與類中聲明的數據值有相同的地位。【6-6】結構化開發方法是使用最廣泛、歷史最長的過程化開發方法。結構化開發方法產生過程的抽象,這些抽象把軟件視為處理流,定義構成一系列步驟的算法,每一步驟都是帶有預定義輸入和特定輸出的一個過程,把這些步驟串聯在一起可產生合理的穩定的貫通于整個程序的控制流。這將最終導致一個很簡單的具有靜態結構的體系結構。在結構化開發方法中,數據結構是應算法步驟的要求而開發的。數據結構貫穿于過程,提供過程需要傳送給它的操作的信息。系統的狀態是一組全局變量,這組全局變量保持了狀態的值,把它們從一個過程傳送到另一個過程。結構化開發方法是一種成熟的應用開發過程。對這種方法已經存在許多支持。然而,在大型系統的開發上和在面向用戶系統的構造上存在一些問題。改進大型系統開發的技術主要集中在開發數據抽象。日益增多的考慮是使用抽象數據類型,把過程化系統開發過程包括到數據驅動的方法中。隨著大型系統的開發,接踵而來的問題就是要把過程抽象與數據抽象方法組合起來,這種需要導致了面向對象開發方法的誕生。面向對象開發方法是我們分解問題所使用方法演化的結果。在結構化開發方法中過程抽象是優先的,而面向對象開發方法中優先的是實體,即問題論域的對象。在面向對象開發方法中,把標識和模型化問題論域中的主要實體做為系統開發的起點,主要考慮對象的行為而不是必須執行的一系列動作。面向對象系統中的對象是數據抽象與過程抽象的一個混合體。表示這些實體的數據抽象是面向對象設計過程的主要產品,系統的狀態保存在各個數據抽象的核心所定義的數據存儲中。控制流被分成塊,并被包括在各個在數據抽象上的各個操作里面。不像在結構化開發方法里那樣,把數據從一個過程傳送到另一個過程,而是控制流從一個數據抽象被傳送到另一個數據抽象。完成的系統體系結構更復雜但也更靈活。在塊中分離的控制流允許把復雜的動作視為局部的相互影響。【6-12】在設計類時需要遵循的方針是:信息隱蔽:通過信息隱蔽可保護類的存儲表示不被其它類的實例直接存取。消息限制:該類實例的用戶應當只能使用界面提供的操作。 狹窄界面:只有對其它類的實例是必要的操作才放到界面上。強內聚:模塊內部各個部分之間應有較強的關系,它們不能分別標識。弱耦合:一個單獨模塊應盡量不依賴于其它模塊。顯式信息傳遞:兩個類之間的交互應當僅涉及顯式信息傳遞。派生類當做派生類型:每個派生類應該當做基類的特殊化來開發,而基類所具有的公共界面成為派生類的共有界面的一個子集。抽象類:某些語言提供了一個類,用它做為繼承結構的開始點,所有用戶定義的類都直接或間接以這個類為基類。為了在類的設計中做到抽象、信息隱蔽和模塊化:以類作為系統的基本模塊單元,通過一般化―特殊化關系和整體―部分關系,搭建整個系統的類層次結構,實現數據抽象和過程抽象;將數據和相關的操作封裝在類內部,建立共有、私有和子類型等存取級別,將數據表示定義成為類的私有成員,實現信息隱蔽。通過建立類屬性(類模板),將某些有可復用要求的類設計成在數據類型上通用的可復用的軟件構件,這樣有助于實現模塊化。軟件維護在軟件交付使用后修改軟件的過程稱為軟件維護。軟件維護一般不包括重大的體系結構的改變,變更的實現方法一般是修改已有的系統構件以及在必要的地方添加新構件到系統中。軟件維護的分類?改正性維護:修改軟件缺陷。?適應性維護:適應變更的操作環境(硬件、操作系統平臺、其他支持軟件)。?增強性維護:系統需求改變(機構因素、業務改變)軟件再工程是試圖增加當前系統(或稱遺留系統)的總體質量、提高可維護性的工程。軟件再工程過程中的活動主要包括以下幾個方面:?文檔重構(redocument)?結構重組(restructuring)?逆向工程(reverseengineering)?再工程(reengineering)【7-6】改錯性維護與“排錯”是否是一回事?為什么?【7-7】從下列敘述中選出5條與提高軟件的可移植性有關的敘述。①把程序中與計算機硬件特性有關的部分集成在一起。②選擇時間效率和空間效率高的算法。③使用結構化的程序設計方法。④盡量用高級語言編寫程序中對效率要求不高的部分。⑤盡可能減少注釋。⑥采用表格控制方式。⑦文檔資料詳盡、正確。⑧在有虛擬存儲器的計算機系統上開發軟件。⑨減少程序中對文件的讀寫次數。⑩充分利用宿主計算機的硬件特性。【7-6】改錯性維護與“排錯(調試)”不是一個概念。調試是作為測試的后繼工作而出現的,是當測試發現軟件中的錯誤后,進一步診斷和改正程序中潛在的錯誤的活動。而改正性維護是指在軟件交付使用后,由于開發時測試的不徹底、不完全,必然會有一部分隱藏的錯誤被帶到運行階段來,這些隱藏下來的錯誤在某些特定的使用環境下就會暴露出來。為了識別和糾正軟件錯誤、改正軟件性能上的缺陷、排除實施中的誤使用所進行的診斷和改正錯誤的過程。調試在程序編碼階段、測試階段、運行和維護階段都可以發揮作用,它實際上是一種工具或手段。在軟件交付運行之后,用戶實際充當了測試員的角色,一旦發現軟件運行中的錯誤或缺陷,就會將問題報告通報軟件銷售商,申請軟件維護。其后軟件維護人員可以利用調試手段來診斷和改正軟件中存在的錯誤。這時可能涉及的范圍不只包括程序,還有文檔和數據,不僅可能修改程序代碼,而且可能需要修改設計。甚至需求。所以改正性維護是在更大范圍中做工作。【7-7】正確的敘述有①、③、④、⑥、⑦。 為了提高軟件的可移植性,應當盡可能用高級語言編寫源程序代碼。對于與硬件或操作系統有關的部分,或對效率要求很高的部分,應當為它們建立專門的模塊,將用匯編語言寫的程序封裝在這些模塊中,與程序中其它部分以事先約定的標準方式接口。這樣,一旦硬件環境或操作系統環境發生變化,只需修改個別模塊即可。 采用表格控制方式,將所有的外部設備接口或與其它系統的接口,包括信息傳遞、驅動程序入口等都用表格控制,即使將來硬件、相關軟件發生的變化,只需修改表格中的登記項,原來的程序一律可以不改。 為了將來修改方便,不致于引入新的錯誤,相關文檔一定要齊全、正確,程序中必須有必要的注釋,并使用如結構化程序設計方法這樣的良好的程序設計方法來編寫程序。至于算法選擇,與效率有關,與可移植性無關。其它敘述,如⑧、⑨、⑩,都不利于可移植性。編號:軟件工程課程設計說明書題目:六子棋游戲軟件開發學院:計算機科學與工程學院專業:信息安全學生姓名:學號:指導教師:20年10月8日摘要六子棋是流傳于中國民間的一類版圖游戲。是一種雙人對弈搏殺的一種游戲,交戰雙方棋子數均為六顆,故稱六子棋。六子棋不同于五子棋,沒有過多的棋子無論是從感觀上還是公平性上都要優先于五子棋,六子棋的規則簡單易懂,不像國際棋規則中的繁復規則,適用于各個年齡段的人玩。規則簡單明了,游戲對環境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節等為棋子,并有簡單的比賽,可以鍛煉腦力。隨著經濟的發展和人們的生活水平的提高,每個人的業余休閑時間越發增多。人們也已經開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網站關于六子棋的網頁版游戲頻繁出現,令人耳目一新啊,例如3366小游戲,手機版的六子棋游戲也開始漸漸走入各種類型的手機中,為人民增添了生活的樂趣豐富了大家的娛樂時間。讓很多人

重溫70、80后玩家兒時的感動,讓小孩子感受到父母兒時的樂趣。根據社會上人們對游戲的熱切程度,把以前的游戲通過科學技術轉換成現代的小游戲軟件。設計該軟件采用了JAVA技術并且借鑒了很多小的游戲網站的六子棋游戲,制作了一個簡單方便的游戲。具體實現了這個游戲更加方便了喜歡六子棋的人群,不需要反反復復的花棋盤找棋子。不僅僅豐富了人們的生活,增加了娛樂項目,有為人民帶去便利,讓大眾的生活充滿歡樂。目錄TOC\o"1-3"\h\u23193第1章緒論 頁第1章緒論1.1課題背景和意義1.1.1課題背景六子棋是流傳于中國民間的一類版圖游戲。是一種雙人對弈搏殺的一種游戲,交戰雙方棋子數均為六顆,故稱六子棋。六子棋的棋盤為3乘以3的方格。棋子可信手拿來,只要互相區分即可。據傳,六子沖游戲源自中國古代戰爭的士兵陣型訓練,后逐漸演變為一種棋類游戲。六子沖規則簡單,上手容易,但變化無窮,是一種讓人玩起來就欲罷不能的智力對抗游戲。六子沖游戲在上世紀主要流行于中國四川一帶。在中國山區農村流傳甚廣,由于規則簡單,工具可信手拈來,是我國鄉間常見的棋類游戲。在商洛鎮安,涪城等地農村流行。重慶潼南鄉村地區也盛行。在江西省寧都縣農村,一直流傳有“六子棋”這一棋類游戲。由于筆者是從自己的祖母那里學會該棋類,而筆者的祖母應當也是從他人那里學會的該棋類。有近百年或以上歷史。棋盤。棋盤是4*4。棋子擺放比較自由。假設以一條平行于底線的橫線將棋盤對半而分,對戰雙方可以將自己所持的6子任意的擺放在己方半邊3個方格的8個頂點的任意6個頂點上。吃子。設對戰雙方各持黑子與白子。以黑子吃掉白子為例,若黑子的行棋應當在棋盤上形成某條棋盤線上兩個黑子緊靠著頂著一個緊挨著某個黑子的白子,且同一條棋盤線上只有那兩個黑子和一個白子,那么白子將被吃掉。若由于白子的行走造成的雙黑字頂一個白子,則不構成黑子吃白子的條件。反之,白子吃黑字亦然。勝負。在某一方最后只剩一個棋子時,比賽結束,以剩下棋子較多的一方為勝。若最終,步入僵局,雙方都無法再吃對方棋子時,則以剩下棋子較多的一方為勝,若雙方棋子數量一樣,那么視為平局。舊時,農閑時,或是在人們在地里勞動停下來休息時,大家在地上畫方格為棋盤,拾碎石、折樹枝作為棋子,以對弈。1.1.2意義六子棋不同于五子棋,沒有過多的棋子無論是從感觀上還是公平性上都要優先于五子棋,六子棋的規則簡單易懂,不像國際棋規則中的繁復規則,適用于各個年齡段的人玩。規則簡單明了,游戲對環境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節等為棋子,并有簡單的比賽,可以鍛煉腦力。1.2國內發展現狀隨著經濟的發展和人們的生活水平的提高,每個人的業余休閑時間越發增多。人們也已經開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網站關于六子棋的網頁版游戲頻繁出現,令人耳目一新啊,例如3366小游戲,手機版的六子棋游戲也開始漸漸走入各種類型的手機中,為人民增添了生活的樂趣豐富了大家的娛樂時間。讓很多人

重溫70、80后玩家兒時的感動,讓小孩子感受到父母兒時的樂趣。1.3論文的主要工作雖然六子棋并不算是一個小型軟件,但是要做到工作也是相當的多啊。在該論文中要對軟件進行可行性分析和需求分析,同時還要進行系統設計和系統的功能說明,要對系統的實現進行具體的演示和打包安裝,最后還要對該軟件進行測試和結果分析,總結該系統的功能和不足之處和未來的工作發展。1.4論文章節的安排第一章也就是本章對整個論文進行了大體的歸納,闡明了課題的背景和意義。我們在第二章中主要對整個軟件進行可行性分析:技術可行性分析,經濟可行性分析,政策可行性分析。同時還要進行需求分析:功能說明。第三章要介紹系統設計:概念結構設計,各個功能的實現。第四章是對系統的實現:算法,UI,關鍵代碼,打包安裝。第五章是整體的測試功能和結果分析,最后一章是結束語也就是課設的總結。第2章可行性分析和需求分析2.1可行性分析2.1.1技術可行性分析該軟件采用JAVA語言開發,使用的開發工具的Eclipse,Eclipse是一個開放源代碼的、基于Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發工具(JavaDevelopmentKit,JDK)。Eclipse是著名的跨平臺的自由集成開發環境(IDE)。最初主要用來Java語言開發,通過安裝不同的插件Eclipse可以支持不同的計算機語言,比如C++和Python等開發工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發商以Eclipse為框架開發自己的IDE。與傳統程序不同,Sun公司在推出Java之際就將其作為一種開放的技術。全球數以萬計的Java開發公司被要求所設計的Java軟件必須相互\t"/subview/29/_blank"兼容。“Java語言靠群體的力量而非公司的力量”是Sun公司的口號之一,并獲得了廣大軟件開發商的認同。這與\t"/subview/29/_blank"微軟公司所倡導的注重精英和封閉式的模式完全不同。Sun公司對Java編程語言的解釋是:Java編程語言是個簡單、面向對象、\t"/subview/29/_blank"分布式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和靜態的語言。Java平臺是基于Java語言的平臺。這樣的平臺非常流行。因此微軟公司推出了與之競爭的\t"/subview/29/_blank".NET平臺以及模仿Java的\t"/subview/29/_blank"C#語言。Java是功能完善的通用程序設計語言,可以用來開發可靠的、要求嚴格的應用程序。2.1.2經濟可行性系統的經濟方面的可行性應該從項目開發的投入金額、收益、收益投資比、投資回收周期和敏感性分析來考慮。該軟件的開發工具使用的是Eclipse它是一個開放源代碼的、基于Java的可擴展開發平臺。所有在開發軟件方面根本不需要經濟的支撐,所有項目的開發投入金額為0,本系統是一個娛樂性軟件,會免費為大眾提供使用。2.1.3政策的可行性六子棋屬于一種適應于大眾的小型娛樂性游戲,不但操作簡單成本低廉同時不涉及到國家的經濟問題和政治問題。不傳播任何的不良思想只是簡單的供給大眾娛樂消遣的小游戲。2.2用戶分類及功能說明該軟件屬于一個免費行軟件,可供任何一個人免費使用。該軟件實現了該游戲本應該有的游戲方法同時也人性化的添加了初始界面的設定,讓整個軟件看起來更加的美觀。其功能有游戲功能其中包括人人對抗,重新開始和認輸功能。游戲簡介功能,讓用戶了解該游戲并且能夠快速的掌握游戲技巧和攻略。2.3系統層次方框圖圖2.1系統層次方框圖第3章系統實現3.1模塊實現3.1.1主界面UI設計:主界面采用的是類似于手機游戲界面設計的,完美的融合了古代棋類游戲的那種古典的,優美的畫風。在搭配上古典音樂真有種和古代一起把酒言歡之感。背景圖畫采用水墨畫的形式更增添了韻味。如圖4.1所示:圖3.1UI(主界面)算法和代碼:因為模塊一主要是所涉及的界面的設計所以涉及的算法幾乎是沒有,那接下來我們就講講代碼部分,主要的代碼只有2個部分一個是音樂部分的代碼,另一個是背景圖片載入的代碼。代碼1:publicvoidPlay(Stringfileurl){ try{AudioInputStreamais=AudioSystem.getAudioInputStream(newFile(fileurl));AudioFormataif=ais.getFormat();System.out.println(aif);finalSourceDataLinesdl;DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class,aif);sdl=(SourceDataLine)AudioSystem.getLine(info);sdl.open(aif);sdl.start();FloatControlfc=(FloatControl)sdl.getControl(FloatControl.Type.MASTER_GAIN);doublevalue=2;floatdB=(float)(Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);fc.setValue(dB);intnByte=0;intwriteByte=0;finalintSIZE=1024*64;byte[]buffer=newbyte[SIZE];while(nByte!=-1){nByte=ais.read(buffer,0,SIZE);sdl.write(buffer,0,nByte);}sdl.stop();}catch(Exceptione){e.printStackTrace();}代碼2:privatevoidsetBackgroundImage(){ ImageIconbackground=newImageIcon(getClass().getResource("c.png")); JLabellabel=newJLabel(background);//背景圖片顯示在一個標簽里 //把標簽的大小位置設置為圖片剛好填充 label.setBounds(0,0,background.getIconWidth(), background.getIconHeight()); //把內容窗格轉化為JPanel,否則不能用方法setOpaque()來使內容透明 JPanelimagePanel=(JPanel)this.getContentPane(); imagePanel.setOpaque(false); this.getLayeredPane().setLayout(null); this.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE)); }游戲規則:為了讓用戶更加的了解六子棋小游戲,在主界面添加了游戲規則的按鈕。用戶只需要點擊按鍵就可以查看游戲規則和了解游戲的由來。圖3.1游戲規則界面代碼:importjavax.swing.*;importjava.awt.BorderLayout;importjava.awt.event.*;importjavax.swing.*;importjava.awt.*;importjava.io.*;publicclassReadextendsJFrame{ protectedStringmessage; JPanelPanel5=newJPanel(); JLabeljt=newJLabel(); JLabeljt1=newJLabel(); JTextAreatextarea; Strings; publicRead(){ this.setBackgroundImage(); textarea=newJTextArea(); add(textarea); textarea.setOpaque(false); this.setSize(700,600); read(); } privatevoidread(){ BufferedReaderbr=null; try{ br=newBufferedReader(newFileReader("game.txt")); Stringstr; while((str=br.readLine())!=null){ textarea.append(str+"\r\n"); } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(br!=null) br.close(); }catch(IOExceptione){ e.printStackTrace(); } } } publicstaticvoidmain(String[]args){ Readr=newRead(); r.show();}}3.1.2游戲界面UI設計:模塊二即游戲部分,游戲界面因為背景圖畫里面的棋子是黑白的,所以為了區分此處的棋子我采用了顯眼的黃色和綠色棋子,藍色線行棋盤。界面上還會顯示黃綠雙方走棋的步數和所剩的棋子數。這樣更加有利于走棋。如圖4.2所示:圖4.2UI(游戲界面)算法設計:EQ\o\ac(○,1)棋盤和棋子:棋盤是整個游戲最基礎的部分同時也是最重要的部分,本系統中采用的是JAVA語言中原有的Graphics類,用于繪圖方面特別簡單易行。用Graphics2D的drawline()的方法畫出棋盤,然后再用raphics2D的fillOval()方法繪制棋子,用setColor()的方法置棋子的顏色。最后在使用paint()函數(自己編寫)繪制整個游戲界面EQ\o\ac(○,2)走棋和吃棋:走棋是比較重要的環節。首先,要判斷你要走的地方是否有棋子。其次,要判斷你要走的地方是否和原來的位置在同一條線上,是否相鄰。本系統采用用數組position代表棋盤上點的狀態其中不可以下棋的地方設置為0可以走棋的地方設置為1有棋子且顏色為綠色的2有棋子且顏色為橘黃色的3。State用1表示放置棋子(默認)用2表示吃棋子(點擊對方的棋子)用3表示走棋的第一步,即點擊自己的棋子用4表示走棋的第二步,即點擊相鄰的下棋空白點。吃棋在走棋的基礎上只采用了一個zouqitow()的函數,設置了一個BOOL型的變量GREEN來控制是哪一方走棋。行棋一方若將兩顆棋子移至一起,且一頭挨著對方的一顆棋時,則可吃對方該子。具體見代碼。EQ\o\ac(○,3)輸棋和認輸:輸棋就是當任何一方的所剩棋子數為0時,則該方輸棋。認輸這個功能沒有什么比較重要的代碼,就是如果任何一方選擇認輸就把他的棋子數置為輸棋的狀態,并且提示該方輸棋。代碼詳情:因為本系統的代碼比較多,所以只展示模塊二的重要的代碼部分:代碼一(paint()函數):publicvoidpaint(Graphicsg){ super.paintComponents(g);//清屏重繪 Graphics2Dg2d=(Graphics2D)g; g2d.setColor(Color.BLUE); drawchessboard(g2d,a,b,c); drawpieces(g2d); g2d.setColor(Color.BLACK); g2d.setFont(font); g2d.drawString(s,500,150); g2d.drawString(s1+greennum,550,300); g2d.drawString(s2+orangenum,550,350); g2d.drawString(s4+greeneat,550,400); g2d.drawString(s5+orangeeat,550,450); g2d.drawString("黑方時間:"+m,30,470); g2d.drawString("state="+state,80,500); g2d.drawString(GREEN+""+(greennum+orangenum),200,500); g2d.drawString(s0,80,550); if(s3!=null){ g2d.drawString(s3,500,50); } }代碼二:(走棋吃棋)publicvoidzouqione(intx,inty){ if(GREEN==true) { if(position[x][y]==2)//判斷點擊的是不是綠方棋子 { xx=x; yy=y; s="請綠方點擊要放置的位置"; state=4;//正進入第二步 }else{ s="綠方走棋:請點擊自己的棋子"; } } else{ if(position[x][y]==3)//判斷點擊的是不是黃方棋子 { xx=x; yy=y; s="請黃方點擊要放置的位置"; state=4;//正點擊新的位置 } else{ s="請黃方走棋:點擊自己的棋子"; } } }publicvoidzouqitwo(intx,inty){ if(position[x][y]==1||position[x][y]==4) { if(isnext(xx,yy,x,y)){ position[xx][yy]=1; if(GREEN)//如果綠方走 {position[x][y]=2;//把點擊的位置變成綠點 greennum=greennum+1; } if(!GREEN)//如果是黃方走 { position[x][y]=3;//把點擊的位置變成黃點 orangenum=orangenum+1; } if(position[4][y]!=1&&position[4][y]==position[6][y]&&position[0][y]==1&&position[2][y]!=position[4][y]&&position[2][y]!=1) { if(position[2][y]!=position[x][y])//防自殺 position[2][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[0][y]!=position[2][y]&&position[6][y]==1&&position[0][y]!=1) { if(position[0][y]!=position[x][y])//防自殺 position[0][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[6][y]!=position[2][y]&&position[0][y]==1&&position[6][y]!=1) { if(position[6][y]!=position[x][y])//防自殺 position[6][y]=1; GREEN=false; orangeeat--; } else if(position[0][y]!=1&&position[0][y]==position[2][y]&&position[4][y]!=position[0][y]&&position[6][y]==1&&position[4][y]!=1) { if(position[4][y]!=position[x][y])//防自殺 position[4][y]=1; GREEN=false; orangeeat--; elseif(position[x][4]!=1&&position[x][4]==position[x][6]&&position[x][0]==1&&position[x][2]!=position[x][4]&&position[x][2]!=1) { if(position[x][2]!=position[x][y])//防自殺 position[x][2]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][0]!=position[x][2]&&position[x][6]==1&&position[x][0]!=1) { if(position[x][0]!=position[x][y])//防自殺 position[x][0]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][6]!=position[x][2]&&position[x][0]==1&&position[x][6]!=1) { if(position[x][6]!=position[x][y])//防自殺 position[x][6]=1; GREEN=false; orangeeat--; } elseif(position[x][0]!=1&&position[x][0]==position[x][2]&&position[x][4]!=position[x][0]&&position[x][6]==1&&position[x][4]!=1) { if(position[x][4]!=position[x][y])//防自殺 position[x][4]=1; GREEN=false; orangeeat--; } else{ s=GREEN?"請綠方點擊相鄰的下棋處!":"請黃方點擊相鄰的下棋處!"; } GREEN=GREEN?false:true;s=GREEN?"綠方走棋:請綠方點擊自己的棋子!":"黃方走棋:請綠方點擊自己的棋子!"; state=3; } else{ s=GREEN?"請綠方點擊相鄰的空位!":"請黃方點擊相鄰的空位"; } } else{ s=GREEN?"請綠方點擊可以放置的空位!":"請黃方點擊可以放置的空位";}}publicvoidmouseClicked(MouseEvente){Pointp=e.getPoint();if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; }if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; if(state==3) zouqione(x,y); if(state==4) zouqitwo(x,y); if(orangeeat<1){ s3="黃方輸了!"; s="比賽結束"; this.removeMouseListener(this); } if(greeneat<1){ s3="綠方輸了!"; s="比賽結束"; this.removeMouseListener(this); } repaint(); }else{ } }3.2打包與安裝下載并且安裝fatJar插件。然后右擊工程選擇buildfatjaar。選定MAINCLASS,將工程需要的JAR包的路徑填入CLASSPATH中,然后按提示操作,將工程需要的JAr包放在與FATJAR打包的目錄下,找到eclipse安裝目錄下的plugins目錄plugins子目錄下的org.eclipse.swt.win32.win32.x86_3.2.2.v3236,將其解壓,將swt-win32-3236.dll放在J

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論