基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩48頁(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)介

歐陽(yáng)陽(yáng)理創(chuàng)編 歐陽(yáng)陽(yáng)理創(chuàng)編 2021.03.04歐陽(yáng)陽(yáng)理創(chuàng)編 歐陽(yáng)陽(yáng)理創(chuàng)編 2021.03.04基于JAVA的五子棋游戲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)時(shí)間:2021.03.05創(chuàng)作:歐陽(yáng)理專(zhuān)業(yè)電子信息工程學(xué)生董永杰指飛教師 曾玉摘要目前,隨著計(jì)算機(jī)網(wǎng)絡(luò)的的發(fā)展,以計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)為核心的現(xiàn)代網(wǎng)絡(luò)技術(shù)已經(jīng)在現(xiàn)實(shí)生活和生產(chǎn)中得到了廣泛的使用,已經(jīng)成為多數(shù)人群的休閑方式,也為多數(shù)人所喜好。當(dāng)然,為了滿(mǎn)足沒(méi)有網(wǎng)絡(luò)同樣能娛樂(lè)的要求,許多小游戲做成了單機(jī)和網(wǎng)絡(luò)的雙功能。本軟件使用JAVA語(yǔ)戶(hù)端之間的連接,利用多線(xiàn)程技術(shù)言實(shí)現(xiàn),通過(guò)對(duì)圖形界面,繪圖,布局管理器等去構(gòu)造出游戲的單機(jī)功能,在此基礎(chǔ)上,利用SCOKET的知識(shí),建立起服務(wù)器與客來(lái)處理服務(wù)器端與客戶(hù)端之間的數(shù)據(jù)傳輸,通信問(wèn)題,使得客戶(hù)端和服務(wù)器端之間能夠同步的進(jìn)行處理。通過(guò)對(duì)軟件的編寫(xiě),更深入的理解了面向?qū)ο蟮母拍睿搀w會(huì)到利用面向?qū)ο笳Z(yǔ)言處理一些問(wèn)題的優(yōu)勢(shì)。同時(shí)也加深了對(duì)多線(xiàn)程,流套接字等高級(jí)技術(shù)的理解。關(guān)鍵詞:多線(xiàn)程;流套接字;數(shù)據(jù)傳輸;同步。ABSTRACTAtpresent,Withtherapiddevelopmentofcomputernetwork.Takingcomputertechnologyandthenetworktechnologyasthecore,modernnetworktechnologyisalreadyusedinthereallifeandtheproductionandalreadybecametheleisuremodeofthemostpeople.Andmostpeoplelikethem.Ofcourse,it’sapitythattherestillhavesomeclientslackingofnetworkbecauseofvariouscauses.Inordertosatisfytheaboveclients’requirements.Alargenumberofgames,usuallynamedas“smallgames”byplayers,aredesignedforinvolvingtwokindsofdifferentfunction.Theformergameisoftenplayedbytheseplayerswhosecomputersneverconnectwiththenetwork.It’scalledforstand-aloneversiongames.Justasitsnameimplies,thelaterisnamedasonlineversiongamesThissoftwareimplementedwithJAVAlanguage,andaccordingtotheunderstandingofSCOKET,GUIandpaintimageichnology.Establishedinthesefoundation,theservercoectswiththemulti-client,andtransmissiontheinformationbetweenmanyclientsusingthemulti-threadproceedingtechnology.itisveryconvenientforbothclientandservertodothesynchronousprocessing.Throughtothesoftwarecompilation,deepenunderstandingandgrasptothetechnologyaboveunderstandingandholding.KeyWords:multiplethread,Socket,transmission-data,synchronism.目錄第一章緒論11.1開(kāi)發(fā)背景11.2課題意義11.3五子棋游戲的發(fā)展與現(xiàn)狀21.4論文的組織結(jié)構(gòu)3第二章五子棋程序相關(guān)技術(shù)介紹42.1軟件的基本功能42.2開(kāi)發(fā)運(yùn)行環(huán)境42.3軟件的開(kāi)發(fā)手段以及工具的介紹4.1Java簡(jiǎn)介4.2MyEclipselO開(kāi)發(fā)環(huán)境簡(jiǎn)介72.4軟件的實(shí)現(xiàn)目的8第三章五子棋程序分析與設(shè)計(jì)93.1用戶(hù)需求分析93.2軟件功能結(jié)構(gòu)圖93.3軟件各個(gè)功能的簡(jiǎn)要說(shuō)明10軟件設(shè)計(jì)中使用到的JAVA軟件包以及類(lèi)和方法12五子棋界面設(shè)計(jì)13五子棋算法設(shè)計(jì)14五子棋棋盤(pán)設(shè)計(jì)15棋子設(shè)計(jì)16落子算法設(shè)計(jì)17判斷輸贏設(shè)計(jì)19網(wǎng)絡(luò)五子棋算法設(shè)計(jì)21第四章軟件的具體實(shí)現(xiàn)234.1準(zhǔn)備工作234.2游戲窗口界面的實(shí)現(xiàn)234.3下棋算法的實(shí)現(xiàn)254.4完成判斷勝負(fù)的功能27系統(tǒng)測(cè)試30測(cè)試計(jì)劃31界面功能測(cè)試31單機(jī)游戲測(cè)試32聯(lián)網(wǎng)游戲測(cè)試33測(cè)試結(jié)果34第五章總結(jié)與展望35致謝36附錄37JIcon.java程序:37Qipan.java部分程序:37參考文獻(xiàn)43第一章緒論開(kāi)發(fā)背景隨著計(jì)算機(jī)的快速發(fā)展,各種游戲被紛紛請(qǐng)進(jìn)了電腦。而像五子棋這類(lèi)不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性的棋類(lèi)游戲更是備受推崇。這使得那些喜愛(ài)下棋,又常??嘤跊](méi)有對(duì)手的棋迷們能隨時(shí)過(guò)足棋癮。而且這類(lèi)軟件個(gè)個(gè)水平頗高,大有與人腦分庭抗禮之勢(shì)。其中戰(zhàn)勝過(guò)國(guó)際象棋世界冠軍-卡斯帕羅夫的“深藍(lán)”便是最具說(shuō)服力的代表,其它像圍棋的“手淡”、象棋的“將族”等也以其優(yōu)秀的人工智能深受棋迷喜愛(ài)。五子棋是我國(guó)古代的、傳統(tǒng)的黑白棋種之一,大約在南北朝時(shí)期隨圍棋一起先后傳入朝鮮、日本等地?,F(xiàn)代五子棋日文稱(chēng)之為“連珠”,英譯為“Ren-ju”,英文稱(chēng)之為“Gobang”或“FIR"(FiveinaRow的縮寫(xiě)),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱(chēng)謂。通過(guò)一系列的規(guī)則變化使連珠五子棋這一簡(jiǎn)單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時(shí)也成為一種國(guó)際比賽棋。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問(wèn)“陰陽(yáng)易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂(lè)見(jiàn),又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。五子棋起源于古代中國(guó),發(fā)展于日本,風(fēng)靡于歐洲。它在不同的國(guó)度也有著不同的稱(chēng)謂,如韓國(guó)人稱(chēng)其為“情侶棋”;歐洲人稱(chēng)其為“紳士棋”;日本人稱(chēng)其為“中老年棋”;美國(guó)人則喜歡將其稱(chēng)為“商業(yè)棋”。由此可見(jiàn),盡管?chē)?guó)度不同,語(yǔ)言各異,但人們都可以借助這一簡(jiǎn)單又深?yuàn)W的棋藝進(jìn)行交流、比賽,增進(jìn)友誼。課題意義人類(lèi)之所以不斷在進(jìn)步,是因?yàn)槲覀內(nèi)祟?lèi)一直不斷的在思考,五子棋游戲程序的開(kāi)發(fā)符合人類(lèi)進(jìn)步也是促進(jìn)人類(lèi)進(jìn)步的一大動(dòng)力之一。五子棋游戲程序讓人們方便快捷的可以下五子棋,讓人們?cè)诤螘r(shí)都能通過(guò)下棋來(lái)提高邏輯思維能力,同時(shí)也培養(yǎng)兒童的興趣以及愛(ài)好,讓孩子更加聰明。同時(shí),五子棋游戲程序的開(kāi)發(fā)也使得五子棋這個(gè)游戲得到了廣泛的推廣,讓世界各地的人們知道五子棋,玩上五子棋,這已經(jīng)不是局限。五子棋游戲程序使得越來(lái)越多的人喜歡上了五子棋,熱愛(ài)下五子棋,它是具有很好的帶動(dòng)性的。隨著互聯(lián)網(wǎng)絡(luò)的不斷普及,越來(lái)越多的人可以在網(wǎng)絡(luò)上就能夠與他人下五子棋了。五子棋游戲的發(fā)展與現(xiàn)狀目前,連珠這一棋類(lèi)運(yùn)動(dòng)已迅速在國(guó)際上發(fā)展起來(lái)。外國(guó)人都十分看好這一不起眼的智力游戲,并認(rèn)為五子棋不僅能提高思維、開(kāi)發(fā)智力、手腦并用、修身養(yǎng)性而且富含哲理,具有東方的神秘和西方的直觀,是中西文化的交匯點(diǎn)。許多國(guó)家的人對(duì)五子棋都有不同的愛(ài)稱(chēng),例如韓國(guó)人把五子棋稱(chēng)之為“情侶棋”,言下之意是情人之間下五子棋有利于增加情感的交流;歐洲人稱(chēng)之為“中老年棋”,表示五子棋適合中老年人的生理特點(diǎn)和思維方式;美洲人喜歡將五子棋稱(chēng)之為“商業(yè)棋”,就是說(shuō)商人談生意時(shí)可邊下棋邊談生意,棋下完了生意也談成了。由此可見(jiàn),盡管?chē)?guó)度不同,語(yǔ)言各異,但人們都可以借助五子棋這一簡(jiǎn)單而又深?yuàn)W的棋藝進(jìn)行交流、比賽,增進(jìn)友誼。當(dāng)前,有40多個(gè)國(guó)家和地區(qū)都在下五子棋,并有各種規(guī)模和級(jí)別的比賽。1989年8月在日本京都、1991年8月在俄羅斯聯(lián)邦的莫斯科、1993年8月在瑞典、1995年8月在愛(ài)沙尼亞的塔林分別舉行了第一、二、三、四屆世界錦標(biāo)賽。除第三屆的冠軍是愛(ài)沙尼亞人之外,其余三屆的冠軍都是日本人。五子棋的世界錦標(biāo)賽,每?jī)赡昱e辦一次,其申國(guó)競(jìng)爭(zhēng)也十分激烈。日本目前擁有自己的五子棋職業(yè)棋手,并且對(duì)連珠(五子棋)技術(shù)的研究也相當(dāng)普遍和全面,就水平也正在日益增強(qiáng)。同時(shí),五子棋的理論研究與探索也呈現(xiàn)蓬勃發(fā)展的勢(shì)頭,從1858年第一部五子棋專(zhuān)著問(wèn)世以來(lái),目前,全世界有2000多種五子棋的書(shū)籍及期刊,分別以日文、俄文、英文、瑞典文及中文出版發(fā)行。五子棋在我國(guó)的北京、上海、天津、云南、浙江、廣東、四川、湖北、遼寧、新疆、河北等?。▍^(qū))市都有很大的發(fā)展。北京多次舉辦了北京地區(qū)的五子棋賽,如“思曼杯”、“京空杯”、“奇奇童杯”、“北京第六屆民族團(tuán)結(jié)杯”和“北京第四豈民族運(yùn)動(dòng)會(huì)”的五子棋比賽。上海地區(qū)舉辦了“上文杯”五子棋大賽。云南省以及其他省市亦舉辦過(guò)許多五子棋比賽。所有這些賽事都越來(lái)越多地吸引了無(wú)數(shù)人們的關(guān)注,表明了根埴于中國(guó)的五子棋有著廣泛的群眾基礎(chǔ),是群眾喜聞樂(lè)見(jiàn)的體育活動(dòng)。而現(xiàn)在,很多很多游戲平臺(tái)上面都有五子棋游戲供我們玩,任何游戲平臺(tái)上面只要有棋牌類(lèi)游戲的,那么它就有五子棋在里面,網(wǎng)絡(luò)五子棋比賽,在聯(lián)眾,263,QQ游戲,UC里進(jìn)行了10幾年了??梢?jiàn),五子棋游戲在網(wǎng)絡(luò)上面是非常火暴的。而且在棋牌游戲里面玩家人數(shù)排名總會(huì)占到很前面,不愧是風(fēng)靡全球的棋牌游戲?。≡谖磥?lái)中,將會(huì)有越來(lái)越多的人關(guān)注五子棋,喜歡五子棋,那么將其變?yōu)樯虡I(yè)化也會(huì)越來(lái)越多,而且還可以以教育孩子的方式來(lái)將其嵌套進(jìn)去,或者用來(lái)做測(cè)試等等,可以說(shuō)以后的五子棋游戲會(huì)是那么的精彩,那么的讓人憧憬。那么對(duì)于它的游戲開(kāi)發(fā)和發(fā)展也將會(huì)上升到舉足輕重的地位去,它的發(fā)展會(huì)是相當(dāng)之快的,就讓我們拭目以待吧。論文的組織結(jié)構(gòu)本文由第一章緒論,第二章五子棋程序相關(guān)技術(shù)介紹,第三章五子棋程序分析與設(shè)計(jì),第四章軟件的具體實(shí)現(xiàn),第五章總結(jié)與展望,最后由致謝、附錄和參考文獻(xiàn)八部分組成。第一章緒論由研究背景、五子棋的發(fā)展前景、五子棋程序的基本步驟和本文的組織結(jié)構(gòu)組成。第二章介紹軟件的開(kāi)發(fā)工具和和軟件的基本功能,另外介紹軟件所要實(shí)現(xiàn)的目標(biāo)。第三章軟件總體分析與設(shè)計(jì)。第四章詳細(xì)分析軟件各模塊的設(shè)計(jì)與實(shí)現(xiàn)包括繪制棋盤(pán)、下棋功能、判斷勝負(fù)、下棋信息、時(shí)間設(shè)置、認(rèn)輸?shù)裙δ芙M成。第五章是總結(jié)與展望。第六章是致謝。第七章是附錄。第八章是介紹參考文獻(xiàn)。第二章五子棋程序相關(guān)技術(shù)介紹軟件的基本功能顯示一個(gè)十五行十五列的圍棋棋盤(pán)。在棋盤(pán)上面在對(duì)應(yīng)位置通過(guò)點(diǎn)擊鼠標(biāo)下子,棋盤(pán)上將在相應(yīng)的位置上顯示棋子,并且棋子在橫縱交點(diǎn)上??梢宰詣?dòng)判斷游戲是否結(jié)束,是否黑方或者是白方已經(jīng)勝利,并且跳出對(duì)話(huà)框來(lái)提示玩家。在游戲棋盤(pán)上方會(huì)有一個(gè)游戲信息,這個(gè)游戲信息是用來(lái)提示當(dāng)前是黑白雙方的哪一方下子,玩家可以根據(jù)這個(gè)提示來(lái)相應(yīng)的下棋,而不會(huì)導(dǎo)致不清楚輪到哪一方下棋。可以重新開(kāi)始游戲,并且有認(rèn)輸功能,在下棋提示上提示哪方時(shí)點(diǎn)認(rèn)輸,哪一方就輸了,并且有悔棋功能。還可以對(duì)游戲時(shí)間進(jìn)行設(shè)置,判斷是否超出規(guī)定的時(shí)間,如果超出時(shí)間則自動(dòng)判斷為輸。2開(kāi)發(fā)運(yùn)行環(huán)境1)中心處理器:IntelCorei5-3230M,2.6GHZ;2)內(nèi)存:4G;3)硬盤(pán):750G;4)操作系統(tǒng):WINDOWS7;5)開(kāi)發(fā)工具:MyEclipse10;6)編程語(yǔ)言:JAVA。軟件的開(kāi)發(fā)手段以及工具的介紹Java簡(jiǎn)介Java編程語(yǔ)言的風(fēng)格十分接近C、C++語(yǔ)言。Java是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了C++語(yǔ)言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C++語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operatoroverloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂(yōu)。在JavaSE1.5版本中,Java又引入了泛型編程(GenericProgramming)、類(lèi)型安全的枚舉、不定長(zhǎng)參數(shù)和自動(dòng)裝/拆箱等語(yǔ)言特性。Java不同于一般的編譯執(zhí)行計(jì)算機(jī)語(yǔ)言和解釋執(zhí)行計(jì)算機(jī)語(yǔ)言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼(bytecode),然后依賴(lài)各種不同平臺(tái)上的虛擬機(jī)來(lái)解釋執(zhí)行字節(jié)碼,從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺(tái)特性。不過(guò),每次的編譯執(zhí)行需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了Java程序的運(yùn)行效率。但在J2SE1.4.2發(fā)布后,Java的執(zhí)行速度有了大幅提升。與傳統(tǒng)程序不同,Sun公司在推Java之際就將其作為一種開(kāi)放的技術(shù)。全球數(shù)以萬(wàn)計(jì)的Java開(kāi)發(fā)公司被要求所設(shè)計(jì)的Java軟件必須相互兼容。“Java語(yǔ)言靠群體的力量而非公司的力量”是Sun公司的口號(hào)之一,并獲得了廣大軟件開(kāi)發(fā)商的認(rèn)同。這與微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。Sun公司對(duì)Java編程語(yǔ)言的解釋是:Java編程語(yǔ)言是個(gè)簡(jiǎn)單、面向?qū)ο?、分布式、解釋性、健壯、安全與系統(tǒng)無(wú)關(guān)、可移植、高性能、多線(xiàn)程和動(dòng)態(tài)的語(yǔ)言。Java平臺(tái)是基于Java語(yǔ)言的平臺(tái)。這樣的平臺(tái)目前非常流行,因此微軟公司推出了與之競(jìng)爭(zhēng)的.NET平臺(tái)以及模仿Java的C#語(yǔ)言。Java技術(shù)的重要性就不講了,從最近流行的一個(gè)統(tǒng)計(jì)數(shù)據(jù)上來(lái)說(shuō),目前世界上編程語(yǔ)言Java、C、VB、C++依次排名前4位,這排名本身不說(shuō)明什么,但至少也是工業(yè)界對(duì)編程語(yǔ)言使用上一個(gè)側(cè)面的反映。Java編程語(yǔ)言與眾不同之處在于:Java程序既是編譯型的(轉(zhuǎn)換為一種稱(chēng)為Java字節(jié)碼的中間語(yǔ)言),又是解釋型的(JVM對(duì)字節(jié)碼進(jìn)行解析和運(yùn)行)。編譯只進(jìn)行一次,而解釋在每次運(yùn)行程序時(shí)都會(huì)進(jìn)行。編譯后的字節(jié)碼采用一種針對(duì)JVM優(yōu)化過(guò)的機(jī)器碼形式;解釋器是JVM的實(shí)現(xiàn)。Java具有眾多優(yōu)點(diǎn),比如平臺(tái)無(wú)關(guān)性,安全性,面向?qū)ο?,健壯式,分布式等。與c++相比,Java去掉了其中的指針運(yùn)算、結(jié)構(gòu)、typedefs、#define、需要釋放內(nèi)存等功能,減少了平常出錯(cuò)的50%,讓Java的語(yǔ)言功能很精煉。而且,因?yàn)镴ava很小,所以整個(gè)解釋器只需215K的RAM,并增加了一些很有用的功能。MyEclipse10開(kāi)發(fā)環(huán)境簡(jiǎn)介MyEclipse10是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,MyEclipse10附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具。MyEclipse10的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得MyEclipse10擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。許多軟件開(kāi)發(fā)商以MyEclipse10為框架開(kāi)發(fā)自己的IDE。MyEclipse10是一個(gè)開(kāi)放源代碼的軟件開(kāi)發(fā)項(xiàng)目,專(zhuān)注于為高度集成的工具開(kāi)發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由MyEclipse10項(xiàng)目、MyEclipse10工具項(xiàng)目和MyEclipse10技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成一一MyEclipsePlatform、JDT、CDT和PDE。JDT支持Java開(kāi)發(fā)、CDT支持C開(kāi)發(fā)、PDE用來(lái)支持插件開(kāi)發(fā),MyEclipsePlatform則是一個(gè)開(kāi)放的可擴(kuò)展IDE,提供了一個(gè)通用的開(kāi)發(fā)平臺(tái)。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開(kāi)發(fā)工具的基礎(chǔ)。MyEclipsePlatform允許工具建造者獨(dú)立開(kāi)發(fā)與他人工具無(wú)縫集成的工具從而無(wú)須分辨一個(gè)工具功能在哪里結(jié)束,而另一個(gè)工具功能在哪里開(kāi)始。雖然大多數(shù)用戶(hù)很樂(lè)于將MyEclipse10當(dāng)作JavaIDE來(lái)使用,但MyEclipse10的目標(biāo)不僅限于此。MyEclipse10還包括插件開(kāi)發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展MyEclipse10的軟件開(kāi)發(fā)人員,因?yàn)樗试S他們構(gòu)建與MyEclipse10環(huán)境無(wú)縫集成的工具。由于MyEclipse10中的每樣?xùn)|西都是插件,對(duì)于給MyEclipselO提供插件,以及給用戶(hù)提供一致和統(tǒng)一的集成開(kāi)發(fā)環(huán)境而言,所有工具開(kāi)發(fā)人員都具有同等的發(fā)揮場(chǎng)所。MyEclipseSDK(軟件開(kāi)發(fā)者包)是MyEclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個(gè)具有豐富特性的開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者有效地建造可以無(wú)縫集成到MyEclipsePlatform中的工具。MyEclipseSDK由MyEclipselO項(xiàng)目生產(chǎn)的工具和來(lái)自其它開(kāi)放源代碼的第三方軟件組合而成。MyEclipselO項(xiàng)目生產(chǎn)的軟件以GPL發(fā)布,第三方組件有各自自身的許可協(xié)議。MyEclipselO的基礎(chǔ)是富客戶(hù)機(jī)平臺(tái)(RichClientPlatform,即RCP)。RCP包括下列組件:核心平臺(tái)(啟動(dòng)MyEclipselO,運(yùn)行插件)OSGi(標(biāo)準(zhǔn)集束框架)SWT(可移植構(gòu)件工具包)JFace(文件緩沖,文本處理,文本編輯器)MyEclipselO工作臺(tái)(即Workbench,包含視圖(views)、編輯器(editors)、視角(perspectives)、和向?qū)В╳izards))MyEclipselO采用的技術(shù)是IBM公司開(kāi)發(fā)的(SWT),這是一種基于Java的窗口組件,類(lèi)似Java本身提供的AWT和Swing窗口組件;不過(guò)IBM聲稱(chēng)SWT比其他Java窗口組件更有效率。MyEclipse10的用戶(hù)界面還使用了GUI中間層JFace,從而簡(jiǎn)化了基于SWT的應(yīng)用程序的構(gòu)建。MyEclipse10的插件機(jī)制是輕型軟件組件化架構(gòu)。在富客戶(hù)機(jī)平臺(tái)上,MyEclipse10使用插件來(lái)提供所有的附加功能,例如支持Java以外的其他語(yǔ)言。已有的分離的插件已經(jīng)能夠支持C/C++(CDT)、Perl、Ruby,Python、telnet和數(shù)據(jù)庫(kù)開(kāi)發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語(yǔ)言。MyEclipse10的設(shè)計(jì)思想是:一切皆插件。MyEclipse10核心很小,其它所有功能都以插件的形式附加于忖丫£。廿口5?10核心之上。MyEclipse10基本內(nèi)核包括:圖形API(SWT/Jface),Java開(kāi)發(fā)環(huán)境插件(JDT),插件開(kāi)發(fā)環(huán)境(PDE)等軟件的實(shí)現(xiàn)目的五子棋游戲程序所要實(shí)現(xiàn)的目的是讓我們可以在電腦上下棋,而不需要去買(mǎi),可以隨時(shí)玩,也可以聯(lián)機(jī)對(duì)戰(zhàn),方便快捷。而且能更好的推廣五子棋于世界各地,此軟件也在于提供給愛(ài)好五子棋的人,也吸引更多的人喜歡上五子棋,也具有很大的商業(yè)價(jià)值。使五子棋游戲程序在以后的制作中功能越來(lái)越強(qiáng)大,外觀越來(lái)越好看。第三章五子棋程序分析與設(shè)計(jì)用戶(hù)需求分析通過(guò)軟件功能的分析,根據(jù)五子棋愛(ài)好者的需求,得出以下需求信息:具有重新開(kāi)始功能;具有認(rèn)輸功能;具有提示該輪到哪一方下棋的功能;退出游戲功能;判斷勝負(fù)功能;時(shí)間設(shè)置功能;五子棋難度選擇功能;聯(lián)機(jī)功能。還有用戶(hù)對(duì)游戲界面的要求,通過(guò)上述的用戶(hù)需求,可以得出一個(gè)總體的設(shè)計(jì)方案。由上述的用戶(hù)需要,可以對(duì)程序的基本功能進(jìn)行一個(gè)有效的分析,規(guī)定下游戲的基本功能。軟件功能結(jié)構(gòu)圖此五子棋程序最主要的五大功能是:下棋,判斷勝負(fù),重新開(kāi)始與認(rèn)輸,聯(lián)網(wǎng)游戲的設(shè)置與五子棋難度的選擇。大體的功能如圖3-1:五子棋程序圖3-1五子棋功能設(shè)定圖軟件各個(gè)功能的簡(jiǎn)要說(shuō)明繪制十五行十五列的棋盤(pán):首先是每行每列的距離都是一樣的,并且棋盤(pán)上面有五個(gè)星,棋盤(pán)中間有個(gè)天元點(diǎn),跟圍棋的棋盤(pán)一樣。點(diǎn)擊鼠標(biāo)以后,會(huì)在相應(yīng)位置落下棋子,并被繪制出來(lái),黑子是一個(gè)實(shí)心的黑圓,白子是一個(gè)實(shí)心的白圓加上一個(gè)等大空心的黑圓。棋子落在交點(diǎn)上:我們?cè)谙挛遄悠迤宓臅r(shí)候,棋子都是會(huì)落在交點(diǎn)上的,而并非落在格子里面,那么我們就要規(guī)定當(dāng)我點(diǎn)擊鼠標(biāo)時(shí),選取距離鼠標(biāo)所取點(diǎn)的最近的左上交點(diǎn)為繪制棋子的中心點(diǎn),那么就可以實(shí)現(xiàn)棋子落在交點(diǎn)上了。黑白雙方輪流落子:黑方落子以后就要輪到白方,交替進(jìn)行,這是下棋的基本要求,因此我們就要弄一個(gè)互斥事件進(jìn)去,讓他們交替的落子。不能落在相同位置:當(dāng)我們落子時(shí),會(huì)不小心落到相同位置上去,那么就要出現(xiàn)提示,不能落在相同位置上,需要重新落子,實(shí)現(xiàn)的設(shè)想是當(dāng)這個(gè)點(diǎn)已經(jīng)繪制過(guò)棋子以后,我們就要給一個(gè)布爾變量,讓它為假,那么只能在它為真時(shí)才能繪制棋子,否則就要重新落子到別的地方去。判斷輸贏:當(dāng)五個(gè)相同顏色子都連在了一起的時(shí)候,我們就要判其為贏,這五個(gè)子可以在橫豎方向上連起,也可以在斜方向上連起。游戲信息:我們應(yīng)該在棋盤(pán)的上面設(shè)置一個(gè)游戲信息的,用來(lái)提示當(dāng)前輪到哪一方下棋了,以便于玩家知道誰(shuí)在下,這個(gè)功能只要在黑白雙方輪流下棋功能的過(guò)程中添加一個(gè)提示信息用于顯示到界面上的就可以了。重新開(kāi)始游戲就是把棋盤(pán)上的子全部清空,回復(fù)到一開(kāi)始的時(shí)候的狀態(tài),重置之前所有的數(shù)據(jù)。認(rèn)輸?shù)墓δ芫褪窃谂袛噍斱A功能的基礎(chǔ)上添加的,讓玩家對(duì)自己沒(méi)信心的時(shí)候使用。退出游戲的功能就是直接把窗口關(guān)閉就可以了。游戲難度選擇:游戲難度選擇是由玩家自主選擇的與電腦下五子棋的一個(gè)重要方法??梢愿鶕?jù)自身的下棋水平來(lái)選擇和那種電腦來(lái)下。難度分為三種,分別是:簡(jiǎn)單、中等與困難。而且電腦的思維是根據(jù)難度提升而提升。聯(lián)機(jī)對(duì)戰(zhàn):聯(lián)機(jī)對(duì)戰(zhàn)是為了方便玩家與玩家相互之間切磋棋藝而設(shè)定的一大功能模塊,可以在一個(gè)局域網(wǎng)里面,然后聯(lián)機(jī)對(duì)戰(zhàn)。當(dāng)雙方建立聯(lián)系以后,點(diǎn)擊開(kāi)始就可以進(jìn)行聯(lián)網(wǎng)對(duì)戰(zhàn)了。這極大的提高了五子棋的娛樂(lè)程度。軟件設(shè)計(jì)中使用到的JAVA軟件包以及類(lèi)和方法在用JAVA設(shè)計(jì)軟件的時(shí)候,使用到SUM公司提供的一些軟件包,這樣使得我們編寫(xiě)程序更加簡(jiǎn)便,以下是使用到的軟件包:Javax.swing.JFrame //javax.swing軟件包提供一組“輕量級(jí)”(全部是Java語(yǔ)言)組件,盡量讓這些組件在所有平臺(tái)上的工作方式都相同。JFrame類(lèi)是java.awt.Frame的擴(kuò)展版本,該版本添加了對(duì)JFC/Swing組件架構(gòu)的支持。JFrame是用來(lái)創(chuàng)建窗體的swing類(lèi),用來(lái)創(chuàng)建一個(gè)圖形界面的原始窗口,并且可以設(shè)置其大小,位置等屬性,是swing編程的基礎(chǔ)類(lèi)之一。Java.awt//java.awt軟件包包含用于創(chuàng)建用戶(hù)界面和繪制圖形圖像的所有類(lèi)。Java.awt.Toolkit//Toolkit此類(lèi)是所有AbstractWindowToolkit實(shí)際實(shí)現(xiàn)的抽象超類(lèi)。Toolkit的子類(lèi)被用于將各種組件綁定到特定本機(jī)工具包實(shí)現(xiàn)。Toolkit.geiDefaultToolkit().getScreenSize().width;Toolkit.geiDefaultToolkit().getScreenSize().height;//以上這兩個(gè)方法的作用是取得我們電腦顯示屏幕的寬度以及高度。geiDefaultToolkit()為獲取默認(rèn)工具包,如果名為"java.awt.headless”的系統(tǒng)屬性被設(shè)置為true,則使用Toolkit的headless實(shí)現(xiàn)。如果不存在"java.awt.headless"或"java.awt.headless"被設(shè)置false,且存在名為"awt.toolkit"的系統(tǒng)屬性,則該屬性將被視為T(mén)oolkit子類(lèi)的名稱(chēng);否則將使用特定于平臺(tái)的默認(rèn)Toolkit實(shí)現(xiàn)。getScreenSize()這個(gè)方法是獲取屏幕的大小。在具有多個(gè)顯示屏的系統(tǒng)上,使用主顯示屏。從GraphicsConfiguration和GraphicsDevice可以獲得多屏幕感知顯示尺寸。Javax.swing.JOptionPane//JOptionPane有助于方便地彈出要求用戶(hù)提供值或向其發(fā)出通知的標(biāo)準(zhǔn)對(duì)話(huà)框Java.awt.event.MouseListener//MouseLinstener是鼠標(biāo)監(jiān)聽(tīng),功能是接收用戶(hù)通過(guò)鼠標(biāo)所做的操作,可以取得用戶(hù)點(diǎn)擊鼠標(biāo)的坐標(biāo),從而進(jìn)行其他的操作。Graphics類(lèi),它的功能是類(lèi)似于畫(huà)筆的功能,用來(lái)在窗口中繪制文字以及圖形等。他的調(diào)用是通過(guò)覆寫(xiě)JFrame的paint()方法來(lái)使用的,通過(guò)repaint()方法來(lái)調(diào)用。Java.io.File//這個(gè)是產(chǎn)生中斷并且調(diào)用文件用到的類(lèi)。Java.io通過(guò)數(shù)據(jù)流、序列化和文件系統(tǒng)提供系統(tǒng)輸入和輸出。File類(lèi)文件和目錄路徑名的抽象表示形式。Java.awt.image.BufferedImage//BufferedImage子類(lèi)描述具有可訪(fǎng)問(wèn)圖像數(shù)據(jù)緩沖區(qū)的Image。BufferedImage由圖像數(shù)據(jù)的ColorModel和Raster組成。Raster的SampleModel中band的數(shù)量和類(lèi)型必須與ColorModel所要求的數(shù)量和類(lèi)型相匹配,以表示其顏色和alpha分量。所有BufferedImage對(duì)象的左上角坐標(biāo)都為(0,0)。因此,用來(lái)構(gòu)造BufferedImage的任何Raster都必須滿(mǎn)足:minX=0且minY=0??梢杂脕?lái)調(diào)用一個(gè)圖片作為我們下棋的背景圖片使用。五子棋界面設(shè)計(jì)開(kāi)始開(kāi)發(fā)游戲的第一步就是先制作出游戲的窗口界面,一個(gè)漂亮美麗大方的游戲界面,往往先能吸引玩家去嘗試,所以這個(gè)地方不能夠馬虎。首先我們得按照大家的習(xí)慣,也就是游戲風(fēng)格。按照國(guó)人的五子棋游戲風(fēng)格。一般是在木質(zhì)的棋盤(pán)上下,這樣能夠顯示出棋類(lèi)游戲的沉穩(wěn)、大氣而又不失典雅的氣質(zhì)。所以我們?cè)O(shè)計(jì)界面的時(shí)候需要按照木質(zhì)棋盤(pán)的顏色來(lái)設(shè)計(jì)底色。在一般的五子棋游戲比賽中,需要有比賽的信息顯示,方便下棋者與觀看者根據(jù)信息思考。所以在我們?cè)O(shè)計(jì)的界面上,必要的信息是

不可缺少的。國(guó)人多喜歡把棋盤(pán)放在左邊,然后右邊顯示下棋的信息,所以設(shè)計(jì)棋盤(pán)的時(shí)候應(yīng)該按照國(guó)人的喜好擺放位置?;玖鞒倘鐖D3-2所示:綜上所述,棋盤(pán)的設(shè)計(jì)是以木質(zhì)顏色為棋盤(pán)底色,畫(huà)上棋盤(pán)線(xiàn)條,把棋盤(pán)擺設(shè)在左邊,然后再右邊添加下棋的信息,如:狀態(tài),時(shí)間顯示,開(kāi)始游戲等一些按鈕。五子棋算法設(shè)計(jì)五子棋算法設(shè)計(jì)可以包括如圖3-3所示設(shè)計(jì):五子棋算法設(shè)計(jì)輸贏判斷棋盤(pán)設(shè)計(jì)輸贏判斷棋盤(pán)設(shè)計(jì)圖3-3五子棋算法設(shè)計(jì)圖

五子棋的算法設(shè)計(jì)包括棋盤(pán)設(shè)計(jì),棋子設(shè)計(jì),落子設(shè)計(jì)以及輸贏判

斷。能設(shè)計(jì)出這四個(gè)算法,一個(gè)基本的五子棋算法就算完成了。五子棋棋盤(pán)設(shè)計(jì)五子棋棋盤(pán)設(shè)計(jì)可以使用人丫人自帶的畫(huà)圖算法。設(shè)計(jì)成十五行十五列的小型棋盤(pán)即可,然后按照圍棋棋盤(pán)的設(shè)定,畫(huà)上天元以及天星等標(biāo)記,那么此棋盤(pán)就已經(jīng)設(shè)計(jì)完成了。設(shè)計(jì)圖如下:

圖3-4棋盤(pán)設(shè)計(jì)流程圖棋盤(pán)設(shè)計(jì)如上圖所示,首先是設(shè)計(jì)棋盤(pán)大小,然后設(shè)計(jì)棋盤(pán)底色(這里設(shè)計(jì)底色一般為木質(zhì)顏色,如:蠟黃色)和線(xiàn)條顏色,接下來(lái)就可以畫(huà)棋盤(pán)線(xiàn)條了,執(zhí)行一個(gè)循環(huán),循環(huán)次數(shù)為15次,畫(huà)出行線(xiàn),然后再執(zhí)行一個(gè)15次循環(huán),畫(huà)列線(xiàn)。最后找到相對(duì)應(yīng)的點(diǎn),畫(huà)上天元和天星。如此下來(lái),一個(gè)優(yōu)質(zhì)的棋盤(pán)就已經(jīng)完成了。顏色、線(xiàn)條等個(gè)方面符合國(guó)人的審美觀。讓玩家下起來(lái)有一種和現(xiàn)實(shí)下五子棋一樣的感

覺(jué)。棋子設(shè)計(jì)棋子設(shè)計(jì)也可以使用JAVA自帶的畫(huà)圖算法,分為黑白兩種顏色的棋子,畫(huà)一個(gè)實(shí)心圓即可表示棋子。具體的實(shí)現(xiàn)設(shè)計(jì)如圖3-5所示:圖3-5棋子設(shè)計(jì)流程圖棋子設(shè)計(jì)就需要使用java自帶的畫(huà)圖方法,獲取橫豎交叉點(diǎn),然后以該點(diǎn)為圓心,畫(huà)一個(gè)半徑為13的圓,然后填充兩種顏色:黑色和白色。完成后判定該圓是否屬于剛剛落下的棋子,如果是,則在填充一個(gè)半徑為6的紅色圓,表示該棋子剛剛走完。落子算法設(shè)計(jì)由于需要設(shè)計(jì)單機(jī)游戲和聯(lián)機(jī)對(duì)戰(zhàn)。但是該算法不涉及到聯(lián)機(jī)對(duì)戰(zhàn),所以該算法只針對(duì)單機(jī)游戲。初步設(shè)定單機(jī)游戲分為三種難度等級(jí)。分別為容易、中等和困難。我們可以通過(guò)一個(gè)算法來(lái)體現(xiàn)不同難度,電腦只能從玩家手中獲取玩家下棋的情況,包括以下幾種情況:當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且沒(méi)有被堵住的情況下當(dāng)然也就是說(shuō)下一顆子就必贏的情況當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被堵住的情況下當(dāng)然也就是說(shuō)必須堵住當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被堵住的情況下當(dāng)然也就是說(shuō)下一顆子就必贏的情況當(dāng)計(jì)算出的對(duì)方已經(jīng)有三個(gè)連珠并且沒(méi)有被堵住的情況下當(dāng)然也就是說(shuō)必須堵住四三連的情況三三連的情況其算法流程圖如圖3-6所示:

判定是否結(jié)束判斷是否結(jié)束判斷重要性是否最高否否結(jié)束是將白子下算法設(shè)計(jì)的地方分析是否結(jié)束(得到每個(gè)點(diǎn)重要性)提起下一個(gè)點(diǎn)黑方先下(自己)判定是否結(jié)束判斷是否結(jié)束判斷重要性是否最高否否結(jié)束是將白子下算法設(shè)計(jì)的地方分析是否結(jié)束(得到每個(gè)點(diǎn)重要性)提起下一個(gè)點(diǎn)黑方先下(自己)開(kāi)始游戲圖3-6五子棋算法流程圖開(kāi)始下子,系統(tǒng)賦予該棋子(Value)初始值,然后系統(tǒng)自動(dòng)分“\”“/”“-”“|”這四個(gè)方向進(jìn)行判斷是否結(jié)束。當(dāng)系統(tǒng)定義為簡(jiǎn)單的時(shí)候只能滿(mǎn)足以下情況:當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。其他情況則不攔截。所以簡(jiǎn)單的電腦較為容易。中等難度算法當(dāng)自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況下就會(huì)繼續(xù)補(bǔ)齊到第四顆棋子,然后繼續(xù)1號(hào)操作。當(dāng)計(jì)算出的對(duì)方已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況就會(huì)主動(dòng)去攔截。當(dāng)為棋盤(pán)出現(xiàn)四三連(三三連)連子的情況時(shí)候它不攔截當(dāng)系統(tǒng)設(shè)定為困難的時(shí)候當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況下就會(huì)繼續(xù)補(bǔ)齊到第四顆棋子,然后繼續(xù)1號(hào)操作。當(dāng)計(jì)算出的對(duì)方已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況就會(huì)主動(dòng)去攔截。當(dāng)計(jì)算機(jī)即將出現(xiàn)四三連的情況時(shí)候,計(jì)算機(jī)就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算機(jī)即將出現(xiàn)三三連的情況時(shí)候,計(jì)算機(jī)就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)對(duì)方快或者已經(jīng)出現(xiàn)四三連子的時(shí)候,電腦就會(huì)視優(yōu)先級(jí)去攔截一個(gè)方向。當(dāng)對(duì)方快或者已經(jīng)出現(xiàn)三三連子的時(shí)候,電腦就會(huì)視優(yōu)先級(jí)去攔截一個(gè)方向。3.6.4判斷輸贏設(shè)計(jì)五子棋判斷輸贏的規(guī)則就是連續(xù)五個(gè)顏色相同的子,代表該顏色所代表的一方獲勝。其具體設(shè)計(jì)流程圖如圖3-7所示:五子棋輸贏判斷流程圖圖3-7五子棋游戲勝負(fù)的判斷是五子棋游戲的最基本的算法設(shè)計(jì)。根據(jù)五子棋游戲的規(guī)則,當(dāng)任一行、列、斜行連續(xù)相同的棋子數(shù)達(dá)到5以后,則判定改色棋子的玩家勝利。所以設(shè)計(jì)判斷五子棋輸贏的方法就從查找連續(xù)相同棋子開(kāi)始。首先從橫向查找,循環(huán)查找橫向是否有連續(xù)顏色相同的五個(gè)以上的棋子。若有,則判斷勝利,若沒(méi)有,則可以豎向查找,步驟和橫向查找類(lèi)似。若有,則判斷勝利,若沒(méi)有,則可以繼續(xù)斜向查找,其步驟和判斷結(jié)果和前面類(lèi)似。若還是不能判斷勝利,則搜索是否還有可下的棋盤(pán)點(diǎn)位。若有,則證明判斷失敗,若沒(méi)有則可以宣布和棋。五子棋的判定方法不分單機(jī)或者聯(lián)網(wǎng),無(wú)論是和電腦對(duì)戰(zhàn),還是和玩家聯(lián)機(jī)對(duì)戰(zhàn)其判斷結(jié)果都如上述方法來(lái)判斷。3.7網(wǎng)絡(luò)五子棋算法設(shè)計(jì)網(wǎng)絡(luò)五子棋是使用的Socket網(wǎng)絡(luò)編程來(lái)實(shí)現(xiàn)的。下面先介紹下Socket編程流程圖:

服務(wù)器端圖3-8Socekt原理流程圖這個(gè)是整個(gè)Socket原理流程圖。利用這個(gè)原理可以把它應(yīng)用到網(wǎng)絡(luò)五子棋的流程圖。網(wǎng)絡(luò)五子棋的整體設(shè)計(jì)思路如圖3-9所示:

客戶(hù)端往那務(wù)器端發(fā)送的處理清求接收來(lái)自服多雅的處理再求效據(jù)包接收新的客山連技接收用尸處理請(qǐng)求 , 服務(wù)番端發(fā)往客戶(hù)端的處理靖求客戶(hù)竭代理國(guó)不卜茹環(huán)結(jié)束.初始化初始■(匕主箱年結(jié)束「循環(huán)開(kāi)始 £客戶(hù)端往那務(wù)器端發(fā)送的處理清求接收來(lái)自服多雅的處理再求效據(jù)包接收新的客山連技接收用尸處理請(qǐng)求 , 服務(wù)番端發(fā)往客戶(hù)端的處理靖求客戶(hù)竭代理國(guó)不卜茹環(huán)結(jié)束.初始化初始■(匕主箱年結(jié)束「循環(huán)開(kāi)始 £卜:防環(huán)開(kāi)始中蘇宗本代即?程序刷新顯示場(chǎng)景客戶(hù)端上程號(hào)開(kāi)好眼齊器X程序?開(kāi)始圖3-9網(wǎng)絡(luò)五子棋網(wǎng)絡(luò)通信原理圖首先開(kāi)啟服務(wù)器程序?yàn)榭蛻?hù)端提供服務(wù),初始化。然后等待已注冊(cè)好的客戶(hù)端程序的連接;客戶(hù)端主程序開(kāi)始運(yùn)行,初始化。通過(guò)客戶(hù)端代理程序向服務(wù)器端發(fā)送連接處理請(qǐng)求;服務(wù)器端監(jiān)聽(tīng)到客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求后,進(jìn)行相應(yīng)的處理,并將處理結(jié)果打包,由服務(wù)器代理程序?qū)⑻幚砗玫慕Y(jié)果包發(fā)送到客戶(hù)端;客戶(hù)端這時(shí)就可以接收到來(lái)自服務(wù)器端處理好的數(shù)據(jù)并做相應(yīng)的處理,如客戶(hù)端界面刷新顯示數(shù)據(jù)等問(wèn)題。接著不斷重復(fù)以上操作。從而實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)戰(zhàn)通信的目的。第四章軟件的具體實(shí)現(xiàn)準(zhǔn)備工作首先用MyEclipse來(lái)建一個(gè)工程,我將此工程的名字命為:FIR。然后在我所建的工程里建立一個(gè)包,包名為goumoku。再在包里面建立我需要的類(lèi),建立一個(gè)名字為MainFrame的JAVA類(lèi),繼承Javax.swing.JFrame這個(gè)類(lèi),而且同時(shí)引入MouseListener這個(gè)監(jiān)聽(tīng)的接口。通過(guò)這個(gè)接口實(shí)現(xiàn)對(duì)五子棋的每項(xiàng)功能進(jìn)行鼠標(biāo)監(jiān)聽(tīng)。然后準(zhǔn)備一個(gè)算法類(lèi)Qipan,其中包括三種算法對(duì)比,分別為簡(jiǎn)單,中等,復(fù)雜三個(gè)等級(jí),這樣可以提高游戲者的興趣,根據(jù)自己的技術(shù)選擇相應(yīng)的難度。也包括棋盤(pán)的設(shè)計(jì),輸贏的判斷,下子的判斷等功能。最后建立服務(wù)器端和客服端,實(shí)現(xiàn)網(wǎng)絡(luò)編程。游戲窗口界面的實(shí)現(xiàn)圖4-1單機(jī)游戲主界面當(dāng)玩家運(yùn)行程序以后,就會(huì)出現(xiàn)個(gè)棋盤(pán)的主界面。這個(gè)界面是有木質(zhì)顏色來(lái)作為棋盤(pán)的底色。而且棋盤(pán)已經(jīng)畫(huà)成功。等待玩家下一個(gè)步驟,是否選擇聯(lián)機(jī)游戲或者選擇單機(jī)游戲。當(dāng)玩家選擇好了單機(jī)游戲以后,由于本軟件實(shí)現(xiàn)了難度選擇,所以玩家可以選擇難度(默認(rèn)為中等難度),難度分為三種:簡(jiǎn)單,中等,困難。在玩家選擇了單機(jī)游戲而且又選擇好了難度以后,系統(tǒng)會(huì)更具玩家所選擇的游戲難度來(lái)體現(xiàn)電腦的水平。當(dāng)玩家選擇聯(lián)機(jī)游戲時(shí),系統(tǒng)會(huì)出現(xiàn)等待的界面,當(dāng)系統(tǒng)掃描局域網(wǎng)的IP,若該局域網(wǎng)內(nèi)有個(gè)IP也在運(yùn)行次程序,則主動(dòng)匹配,完成網(wǎng)絡(luò)游戲的功能。若無(wú)IP運(yùn)行,則系統(tǒng)將一直搜索等待。棋盤(pán)實(shí)現(xiàn)核心代碼如下圖:java團(tuán)QipanJava5etFor,egr,aund(Calor.orange)\g.fillRectCe^j4597459);〃畫(huà)線(xiàn)g.setColor(Color.blfor(inti=0;i<15;i+-F){g.drawLine(startXj耳亡/t¥+30*i?stCTrtX+14*30,耳亡療tX十非瑞i);g.drawLinefstortX+^e^ijsturtX,startX+3^i,北在十X+30*14);//畫(huà)標(biāo)記點(diǎn)g.5etColor(Color.bracfe);g.fi110va1(startX+30*3-dot_r,startX+30*3-dot_r,2*dot_r?2*dot_r);g.fillOval(5tartX+305ti11-dot_r}startX+303ti3-dot_Pj^dotr,2瑞dot_r);g.fillOval(5十日/十*+3@率3-dot_r,stffrtX+30^11-dot_r,2常加士2^dot_r);g.fillOval(5tartX+30*ll-d(?t_r〉startX+3^^11■d(?t_/12*dot_2*d(?t_r)jg.fi110val(startX+30^7-dotrjstartX^3^7-dotry2*dot、l^dotr)}/ IM-rI圖4-2棋盤(pán)實(shí)現(xiàn)核心代碼下棋算法的實(shí)現(xiàn)圖4-3五子棋下棋界面當(dāng)玩家在選擇是否單機(jī)或聯(lián)機(jī)以后,就可以下棋了,圖4-1顯示了玩家單機(jī)游戲的界面,無(wú)論是人機(jī)五子棋,還是人人五子棋在下棋的動(dòng)作方面都如圖4-1所示的方法來(lái)顯示。其落子的判定是根據(jù)玩家的鼠標(biāo)點(diǎn)擊來(lái)獲取時(shí)間源,然后對(duì)鼠標(biāo)點(diǎn)擊時(shí)間判定,獲取鼠標(biāo)點(diǎn)擊坐標(biāo)。獲取坐標(biāo)以后,首先需要判定這個(gè)坐標(biāo)點(diǎn)有無(wú)已經(jīng)存在的棋子,若存在則點(diǎn)擊無(wú)效,若不存在,則根據(jù)坐標(biāo)與最近的十字交叉點(diǎn)相匹配。獲取十字交叉點(diǎn)以后,則系統(tǒng)畫(huà)出相對(duì)應(yīng)的黑白棋子,下棋子事件就成功了。若玩家選取的是單機(jī)游戲,則可以選取難度,每個(gè)難度等級(jí)都有對(duì)應(yīng)的算法。三個(gè)難度選擇不同,對(duì)應(yīng)的算法不同。系統(tǒng)定義為簡(jiǎn)單的時(shí)候只能滿(mǎn)足以下情況:當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況下就會(huì)繼續(xù)補(bǔ)齊到第四顆棋子,然后繼續(xù)1號(hào)操作。其他情況則不攔截。系統(tǒng)定義為中等難度時(shí)候會(huì)滿(mǎn)足當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況下就會(huì)繼續(xù)補(bǔ)齊到第四顆棋子,然后繼續(xù)1號(hào)操作。當(dāng)計(jì)算出的對(duì)方已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況就會(huì)主動(dòng)去攔截。當(dāng)為四三連(三三連)連的時(shí)候它不攔截系統(tǒng)定義為困難難度時(shí)候會(huì)滿(mǎn)足當(dāng)計(jì)算出的自己已經(jīng)有四個(gè)連珠并且至少有一個(gè)沒(méi)有被其他顏色棋子攔截的情況下,就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算出的對(duì)方已經(jīng)有四個(gè)連珠并且沒(méi)有被攔截住的情況就會(huì)去攔截。當(dāng)計(jì)算出的自己已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況下就會(huì)繼續(xù)補(bǔ)齊到第四顆棋子,然后繼續(xù)1號(hào)操作。當(dāng)計(jì)算出的對(duì)方已經(jīng)有三個(gè)連珠并且沒(méi)有被攔截的情況就會(huì)主動(dòng)去攔截。當(dāng)計(jì)算機(jī)即將出現(xiàn)四三連的情況時(shí)候,計(jì)算機(jī)就會(huì)自動(dòng)去補(bǔ)齊。當(dāng)計(jì)算機(jī)即將出現(xiàn)三三連的情況時(shí)候,計(jì)算機(jī)就會(huì)自動(dòng)去補(bǔ)齊。困難等級(jí)的難度所有三子以上的情況都會(huì)攔截

*入如果E姓有子,表示像位置不可再下子,皿值為0;Lv-lu嗡為1-1明新為初湎,Lv-lu嗡為1-1明新為初湎,1日1呢值為1融,表示優(yōu)糕為14>value'直為99%優(yōu)先策為25、vmlu嘴邠昵,優(yōu)先我為3僅廿日l(shuí)u21為97%優(yōu)先期為4累7、valu既為96。,優(yōu)先級(jí)為5'Lvalu噌為95。,優(yōu)相媯6壯都融他或蒯敗的耽。9審余情冊(cè)11a時(shí)雅,采物值媚口即肪極位酶五個(gè)了(肪煽的翩下,自己就端住肪,優(yōu)先嬲次)身嗚三下泰立戈崩四三浬(四匹莒)(優(yōu)先級(jí)第三)如寸方F亥立強(qiáng)就四三連(四匹連)(優(yōu)先級(jí)第四)即自己極位翻三連(三三連)(優(yōu)撼第五)朝方下宏澧前三隹三三運(yùn))(幡提即)圖4-4五子棋落子點(diǎn)的判斷原則圖4-5五子棋獲勝判定界面完成判斷勝負(fù)的功能圖4-5五子棋獲勝判定界面當(dāng)棋局在橫、豎、斜任意一個(gè)方向連著五個(gè)顏色相同棋子的時(shí)候,在這時(shí)候系統(tǒng)就會(huì)判斷,若是黑子,則系統(tǒng)判斷黑棋獲勝,且彈出一個(gè)黑棋獲勝的對(duì)話(huà)框,如圖4-3所示。當(dāng)系統(tǒng)判定某種棋子獲勝后,就代表本局已經(jīng)結(jié)束了,玩家可以點(diǎn)擊開(kāi)始游戲重新開(kāi)始下一局。也可以在換難度以后,再?gòu)男麻_(kāi)始游戲。判斷勝負(fù)關(guān)鍵代碼如圖4-6所示:][T|ServerjavaleciaionTree.java I工]J[co-n.java][T|Serverjava案檢重是否一方己匣茯牲口儂有獲勝,一工白旗獲勝串二黑握我勝,工和根*/public土rvbi&Win(){f&r(inti=0j£<jrowji-i-i-)fcr(in±j=-@;jCl口卬-a:j十十)(lf(po5ition[i][j]==l&&position[i][□+L]=lS&pos5tiDn[i][j+2]==lSAposition[I][j+3]==1&8po5ition[i][jM-]==l){r&turn1;if(position[i][j]==-1&&position[i][j4-1]==-iS&pasi+ion[i][j+2]=

&&pD5ition[i][j+3]==-l&&po5ition[i][j+4]==-1Hreturn-1:for(inti=0;i<rt?w-4;1+-1-)for(±nt3=0;j<rowjj++){if(position[1][j]==l&aposition[i+l][j]|==l&&position[i+2][j]==lSLStposition[i-i-3][j]==l&&pDsi-tion[i-i-4][j]==!)-{re±urn1jif(position[i][j]==-l&&po5ition[i+l][j]==-14Spa5ition[i42][j]=

Apposition[1+-3][j]==-Imposition[i-i-4J[j]==-l){return-1jH 正對(duì)角殘TOC\o"1-5"\h\zfor(int1-0ji<rcnv-4; ;for(intj=0; j++){±T(pD5ition[i][j]==l&&positiDn[ii-l][j+l]==l&&positian[ii-2][j+2]==l&&pos-ition[i+3][j+3]==l&&position[i+4][j+-4] ){return1;i-f{position[i][j]==-l&&position[l-i-l][j+l]==-lS&position[1+2][j+2]==-l3t&positicn[i+3][j+B]==IfiAp-ositicn[i+4]Ej+4]==-1);return-1j//: 反對(duì)再送for(inti=0;i<r*aw-4;i-n-)for(intj=4.;j<row;j++Xif(position_i_[jJ--l&Sposition|_i-i-l_[j-1J-=18iSposition|_i+2][j

4&positicn[i+3][j-3]==l&&positicn[1+4][j-4]==l){return1jif(position'i'[jl---ia8po5ition[ii-1-[j-ll---18&po5ition-i+2][j&&position[i+3][j-3]==-l&&position[i-t4][j-4]==-1)」return-1;// 還沒(méi)有下完for(inti;i<roh/jL4-+JFor(in-kj=@3jVrow]j+4)if(position[i][j]==0)return目;return2;圖4-6五子棋獲勝判斷系統(tǒng)測(cè)試1)測(cè)試的重要性軟件的測(cè)試在軟件生命周期中占據(jù)重要的地位,在傳統(tǒng)的瀑布模型中,軟件測(cè)試學(xué)僅處于運(yùn)行維護(hù)階段之前,是軟件產(chǎn)品交付用戶(hù)使用之前保證軟件質(zhì)量的重要手段。近來(lái),軟件工程界趨向于一種新的觀點(diǎn),即認(rèn)為軟件生命周期每一階段中都應(yīng)包含測(cè)試,從而檢驗(yàn)本階段的成果是否接近預(yù)期的目標(biāo),盡可能早的發(fā)現(xiàn)錯(cuò)誤并加以修正,如果不在早期階段進(jìn)行測(cè)試,錯(cuò)誤的延時(shí)擴(kuò)散常常會(huì)導(dǎo)致最后成品測(cè)試的巨大困難。事實(shí)上,對(duì)于軟件來(lái)講,不論采用什么技術(shù)和什么方法,軟件中仍然會(huì)有錯(cuò)。采用新的語(yǔ)言、先進(jìn)的開(kāi)發(fā)方式、完善的開(kāi)發(fā)過(guò)程,可以減少錯(cuò)誤的引入,但是不可能完全杜絕軟件中的錯(cuò)誤,這些引入的錯(cuò)誤需要測(cè)試來(lái)找出,軟件中的錯(cuò)誤密度也需要測(cè)試來(lái)進(jìn)行估計(jì)。測(cè)試是所有工程學(xué)科的基本組成單元,是軟件開(kāi)發(fā)的重要部分。自有程序設(shè)計(jì)的那天起測(cè)試就一直伴隨著。統(tǒng)計(jì)表明,在典型的軟件開(kāi)發(fā)項(xiàng)目中,軟件測(cè)試工作量往往占軟件開(kāi)發(fā)總工作量的40%以上。而在軟件開(kāi)發(fā)的總成本中,用在測(cè)試上的開(kāi)銷(xiāo)要占30%到50%。如果把維護(hù)階段也考慮在內(nèi),討論整個(gè)軟件生存期時(shí),測(cè)試的成本比例也許會(huì)有所降低,但實(shí)際上維護(hù)工作相當(dāng)于二次開(kāi)發(fā),乃至多次開(kāi)發(fā),其中必定還包含有許多測(cè)試工作。在實(shí)踐中,軟件測(cè)試的困難常常使人望而卻步或敷衍了事,這是由于對(duì)測(cè)試仍然存在一些不正確的看法和錯(cuò)誤的態(tài)度,這包括:認(rèn)為測(cè)試工作不如設(shè)計(jì)和編碼那樣容易取得進(jìn)展難以給測(cè)試人員某種成就感;以發(fā)現(xiàn)軟件錯(cuò)誤為目標(biāo)的測(cè)試是非建設(shè)性的,甚至是破壞性的,測(cè)試中發(fā)現(xiàn)錯(cuò)位是對(duì)責(zé)任者工作的一種否定;測(cè)試工作枯燥無(wú)味,不能引起人們的興趣;測(cè)試工作是艱苦而細(xì)致的工作;對(duì)自己編寫(xiě)的程序盲目自信,在發(fā)現(xiàn)錯(cuò)誤后,顧慮別人對(duì)自己的開(kāi)發(fā)能力的看法。這些觀點(diǎn)對(duì)軟件測(cè)試工作是極為不利的,必須澄清認(rèn)識(shí)、端正態(tài)度,才可能提高軟件產(chǎn)品的質(zhì)量。(2)測(cè)試的目的如果測(cè)試的目的是為了盡可能多地找出錯(cuò)誤,那么測(cè)試就應(yīng)該直接針對(duì)軟件比較復(fù)雜的部分或是以前出錯(cuò)比較多的位置。軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程;測(cè)試是為了證明程序有錯(cuò),而不是證明程序無(wú)錯(cuò)誤;一個(gè)好的測(cè)試用例是在于它能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤;一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。這種觀點(diǎn)可以提醒人們測(cè)試要以查找錯(cuò)誤為中心,而不是為了演示軟件的正確功能。但是僅憑字面意思理解這一觀點(diǎn)可能會(huì)產(chǎn)生誤導(dǎo),認(rèn)為發(fā)現(xiàn)錯(cuò)誤是軟件測(cè)試的唯一目,查找不出錯(cuò)誤的測(cè)試就是沒(méi)有價(jià)值的,事實(shí)并非如此。首先,測(cè)試并不僅僅是為了要找出錯(cuò)誤。通過(guò)分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的分布特征,可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前所采用的軟件過(guò)程的缺陷,以便改進(jìn)。同時(shí),這種分析也能幫助我們?cè)O(shè)計(jì)出有針對(duì)性地檢測(cè)方法,改善測(cè)試的有效性。其次,沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的,完整的測(cè)試是評(píng)定測(cè)試質(zhì)量的一種方法。測(cè)試計(jì)劃界面功能測(cè)試(1)測(cè)試目標(biāo):系統(tǒng)界面按鈕的可用性。(2)測(cè)試時(shí)間:2017年3月20日(3)測(cè)試步驟:1、點(diǎn)擊界面上每個(gè)可點(diǎn)擊的SWING組件

2、測(cè)試被點(diǎn)擊組件是否能夠按照預(yù)想的目標(biāo)運(yùn)行。(4)測(cè)試結(jié)果:測(cè)試結(jié)果為該系統(tǒng)所以按鈕都可以正常運(yùn)行。圖4-7界面功能測(cè)試結(jié)果單機(jī)游戲測(cè)試(1)測(cè)試目標(biāo):?jiǎn)螜C(jī)游戲是否正常。(2)測(cè)試時(shí)間:2017年4月26日(3)測(cè)試步驟:1、選擇單機(jī)游戲2、選擇難度2、點(diǎn)擊棋盤(pán),然后測(cè)試各種數(shù)據(jù)。(4)測(cè)試結(jié)果:測(cè)試結(jié)果為該模塊可以正常運(yùn)行。

圖4-8單機(jī)游戲測(cè)試結(jié)果聯(lián)網(wǎng)游戲測(cè)試(1)測(cè)試目標(biāo):聯(lián)網(wǎng)游戲是否正常。(2)測(cè)試時(shí)間:2017年5月11日(3)測(cè)試步驟:1、選擇聯(lián)機(jī)游戲,然后等待。2、另外選擇一臺(tái)電腦安裝相同的環(huán)境,進(jìn)行聯(lián)網(wǎng)測(cè)試3、聯(lián)網(wǎng)測(cè)試2、點(diǎn)擊棋盤(pán),然后測(cè)試各種數(shù)據(jù)。(4)測(cè)試結(jié)果:測(cè)試結(jié)果為該模塊可以正常運(yùn)行。

圖4-9聯(lián)網(wǎng)游戲測(cè)試結(jié)果測(cè)試結(jié)果系統(tǒng)的測(cè)試是在軟硬件配置都符合標(biāo)準(zhǔn)的情況下進(jìn)行的,主要是對(duì)系統(tǒng)的功能進(jìn)行測(cè)試,通過(guò)每一項(xiàng)功能的分類(lèi),用不同的步驟,然后進(jìn)行反復(fù)的測(cè)試過(guò)程,查看系統(tǒng)的各項(xiàng)功能的配合度,系統(tǒng)的穩(wěn)定性以及系統(tǒng)的人性化程度,最后系統(tǒng)通過(guò)所有的測(cè)試,系統(tǒng)功能已達(dá)到預(yù)期的目標(biāo),系統(tǒng)是實(shí)用性較高,是一個(gè)穩(wěn)定、便捷、人性化的系統(tǒng)。第五章總結(jié)與展望隨著大學(xué)生活接近尾聲,我們已經(jīng)忙碌了幾個(gè)月的畢業(yè)設(shè)計(jì)也接近尾聲了,因?yàn)楣ぷ髁?,所以畢業(yè)設(shè)計(jì)能花費(fèi)的時(shí)間就比較有限,但是在我的指導(dǎo)老師曾玉老師的細(xì)心指導(dǎo)下,我還是能夠按部就班,把我的五子棋設(shè)計(jì)功能基本實(shí)現(xiàn)?;叵胛掖髮W(xué)四年時(shí)光,我成長(zhǎng)了很多,做好了踏進(jìn)社會(huì)的準(zhǔn)備。在這幾年里,有太多的東西需要我去學(xué)習(xí),在老師的細(xì)心指導(dǎo)以及同學(xué)的熱心幫助下,我能夠順利完成學(xué)業(yè)。大家都說(shuō)大學(xué)是學(xué)校與社會(huì)的過(guò)渡期。在這個(gè)象牙塔里,我們有我們的規(guī)則,我們是有著學(xué)生氣息的半個(gè)社會(huì)人,我們有我們的生活,有緊張的學(xué)習(xí),有悠閑的社交生活等等。這些都是我們成長(zhǎng)的來(lái)源。在完成畢業(yè)設(shè)計(jì)的幾個(gè)月中,我們學(xué)院的老師嚴(yán)謹(jǐn)、認(rèn)真的為每位同學(xué)分配題目,并分配指導(dǎo)老師,讓老師與我們有面對(duì)面交流的機(jī)會(huì)。在曾玉老師的細(xì)心指導(dǎo)下,讓我不論在需求分析還是在代碼實(shí)現(xiàn)上都少走很多彎路。使得我在完成畢業(yè)設(shè)計(jì)前,再次鞏固我們以前學(xué)習(xí)的知識(shí),并且讓我把理論和實(shí)踐聯(lián)系起來(lái),同時(shí)也是對(duì)我動(dòng)手能力的一次大大的提升。也讓我順利的走入社會(huì),以更專(zhuān)業(yè)的精神投身于社會(huì)事業(yè)當(dāng)中去。這次畢業(yè)設(shè)計(jì)讓我明白了要做好一件事,必須反復(fù)斟酌,細(xì)心努力。雖然畢業(yè)設(shè)計(jì)很繁瑣,但這樣能讓我們?cè)诋厴I(yè)前靜下心來(lái)做好每一件小事,我會(huì)把這種精神帶到工作中去,堅(jiān)持一絲不茍,堅(jiān)持分毫不差。致謝時(shí)光如梭,四年的大學(xué)生活也轉(zhuǎn)瞬即逝,很快就要離開(kāi)這個(gè)留下無(wú)數(shù)沒(méi)好回憶,承載這我們青春的美麗校園,離開(kāi)朝夕相處的同學(xué)和傳道、授業(yè)、解惑的恩師,心里十分不舍。在這里感謝你們?cè)谶@四年里對(duì)我的關(guān)心和幫助。本次畢業(yè)設(shè)計(jì)接近尾聲,在這里我要感謝我的指導(dǎo)老師曾老師幾個(gè)月來(lái)對(duì)我的耐心指導(dǎo)與幫助。如果沒(méi)有曾老師的幫助我想要完成本次設(shè)計(jì)要走很多彎路。為了讓我們能更實(shí)際的了解我選擇的算法設(shè)計(jì),曾玉老師經(jīng)常為為我們講解算法的相關(guān)思維。在設(shè)計(jì)的過(guò)程中,我遇到了很多算法設(shè)計(jì)和網(wǎng)絡(luò)編程等方面的問(wèn)題,每當(dāng)這個(gè)時(shí)候,曾老師都會(huì)耐心的為我講解,結(jié)合一些實(shí)際例子加以說(shuō)明,為我提供了很大的幫助。在做畢業(yè)設(shè)計(jì)這段時(shí)間里,我學(xué)到了很多課堂上沒(méi)有學(xué)到的知識(shí)。本次設(shè)計(jì)使我對(duì)大學(xué)學(xué)習(xí)有了一個(gè)系統(tǒng)的總結(jié),使我受益匪淺。在設(shè)計(jì)期間,還要感謝同學(xué)們對(duì)我的莫大幫助,他的幫助使我的設(shè)計(jì)過(guò)程更順利。最后還要感謝所有教過(guò)我的老師,沒(méi)有你們對(duì)我知識(shí)的積累,我就不可能在今天完成我的設(shè)計(jì)。謝謝大家。附錄JIcon.java程序:publicclassJIconextendsJComponent{privatestaticfinallongserialVersionUID=-3561538747578591700L;privatestaticintLENGTH=25;Colorwhite=newColor(245,245,245);Colorblack=newColor(40,40,40);intcolor;publicJIcon(intcolor){super();this.color=color;}publicvoidpaintComponent(Graphicsg){setForeground(newColor(175,203,190));g.fillRect(0,0,LENGTH,LENGTH);Colorc=(color==1)?black:white;g.setColor(c);g.fillOval(0,0,LENGTH,LENGTH);}}Qipan.java部分程序:packagegomoku;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.util.Random;importjavax.swing.*;/**構(gòu)造棋盤(pán)和算法**//**原則:1、如果已經(jīng)有子,表示該位置不可再下子,value值為0;2、value值為1-100,表示為初始值;3、value值為1000,表示優(yōu)先級(jí)為1 即自己下該位置就五

即對(duì)方下該位置就五個(gè)了(自己必贏的情況下,優(yōu)先級(jí)最高)即對(duì)方下該位置就五*4、value值為990,優(yōu)先級(jí)為2個(gè)了(對(duì)方必贏的情況下,自己就該堵住對(duì)方,優(yōu)先級(jí)其)次即自己下該位置就即對(duì)方下該位置就即自己下該位置就即對(duì)方下該位置就5、value值為980,優(yōu)先級(jí)為3四三連(四四連即自己下該位置就即對(duì)方下該位置就即自己下該位置就即對(duì)方下該位置就6、value值為970,優(yōu)先級(jí)為4四三連(四四連)(優(yōu)先級(jí)第四)7、value值為960,優(yōu)先級(jí)為5三連(三三連)(優(yōu)先級(jí)第五)*8、value值為950,優(yōu)先級(jí)為6三連(三三連)(優(yōu)先級(jí)第六)*以上都是必勝或者必?cái)〉那闆r。*9、其余情況從100為始值,采取加值處理。*/publicclassQipanextendsJComponentimplementsRunnable{privatestaticfinallongserialVersionUID=5607961251631823404L;publicstaticintdifficulty=1;//難度privatestaticintstartX=20;//棋盤(pán)畫(huà)線(xiàn)的起始位置。privatestaticintrow=15;//五子棋盤(pán)的行列數(shù)privatestaticintdot_r=5;//棋盤(pán)中標(biāo)記點(diǎn)的半徑privatestaticintqizi_r=13;//棋子的半徑。privatestaticintdefaultLevel=3;publicint[][]position;//標(biāo)記棋盤(pán)中的棋子,無(wú)棋子為0,白棋為-1,黑棋為1.privateint[][]qizi;〃標(biāo)記棋盤(pán)中的棋子,無(wú)棋子為0,白棋為-1,黑棋為1.privateint[][]value;privateintresult=0;//標(biāo)記結(jié)果,0,正在對(duì)局;1,黑勝;-1,白勝;2,和棋。privateintcurrentX=-1;privateintcurrentY=-1;privateintBLACK=1;privateintWHITE=-1;privatebooleanfinished=true;privateDatabestPosition;Randomrand=newRandom();Colorwhite=newColor(245,245,245);Colorblack=newColor(40,40,40);publicDatagetBestPosition(){returnbestPosition;}publicvoidsetFinish(){

finished=true;}publicbooleanisFinished(){returnfinished;}publicintgetCurrentX(){returncurrentX;}publicvoidsetCurrentX(intcurrentX){this.currentX=currentX;}publicintgetCurrentY(){returncurrentY;}publicvoidsetCurrentY(intcurrentY){this.currentY=currentY;}publicstaticintgetRow(){returnrow;}publicintgetResult(){returnresult;}publicvoidsetResult(intresult){this.result=result;}publicQipan(){super();position=newint[row][row];qizi=newint[row][row];value=newint[row][row];}//value的初值設(shè)為越靠近中間的越大。publicvoidinit(){result=0;for(inti=0;i<row;i++){for(intj=0;j<row;j++){position[i][j]=0;7));value[i][j]=(8-Math.abs(i-7))*(8-Math.abs(j-7));//System.out.print(value[i][j]+"\t");}//System.out.println();}copyToQizi();currentX=-1;currentY=-1;}publicvoidcopyToQizi(){for(inti=0;i<row;i++)for(intj=0;j<row;j++)qizi[i][j]=position[i][j];}publicvoidpaint(Graphicsg){setForeground(Color.orange);g.fillRect(0,0,459,459);//畫(huà)線(xiàn)g.setColor(Color.black);for(inti=0;i<15;i++){g.drawLine(startX,startX+30*i,startX+14*30,startX+30*i);g.drawLine(startX+30*i,startX,startX+30*i,startX+30*14);}//畫(huà)標(biāo)記點(diǎn)g.setColor(Color.black);g.fillOval(startX+30*3-dot_r,startX+30*3-dot_r,2*dot_r,2*dot_r);g.fillOval(startX+30*11-dot_r,startX+30*3-dot_r,2*dot_r,2*dot_r);g.fillOval(startX+30*3-dot_r,startX+30*11-dot_r,2*dot_r,2*dot_r);g.fillOval(startX+30*11-dot_r,startX+30*11-dot_r,2*dot_r,2*dot_r);g.fillOval(startX+30*7-dot_r,startX+30*7-dot_r,2*dot_r,2*dot_r);//畫(huà)棋子for(inti=0;i<row;i++)for(intj=0;j<row;j++){if(qizi[i][j]==-1){g.setColor(white);g.drawOval(startX+30*i-qizi_r,startX+30*j-qizi_r,2*qizi_r,2*qizi_r);g.fillOval(startX+30*i-qizi_r,startX+30*j-qizi_r,2*qizi_r,2*qizi_r);}elseif(qizi[i][j]==1){g.setColor(black);g.drawOval(startX+30*i-qizi_r,startX+30*j-qizi_r,2*qizi_r,2*qizi_r);g.fillOval(startX+30*i-qizi_r,startX+30*j-qizi_r,2*qizi_r,2*qizi_r);}}if(currentX!=-1&&curre

溫馨提示

  • 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)論