版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、. . . . 第一章 緒論1.1開發(fā)背景:游戲軟件是當今世界發(fā)展最迅速,最有影響力,最有潛力與活力的領域之一游戲軟件深受廣大青年人喜愛,而且在發(fā)達國家中老年人也有大部分喜歡游戲的,因此游戲軟件在很大程度上給予絕大部分人精神上的娛樂第二次世界大戰(zhàn)以后,電子計算機技術得到了突飛猛進的發(fā)展先是由晶體管代替了笨重的真空管,后來出現(xiàn)了集成電路和大規(guī)模集成電路,使電子子計算機一代一代實現(xiàn)更新,同時軟件技術也發(fā)展迅速在美國,集中了許多計算機軟件的設計人才,他們工作之余,時常喜愛編一種能與人斗智的“游戲”,以此來鍛煉編程的能力這種“游戲”花樣繁多,但其特點都是利用計算機軟件事先設計好的“分析”“判斷”能力反
2、過來與人較量由于不斷修改更新,使計算機的“智力”水平與人難分高低到了90年代,游戲軟件已經(jīng)為世界各國的人使用,BLACKISLAND和Blizzard.這兩個強大的游戲制作組起到了巨大的帶動作用,還有中國的洛河工作室在國也起到了巨大作用,他們讓很多很多人喜歡上了游戲軟件,打開了這個市場。如今游戲軟件產(chǎn)業(yè)已經(jīng)受到了廣泛的關注,它年輕有潛力而且吸引人,讓人們?nèi)找尕S富的生活需求得以滿足。五子棋游戲更是吸引著不同年齡段的人群,無論男女老少都可以玩,都喜歡玩,而當前微型計算機已經(jīng)是在廣大人群中流行著,用電腦來下五子棋更是一種時尚。五子棋相傳起源于四千多年前的堯帝時期,比圍棋的歷史還要悠久,可能早在“堯造
3、圍棋”之前,民間就已有五子棋游戲。有關早期五子棋的文史資料與圍棋有相似之處,因為古代五子棋的棋具與圍棋是完全一樣的。在上古的神話傳說中有“女媧造人,伏羲做棋”一說,增山海經(jīng)中記載:“休輿之山有石焉,名曰帝臺之棋,五色而文狀鶉卵?!鄙谱⒁龂舅嚱?jīng)中曰:“棋局,縱橫各十七道,合二百八十九道,白黑棋子,各一百五十枚”。可見,五子棋頗有淵源。亦有傳說,五子棋最初流行于少數(shù)民族地區(qū),以后漸漸演變成圍棋并在炎黃子后代中遍與開來,可以說五子棋是我們的國粹之一了。而當前五子棋程序的發(fā)展也非常快,從最初的雙人發(fā)展到人機(有AI),然后到現(xiàn)在的網(wǎng)絡對戰(zhàn),已經(jīng)受到越來越多人的喜愛和重視。1.2課題意義:人類之所以
4、不斷在進步,是因為我們?nèi)祟愐恢辈粩嗟脑谒伎?,五子棋游戲程序的開發(fā)符合人類進步也是促進人類進步的一大動力之一。五子棋游戲程序讓人們方便快捷的可以下五子棋,讓人們在何時都能通過下棋來提高邏輯思維能力,同時也培養(yǎng)兒童的興趣以與愛好,讓孩子更加聰明。同時,五子棋游戲程序的開發(fā)也使得五子棋這個游戲得到了廣泛的推廣,讓世界各地的人們知道五子棋,玩上五子棋,這已經(jīng)不是局限。五子棋游戲程序使得越來越多的人喜歡上了五子棋,熱愛下五子棋,它是具有很好的帶動性的。隨著互聯(lián)網(wǎng)絡的不斷普與,越來越多的人可以在網(wǎng)絡上就能夠與他人下五子棋了。1.3五子棋游戲的發(fā)展與現(xiàn)狀:目前,連珠這一棋類運動已迅速在國際上發(fā)展起來。外國人
5、都十分看好這一不 起眼的智力游戲,并認為五子棋不僅能提高思維、開發(fā)智力、手腦并用、修身養(yǎng)性 而且富含哲理,具有的神秘和西方的直觀,是中西文化的交匯點。許多國家的人對五子棋都有不同的愛稱,例如國人把五子棋稱之為“情侶棋”,言下之意是情人之間下五子棋有利于增加情感的交流;歐洲人稱之為“中老年棋”,表示五子棋適合中老年人的生理特點和思維方式;美洲人喜歡將五子棋稱之為“商業(yè)棋”,就是說商人談生意時可邊下棋邊談生意,棋下完了生意也談成了。由此可見,盡管國度不同,語言各異,但人們都可以借助五子棋這一簡單而又深奧的棋藝進行交流、比賽,增進友誼。當前,有多個國家和地區(qū)都在下五子棋,并有各種規(guī)模和級別的比賽。年
6、月在日本京都、年月在俄羅斯聯(lián)邦的莫斯科、年月在瑞典、年月在愛沙尼亞的塔林分別舉行了第一、二、三、四屆世界錦標賽。除第三屆的冠軍是愛沙尼亞人之外,其余三屆的冠軍都是日本人。五子棋 的世界錦標賽,每兩年舉辦一次,其申國競爭也十分激烈。日本目前擁有自己的五子棋職業(yè)棋手,并且對連珠(五子棋)技術的研究也相當普遍和全面,就水平也正在日益增強。同時,五子棋的理論研究與探索也呈現(xiàn)蓬勃發(fā)展的勢頭,從年第一部五子棋專著問世以來,目前,全世界有多種五子棋的書籍與期刊,分別以日文、俄文、英文、瑞典文與中文。五子棋在我國的、等?。▍^(qū))市都有很大的發(fā)展。多次舉辦了地區(qū)的五子棋賽,如“思曼杯”、“京空杯”、“奇奇童杯”、
7、“第六屆民族團結(jié)杯”和“第四豈民族運動會”的五子棋比賽。地區(qū)舉辦了“上文杯”五子棋大賽。省以與其他省市亦舉辦過許多五子棋比賽。所有這些賽事都越來越多地吸引了無數(shù)人們的關注,表明了根埴于中國的五子棋有著廣泛的群眾基礎,是群眾喜聞樂見的體育活動。而現(xiàn)在,很多很多游戲平臺上面都有五子棋游戲供我們玩,任何游戲平臺上面只要有棋牌類游戲的,那么它就有五子棋在里面,網(wǎng)絡五子棋比賽,在聯(lián)眾,263, 游戲,UC里進行了10幾年了可見,五子棋游戲在網(wǎng)絡上面是非?;鸨┑?,而且在棋牌游戲里面玩家人數(shù)排名總會占到很前面,不愧是風靡全球的棋牌游戲??!在未來中,將會有越來越多的人關注五子棋,喜歡五子棋,那么將其變?yōu)樯虡I(yè)化
8、也會越來越多,而且還可以以教育孩子的方式來將其嵌套進去,或者用來做測試等等,可以說以后的五子棋游戲會是那么的精彩,那么的讓人憧憬。那么對于它的游戲開發(fā)和發(fā)展也將會上升到舉足輕重的地位去,它的發(fā)展會是相當之快的,就讓我們拭目以待吧。1.4論文的組織結(jié)構(gòu):本文由第一章緒論,第二章介紹軟件的基本功能和特點,第三章軟件的總體設計,第四章軟件各個功能的設計與實現(xiàn),第五章總結(jié),參考文獻和致七部分組成。第一章緒論由研究背景、五子棋的發(fā)展前景、五子棋程序的基本步驟和本文的組織結(jié)構(gòu)組成。第二章介紹軟件的開發(fā)工具和和軟件的基本功能,另外介紹軟件所要實現(xiàn)的目標。第三章軟件總體設計和軟件的總體分析。第四章詳細分析軟件
9、各模塊的設計與實現(xiàn)包括繪制棋盤、下棋功能、判斷勝負、下棋信息、時間設置、認輸以與悔棋等功能組成。第五章介紹軟件的操作以與演示。最后第六章為總結(jié)和致。第二章 五子棋程序的介紹與規(guī)劃2.1軟件的基本功能:1 顯示一個十九行十九列的圍棋棋盤。2 在棋盤上面在對應位置通過點擊鼠標下子,棋盤上將在相應的位置上顯示棋子,并且棋子在橫縱交點上。3 可以自動判斷游戲是否結(jié)束,是否黑方或者是白方已經(jīng)勝利,并且跳出對話框來提示玩家。4 在游戲棋盤上方會有一個游戲信息,這個游戲信息是用來提示當前是黑白雙方的哪一方下子,玩家可以根據(jù)這個提示來相應的下棋,而不會導致不清楚輪到哪一方下棋。5 可以重新開始游戲,并且有認輸
10、功能,在下棋提示上提示哪方時點認輸,哪一方就輸了,并且有悔棋功能。6 還可以對游戲時間進行設置,判斷是否超出規(guī)定的時間,如果超出時間則自動判斷為輸。2.2開發(fā)運行環(huán)境:1. 中心處理器:雙核1.6GHZ;2. 存:1G;3. 硬盤:320G;4. 操作系統(tǒng):WINDOWSXP;5. 開發(fā)工具:MyEclipse7.5;6. 編程語言:JAVA。2.3軟件的開發(fā)手段以與工具的介紹:此軟件我是通過MyEclipse這個開發(fā)軟件來開發(fā)的,用的是JAVA語言編寫。將會用到Swing來編程序,Swing是在JAVA的基礎圖形化用戶界面AWT的基礎上拓展的API集,Swing的功能是通過JAVA代碼編寫窗
11、口程序,創(chuàng)建圖形化的用戶界面(GUI)。Swing可以創(chuàng)建窗體、面版,在窗口中導入或者繪制圖片,或者輸入文本信息等等,結(jié)合JAVA的JDBC和/或IO操作可以實現(xiàn)數(shù)據(jù)的保存。Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動態(tài)語言。JAVA的特點是:1、Java語言是簡單的。Java語言的語法與C語言和C+語言很接近,使得大多數(shù)程序員很容易學習和使用Java。另一方面,Java丟棄了C+ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉(zhuǎn)換。特別地,Java語言不使用指針,并提供了自動的廢料收集,使得程
12、序員不必為存管理而擔憂。2、Java語言是一個面向?qū)ο蟮?。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制(關鍵字為implements)。Java語言全面支持動態(tài)綁定,而C+ 語言只對虛函數(shù)使用動態(tài)綁定??傊?,Java語言是一個純的面向?qū)ο蟪绦蛟O計語言。3、Java語言是分布式的。Java語言支持Internet應用的開發(fā),在基本的Java應用編程接口中有一個網(wǎng)絡應用編程接口(),它提供了用于網(wǎng)絡應用編程的類庫,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(遠
13、程方法激活)機制也是開發(fā)分布式應用的重要手段。4、Java語言是健壯的。Java的強類型機制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。5、Java語言是安全的。Java通常被用在網(wǎng)絡環(huán)境中,為此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡下載的類具有一個安全防機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。 6、J
14、ava語言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。這種途徑適合于異構(gòu)的網(wǎng)絡環(huán)境和軟件的分發(fā)。 7、Java語言是可移植的。這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強的可移植性,Java編譯器是用Java實現(xiàn)的,Java的運行環(huán)境是用ANSI C實現(xiàn)的。8、Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式, 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。在運
15、行時,Java平臺中的Java解釋器對這些字節(jié)碼進行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運行環(huán)境中。9、Java是高性能的。與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術的發(fā)展越來越接近于C+。 10、Java語言是多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子()類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable) 的構(gòu)造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類
16、創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。 Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制(關鍵字為synchronized)。11、Java語言是動態(tài)的。Java語言的設計目標之一是適應于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。Java語言的優(yōu)良特性使得Java應用具有無比的健壯性和可靠性,這
17、也減少了應用系統(tǒng)的維護費用。Java對對象技術的全面支持和Java平臺嵌的API能縮短應用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次,到處可運行的特性使得它能夠提供一個隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低成本方式。特別是Java企業(yè)應用編程接口(Java Enterprise APIs)為企業(yè)計算與電子商務應用系統(tǒng)提供了有關技術和豐富的類庫。MyEclipse是對Eclipse IDE的擴展,利用它我們可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以與應用程序服務器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML, St
18、ruts, JSF, CSS, Javascript, SQL, Hibernate。在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類:1. J2EE模型2. WEB開發(fā)工具3. E開發(fā)工具4. 應用程序服務器的連接器5. J2EE項目部署服務6. 數(shù)據(jù)庫服務7. MyEclipse整合幫助對于以上每一種功能上的類別,在Eclipse中都有相應的功能部件,并通過一系列的插件來實現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進行單獨的擴展和升級。簡單而言,MyEclipse是Eclipse的插件,也是一款功能強大的J2EE集成開發(fā)環(huán)境,支持代碼編寫、
19、配置、測試以與除錯。2.4軟件的實現(xiàn)目的:五子棋游戲程序所要實現(xiàn)的目的是讓我們可以在電腦上下棋,而不需要去買,可以隨時玩,方便快捷。而且能更好的推廣五子棋于世界各地,此軟件也在于提供給愛好五子棋的人,也吸引更多的人喜歡上五子棋,也具有很大很大的商業(yè)價值。使五子棋游戲程序在以后的制作中功能越來越強大,外觀越來越好看。第三章 軟件總體設計與分析3.1用戶需求分析:通過軟件功能的分析,根據(jù)五子棋愛好者的需求,得出以下需求信息:1. 具有重新開始功能;2. 具有認輸功能;3. 具有提示該輪到哪一方下棋的功能;4. 退出游戲功能;5. 判斷勝負功能;6. 時間設置功能;7. 悔棋功能。還有用戶對游戲界面
20、的要求,通過上述的用戶需求,我們可以得出一個總體的設計方案。由上述的用戶需要,可以對程序的基本功能進行一個有效的分析,規(guī)定下游戲的基本功能,基本功能如下結(jié)構(gòu)圖。3.2軟件功能結(jié)構(gòu)圖:此五子棋程序最主要的四大功能是:下棋,判斷勝負,重新開始與認輸,游戲時間設置。大體的功能如下圖:五子棋程序十九行十九列的棋盤。黑白雙方輪流落子,不能重復落同一位置。在棋盤上下子,棋子落在交點上。判斷橫,豎,斜方向夠五子相連為贏。顯示游戲信息,提示當前輪到哪一方落子。重新開始游戲和認輸以與退出游戲功能。時間設置,在規(guī)定時間內(nèi)下完,否則判輸。3.3軟件各個功能的簡要說明:1. 繪制十九行十九列的棋盤:首先是每行每列的距
21、離都是一樣的,并且棋盤上面有八個星,棋盤中間有個天元點,跟圍棋的棋盤一樣。2. 棋盤上面落子:點擊鼠標以后,會在相應位置落下棋子,并被繪制出來,黑子是一個實心的黑圓,白子是一個實心的白圓加上一個等大空心的黑圓。棋子落在交點上:我們在下五子棋棋的時候,棋子都是會落在交點上的,而并非落在格子里面,那么我們就要規(guī)定當我點擊鼠標時,選取距離鼠標所取點的最近的左上交點為繪制棋子的中心點,那么就可以實現(xiàn)棋子落在交點上了。3. 黑白雙方輪流落子:黑方落子以后就要輪到白方,交替進行,這是下棋的基本要求,因此我們就要弄一個互斥事件進去,讓他們交替的落子。不能落在一樣位置:當我們落子時,會不小心落到一樣位置上去,
22、那么就要出現(xiàn)提示,不能落在一樣位置上,需要重新落子,實現(xiàn)的設想是當這個點已經(jīng)繪制過棋子以后,我們就要給一個布爾變量,讓它為假,那么只能在它為真時才能繪制棋子,否則就要重新落子到別的地方去。4. 判斷輸贏:當五個一樣顏色子都連在了一起的時候,我們就要判其為贏,這五個子可以在橫豎方向上連起,也可以在斜方向上連起。5. 游戲信息:我們應該在棋盤的上面設置一個游戲信息的,用來提示當前輪到哪一方下棋了,以便于玩家知道誰在下,這個功能只要在黑白雙方輪流下棋功能的過程中添加一個提示信息用于顯示到界面上的就可以了。6. 重新開始游戲就是把棋盤上的子全部清空,回復到一開始的時候的狀態(tài),重置之前所有的數(shù)據(jù)。認輸?shù)?/p>
23、功能就是在判斷輸贏功能的基礎上添加的,讓玩家對自己沒信心的時候使用。退出游戲的功能就是直接把窗口關閉就可以了。7. 時間設置:時間設置功能要調(diào)用到線程和監(jiān)聽,他的主要作用是給玩家設置規(guī)定的時間,也是五子棋游戲的一個下法規(guī)則,當哪一個玩家超出了規(guī)定的時間時,那么就會判斷他輸了,并且彈出對話框提示以與重新開始游戲。3.4軟件設計中使用到的JAVA軟件包以與類和方法:在用JAVA設計軟件的時候,使用到SUM公司提供的一些軟件包,這樣使得我們編寫程序更加簡便,以下是使用到的軟件包:Javax.swing.JFrame /javax.swing軟件包提供一組“輕量級”(全部是 Java 語言)組件,盡量
24、讓這些組件在所有平臺上的工作方式都一樣。JFrame 類是java.awt.Frame 的擴展版本,該版本添加了對 JFC/Swing 組件架構(gòu)的支持。JFrame 是用來創(chuàng)建窗體的swing 類,用來創(chuàng)建一個圖形界面的原始窗口,并且可以設置其大小,位置等屬性,是swing 編程的基礎類之一。JFrame這個類中,我們將要用到的主要方法是:setVisible(); /設置窗體是否顯示,里面填上true,那么窗體就可以顯示出來了,如果填false,窗體不顯示。setTitle(); /設置窗體的標題,需要什么標題,就在里面寫上你的標題就可以了,比如我要填入五子棋作為標題,那么可以這樣寫: se
25、tTitle(“五子棋”)。setSize(); /設置窗體大小,這里需要設置的窗體是一個平面的,所以設置窗體大小的時候有高度和寬度這兩個像素,輸入兩個像素就可以確定窗體的大小了。setLocation(); /設置窗體初始顯示的位置,作用是把窗體初始顯示的位置擺到讓用戶看起來舒服的位置。setResizable(); /設置窗體的大小是否可以改變,為了方便用戶使用,可讓用戶自己拉大或者拉小窗體,達到用戶需要的要求。setDefaultCloseOperation(JFrame_EXIT_ON_CLOSE); /設置窗體關閉方式,關閉窗體的同時結(jié)束程序,這樣就不會一直占用用戶的存去運行程序,只
26、要不玩了,程序就會自動關閉,這個是游戲軟件最基礎的以與最必要的一個功能作用。Java.awt /java.awt 軟件包包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類。Java.awt.Toolkit /Toolkit此類是所有 Abstract Window Toolkit 實際實現(xiàn)的抽象超類。Toolkit 的子類被用于將各種組件綁定到特定本機工具包實現(xiàn)。Toolkit.geiDefaultToolkit().getScreenSize().width; Toolkit.geiDefaultToolkit().getScreenSize().height; /以上這兩個方法的作用是取得我們電腦
27、顯示屏幕的寬度以與高度。geiDefaultToolkit()為獲取默認工具包,如果名為"java.awt.headless" 的系統(tǒng)屬性被設置為 true,則使用 Toolkit 的 headless 實現(xiàn)。 如果不存在 "java.awt.headless" 或 "java.awt.headless" 被設置false,且存在名為 "awt.toolkit" 的系統(tǒng)屬性,則該屬性將被視為 Toolkit 子類的名稱;否則將使用特定于平臺的默認 Toolkit 實現(xiàn)。 getScreenSize()這個方法是獲取
28、屏幕的大小。在具有多個顯示屏的系統(tǒng)上,使用主顯示屏。從 GraphicsConfiguration 和 GraphicsDevice 可以獲得多屏幕感知顯示尺寸。Javax.swing.JOptionPane /JOptionPane 有助于方便地彈出要求用戶提供值或向其發(fā)出通知的標準對話框。下面用到JOptionPane 的方法有以下幾個:JOptionPane.showMessageDialog(); /這個方法是顯示一個消息對話框,主要用來提示信息。showMessageDialog(mf,”我要輸入的信息”),這樣用以提示用戶現(xiàn)在的情況。JOptionPane.showConfirmD
29、ialog(); /這個方法跟前一個方法有點類似,不過它是有判斷的。作用是顯示一個確認對話框,用戶選擇對話框中的選項,然后根據(jù)選項返回結(jié)果進行判斷,需要判斷什么,寫程序的時候可以自己添加進去,功能更加強大。JOptionPane.showInputDialog(); /顯示請求用戶輸入容的問題消息對話框,它以 parentComponent 為父級。輸入值將被初始化為 initialSelectionValue。該對話框顯示于 Component 的窗體的上部,通常位于 Component 之下。顯示一個信息輸入對話框,它的作用是用來保存用戶輸入的信息。Java.awt.event.Mouse
30、Listener /MouseLinstener 是鼠標監(jiān)聽,功能是接收用戶通過鼠標所做的操作,可以取得用戶點擊鼠標的坐標,從而進行其他的操作。MouseLinstener的使用方法是需要調(diào)用到JFrame 的 addMouseListener 方法加入監(jiān)聽。它有以下幾個方法,是我們寫程序需要用到和了解的:mouseClicked(MouseEvent e) ; /監(jiān)聽鼠標點擊事件的操作,對鼠標點擊以后進行處理。mouseEntered(MouseEvent e) ; /監(jiān)聽鼠標進入事件的操作,對鼠標進入某個指定區(qū)域以后進行處理。mouseExited(MouseEvent e) ; /監(jiān)聽鼠
31、標離開事件的操作,對鼠標離開某個指定區(qū)域以后進行處理。mousePressed(MouseEvent e) ; /監(jiān)聽鼠標按下事件的操作,對鼠標按下以后進行處理,這個在我們的五子棋用需要著重用到的。mouseReleased(MouseEvent e) ; /監(jiān)聽鼠標抬起事件的操作,對鼠標按下后抬起進行處理。鼠標點擊時執(zhí)行的順序是:mousePrssed à mouseReleased à mouseClicked /由此可以判斷按西與抬起是否在同一個位置。MouseEvent類有以下兩個需要用到的方法:getX() ; /得到鼠標的橫向位置的坐標,用于判斷棋子的位置的時候
32、是需要到的。getY() ; /得到鼠標的縱向位置的坐標,用于判斷棋子的位置的時候是需要到的。Graphics 類, 它的功能是類似于畫筆的功能,用來在窗口中繪制文字以與圖形等。他的調(diào)用是通過覆寫JFrame 的 paint() 方法來使用的,通過 repaint() 方法來調(diào)用。它有以下方法:drawstring() ; /繪制字符串。drawOval() ; /繪制一個空心的圓形,用與繪制我們一會五子棋中的白棋需要到的。fillOval() ; /繪制實心的圓形,也是用到來繪制棋子。drawline() ; /繪制一條直線,用來畫我們的棋盤。drawRect() ; /繪制一個空心的矩形,
33、功能按鈕用到。fillRect() ; /繪制一個實心的矩形。drawImage() ; /繪制一個已經(jīng)存在的圖片,將一個圖片直接顯示到窗體只中去。setColor() ; /設置畫筆的顏色。比如:setColor(Color.RED),那么就把它的顏色設置成了紅色。setFont() ; /設置繪制文字的字體類型。比如:setFont(new Font(“黑體”,10,10),那么它的字體就是黑體,大小是10。Java.io.File /這個是產(chǎn)生中斷并且調(diào)用文件用到的類。Java.io通過數(shù)據(jù)流、序列化和文件系統(tǒng)提供系統(tǒng)輸入和輸出。File 類文件和目錄路徑名的抽象表示形式。Java.aw
34、t.image.BufferedImage /BufferedImage 子類描述具有可訪問圖像數(shù)據(jù)緩沖區(qū)的 Image。BufferedImage 由圖像數(shù)據(jù)的 ColorModel 和 Raster 組成。Raster 的 SampleModel 中 band 的數(shù)量和類型必須與 ColorModel 所要求的數(shù)量和類型相匹配,以表示其顏色和 alpha 分量。所有 BufferedImage 對象的左上角坐標都為 (0, 0)。因此,用來構(gòu)造 BufferedImage 的任何 Raster 都必須滿足:minX=0 且 minY=0。 可以用來調(diào)用一個圖片作為我們下棋的背景圖
35、片使用。 第四章 軟件的具體實現(xiàn)4.1準備工作:首先用MyEclipse來建一個工程,我將此工程的名字命為:fivechess。然后在我所建的工程里建立一個包,包名為fiveframe。再在包里面建立我需要的類,建立一個名字為FiveChessFrame的JAVA類,繼承Javax.swing.JFrame這個類,而且同時引入MouseListener 這個監(jiān)聽的接口,有下面拓展 public class FiveChessFrame extend JFrame implements MouseListener。那么這個類里面就會有監(jiān)聽的一些命令:Overridepublicvoid mous
36、eClicked(MouseEvent e) / TODO Auto-generated method stub /鼠標點擊監(jiān)聽操作。Overridepublicvoid mouseEntered(MouseEvent e) / TODO Auto-generated method stub /鼠標進入監(jiān)聽操作。Overridepublicvoid mouseExited(MouseEvent e) / TODO Auto-generated method stub /鼠標離開監(jiān)聽操作。Overridepublicvoid mousePressed(MouseEvent e) / TODO A
37、uto-generated method stub /鼠標按下監(jiān)聽操作。Overridepublicvoid mouseReleased(MouseEvent e) / TODO Auto-generated method stub /鼠標抬起監(jiān)聽操作。4.2建立游戲窗口界面:開始開發(fā)游戲的第一步就是先制作出游戲的窗口界面,一個漂亮美麗大方的游戲界面,往往先能吸引玩家去嘗試,所以這個地方不能夠馬虎。先把我們需要的窗口按需求創(chuàng)建出來:public FiveChessFrame() /設置標題this.setTitle("五子棋");/窗體大小this.setSize(500,
38、500);/窗體出現(xiàn)位置this.setLocation(width - 500) / 2, (height - 500) / 2);/窗體設置為大小不可變this.setResizable(false);/將窗體的關閉方式設置為默認關閉后程序結(jié)束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/加入鼠標監(jiān)聽this.addMouseListener(this);/將窗體顯示出來this.setVisible(true);然后建立一個測試類,來測試一下我剛才寫的窗口是否符合我的要求:import fiveframe.FiveChessFr
39、ame;publicclass Test publicstaticvoid main(String args)FiveChessFrame ff=new FiveChessFrame();運行這個測試類得到如下窗口:得出這個窗體以后,我們就開始編寫界面,我先是調(diào)用一個圖片作為我這個五子棋程序棋盤的背景,大家都喜歡在木棋盤上面下五子棋,那種會讓人感覺到很高雅,所以我就選了一木質(zhì)的圖片來當我的五子棋的背景圖片。先定義一個背景圖片:/背景圖片BufferedImage bgImage = null ;下面是調(diào)用背景文件,要用try來調(diào)用,要不然會出錯。trybgImage = ImageIO.rea
40、d(new File("e:/JAVA/bg.jpg");catch(Exception e)e.printStackTrace();由上面的語句可以知道我加入的背景圖片存放在e:/JAVA/這個目錄下,現(xiàn)在加入把背景顯示出來的方法:publicvoid paint(Graphics g)/繪制背景g.drawImage(bgImage, 1, 20, this);這樣我們就把背景圖片調(diào)用到了,再看一下現(xiàn)在的窗口界面:現(xiàn)在已經(jīng)可以看到背景圖象了,很有木質(zhì)感,一看到這個背景就讓人有想下棋的沖動,當然,要等程序?qū)懞昧瞬拍芟?。那么,下面我要開始繪制棋盤了,我需要繪制一個十九乘十九
41、的棋盤,繪制棋盤需要注意到的問題是,我們點擊棋盤的時候,會出現(xiàn)跳動也就是屏幕閃爍的問題,因為我們每下一步棋子,都會需要再繪制一次棋盤的。所以我們就要用到雙緩沖技術了,雙緩沖技術的使用會使得屏幕不再閃爍,一般雙緩沖技術用在手機游戲中,因為手機存小,屏幕閃爍問題比較明顯。在畫棋盤的時候需要計算棋盤中每一條線的間距,這里用的是十九乘十九的圍棋棋盤那么總寬度可以為360像素,分成18份,沒分是20像素,總高度也同樣是360像素,如寬度一樣分。實現(xiàn)語句:publicvoid paint(Graphics g)/雙緩沖技術防止屏幕閃爍BufferedImage bi = new BufferedImage
42、(500,500,BufferedImage.TYPE_INT_ARGB);Graphics g2 = bi.createGraphics() ;g2.setColor(Color.BLACK);/繪制背景g2.drawImage(bgImage, 1, 20, this);/控制字體g2.setFont(new Font("黑體",Font.BOLD,20);/輸出標題信息g2.drawString("下棋提示:" , 130, 60);/把前面改過的字體改回來g2.setFont(new Font("宋體",0,14);/輸出時間
43、信息g2.drawString("黑方時間:無限制 ", 30 , 470);g2.drawString("白方時間: 無限制", 260, 470);/添加下棋需要到的功能說明g2.setFont(new Font("黑體",Font.BOLD,15);g2.drawString("開始游戲", 405, 110);g2.drawString("游戲設置", 405, 160);g2.drawString("游戲說明", 405, 210);g2.drawString(&q
44、uot;悔棋", 425, 260);g2.drawString("認輸", 425, 310);g2.drawString("關于", 425, 360);g2.drawString("退出", 425, 410);/繪制棋盤for (int i=0;i<19;i+) g2.drawLine(10, 70+20*i, 370, 70+20*i); g2.drawLine(10+20*i, 70, 10+20*i, 430); /標點位,棋盤上的八個星和一個天元點。 g2.fillOval(68,128,4,4); g
45、2.fillOval(308,128,4,4); g2.fillOval(308,368,4,4); g2.fillOval(68,368,4,4); g2.fillOval(308,248,4,4); g2.fillOval(188,128,4,4); g2.fillOval(68,248,4,4); g2.fillOval(188,368,4,4); g2.fillOval(188,248,4,4); /在背景上繪制以后調(diào)用,實現(xiàn)雙緩沖。 g.drawImage(bi, 0, 0, this);通過上面的幾段代碼,現(xiàn)在就可以得到一個我需要的界面了,那么界面就算是繪制完成了,測試一下看:這就
46、是五子棋游戲的基本界面,以后要補全的功能也在上面了。4.3完成下棋的功能:現(xiàn)在我需要在我完成的游戲界面上可以下棋,也就是可以把通過鼠標點擊,我可以在相應的位置上放下棋子。先繪制棋子,黑棋我用一個實心的黑圓來表示,白棋用一個實心的白圓再加上一個同大小的空心的黑圓來表示通過一個二維的數(shù)組來保存之前已經(jīng)下過的棋子。點擊鼠標對應位置的時候,把棋子落在距離點擊處最近的左上一個交點上,這樣使得棋子都能落在交點上,美觀而且符合五子棋實際下棋的要求:/保存棋子的坐標int x = 0;int y = 0;/保存之前下過的全部棋子的坐標/容為0表示沒有棋子,為1表示黑子,為2表示白子int allChess =
47、 newint1919; /繪制棋子 /*g.fillOval(x, y, 10, 10);*/for (int i = 0; i < 19; i+)for (int j = 0; j < 19; j+) if (allChessij = 1) /黑子int tempX = i * 20 + 10 ;int tempY = j * 20 + 70 ; g2.fillOval(tempX - 7, tempY - 7, 14, 14); if (allChessij = 2) /白子int tempX = i * 20 + 10 ;int tempY = j * 20 + 70 ;
48、g2.setColor(Color.WHITE); g2.fillOval(tempX - 7, tempY - 7, 14, 14); g2.setColor(Color.BLACK); g2.drawOval(tempX - 7, tempY - 7, 14, 14); 點擊鼠標時讓棋子下在棋盤圍之,那么就要用到鼠標按下這個類了:Overridepublicvoid mousePressed(MouseEvent e) / TODO Auto-generated method stub/*System.out.println("X:"+e.getX();System.o
49、ut.println("Y:"+e.getY();*/if (canPlay = true)x = e.getX() ;y = e.getY() ;if (x >= 10 && x <= 370 && y >= 70 && y <= 430) /重新執(zhí)行一次paint()方法this.repaint();那么,下棋的功能就已經(jīng)可以實現(xiàn)了,下棋的時候我們是需要互斥的下子的,先是黑棋下了然后到白棋,而且當棋盤上有棋子的時候就不可以再往那個地方下棋了,所以我們還需要做一下互斥的功能,并用下棋的游戲信息來提示玩
50、家該輪到誰落子了,同時當棋子落在同一個位置的時候,就要放出提示框來提示已經(jīng)有棋子,不能再下棋。/標識當前是黑棋還是白棋下下一步booleanisBlack = true ;/標識當前游戲是否可以繼續(xù)boolean canPlay = true ;/保存顯示的提示信息String message = "黑方先行" ;Overridepublicvoid mousePressed(MouseEvent e) if (canPlay = true)x = e.getX() ;y = e.getY() ;if (x >= 10 && x <= 370 &
51、amp;& y >= 70 && y <= 430) /*System.out.println("在棋盤圍之: " + x + "-" + y);*/x = (x - 10) / 20;y = (y - 70) / 20;if (allChessxy = 0)/判斷要下棋子的顏色if (isBlack = true)allChessxy = 1; isBlack = false ; message = "輪到白方"elseallChessxy = 2;isBlack = true ;message
52、= "輪到黑方"/判斷是否勝利了boolean winFlag = this.checkWin();if (winFlag = true)JOptionPane.showMessageDialog(this, "游戲結(jié)束,"+(allChessxy=1?"黑方":"白方") + "獲勝!");canPlay = false ;else JOptionPane.showMessageDialog(this, "當前有棋子了,請重新下");/重新執(zhí)行一次paint()方法this
53、.repaint();那么現(xiàn)在就可以顯示出我所需要的下棋提示信息了,如下圖:這里就提示出了黑方先行,當黑方落子以后就會提示到白方,但是白棋子要是再落在黑方已經(jīng)落過的位置,那么將回出現(xiàn)提示,讓其重新落子:上面的這些步驟就把下棋的功能完成了,現(xiàn)在可以下棋了。4.4完成判斷勝負的功能:判斷勝負是這個游戲的核心,一個游戲最重要的部分,如果連判斷勝負都不可以實現(xiàn)的話,那么這個游戲程序是沒有用的。依據(jù)五子棋的基本規(guī)則,判斷某一方向上是否有同一顏色的棋子連成五個,如果有,那么游戲就結(jié)束了,并判連成五子的一方獲得了勝利。先判斷橫向的棋子是否可以五連,這里就需要用到了鼠標抬起的監(jiān)聽的類了,先判斷顏色,在判斷橫向
54、夠不夠五個,如下:Overridepublicvoid mouseReleased(MouseEvent e) / TODO Auto-generated method stubprivateboolean checkWin() boolean flag = false ;/保存共有一樣顏色多少棋子相連int count = 1;/判斷橫向有無5連 即縱坐標一樣int color = allChessxy;if (color = allChess x+1y)count+;if(color = allChessx+2y)count+;/用循環(huán)來判斷棋子相連int i = 1;while(colo
55、r = allChessx+iy)count+;i+;i = 1;while(color = allChessx-iy)count+;i+;if (count >= 5) flag = true;現(xiàn)在判斷完了橫向了,下面就是到縱向了,它個橫向的判斷也是差不多的,代碼如下:/縱向判斷int i2 = 1 ;int count2 = 1 ;while(color = allChessxy + i2)count2+;i2+;i2 = 1;while(color = allChessxy - i2)count2+;i2+;if (count2 >= 5) flag = true; 然后是斜方向的判斷,斜方向有四個方向,左上和左下,然后是右上和右下,但是我們可以將它看成兩個方向,就跟前面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024屆新疆巴州三中高三下學期第三次檢測試題數(shù)學試題
- 聲音課件教學
- 2024年甘肅客運從業(yè)資格證考試答題模板
- 2024年南京駕駛員客運資格證考試試題
- 2025屆黑龍江省大慶四中生物高一第一學期期末學業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 2024年烏魯木齊客運從業(yè)資格證理論考試答題技巧
- 2024年黑龍江客運資格證考試答案搜索
- 廣東省茂名地區(qū)2025屆數(shù)學高三第一學期期末檢測試題含解析
- 2024年黑龍江客運資格證都考些什么
- 遼寧省遼陽縣2025屆高二上數(shù)學期末監(jiān)測模擬試題含解析
- 家庭教育教案 《關注孩子成長做孩子的朋友》
- 鉆孔灌注樁樁工程隱蔽驗收記錄表格及填寫范本
- 醫(yī)教結(jié)合工作方案
- NY_T 1832—2009 溫室鋼結(jié)構(gòu)安裝與驗收規(guī)范
- 詩歌教學計劃
- 汽車吊吊裝計算書(共12頁)
- 裝飾裝修工程技術標
- 低碳生活學生調(diào)查報告范文3篇
- 安全生產(chǎn)培訓系列課件之安全生產(chǎn)意識篇.ppt
- 銀行審計部工作職責
- 勞務分包合同結(jié)算單標準格式(共3頁)
評論
0/150
提交評論