




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 大學本 科 畢 業(yè) 設(shè) 計(論文)學 院 計算機科學與工程學院 專 業(yè) 通信工程 學生姓名 班級學號 指導教師 二零一零年六月江蘇科技大學本科畢業(yè)論文基于java的網(wǎng)絡(luò)五子棋游戲java-based network backgammon game江蘇科技大學本科畢業(yè)設(shè)計(論文)摘要隨著計算機技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)技術(shù)的普及范圍越來越廣,網(wǎng)絡(luò)能夠提供的服務(wù)多樣、便捷,已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡(luò)休閑游戲發(fā)展迅速,它憑借健康、方便、互動性強、益智等諸多優(yōu)點,成為大部分現(xiàn)代人休閑娛樂的首選。本系統(tǒng)主要是建立一個具有具體規(guī)則的五子棋平臺,使兩臺不同計算機的使用者通過一定的網(wǎng)絡(luò)
2、連接,達到網(wǎng)絡(luò)對弈的目的,以及單機上的人機對戰(zhàn)。主要通過基于tcp/ip協(xié)議的套接字socket以及人工智能算法來實現(xiàn)本系統(tǒng),本系統(tǒng)實現(xiàn)了基于java的網(wǎng)絡(luò)五子棋游戲,采用eclipse編寫。主要功能包括五子棋的人機對弈和雙人對弈,游戲的人機界面友好,互動性強,實現(xiàn)了網(wǎng)絡(luò)休閑游戲的基本功能。關(guān)鍵詞: java;人機對弈;雙人對弈;五子棋abstractwith the continuous development of computer technology and increasing popularity of network technology, diverse and conveni
3、ent services provided by network have been an important and indispensable part of life. today, internet casual games, with its rapid development and virtues like health, convenience, interaction, intelligent and so on, have been the first choice of most people in entertainment.the system builds a ba
4、ckgammon platform with specific rules, which enables two different users to play chess or enables users to play with computer through network connecting. it is implemented mainly through socket based on tcp / ip protocol and artificial intelligence algorithms, and implements a java-based online game
5、 of backgammon, which is edited by eclipse. this system implements basic function, including human-machine-play and human-human-play ,and it has friendly interfaces and strong interaction.keywords: java;human versus;double play chess;five in a row目錄 第一章 緒論11.1 五子棋發(fā)展史11.2 五子棋研究意義和現(xiàn)狀11.3 本論文主要內(nèi)容2第二章 系
6、統(tǒng)使用工具介紹32.1 編程語言32.1.1 java語言介紹32.1.2 java語言的優(yōu)點32.2 myeclipse集成平臺介紹52.2.2 myeclipse介紹6第三章 系統(tǒng)功能分析與算法分析83.1 系統(tǒng)功能83.2 算法分析8第四章 系統(tǒng)設(shè)計134.1 詳細功能分析134.2 設(shè)計思路154.2.1 人機對戰(zhàn)設(shè)計154.2.2 網(wǎng)絡(luò)對戰(zhàn)設(shè)計174.2.3 本地游戲設(shè)計17第五章 系統(tǒng)實現(xiàn)195.1 主界面195.2 單機游戲205.4 網(wǎng)絡(luò)對戰(zhàn)255.4.1 網(wǎng)絡(luò)對戰(zhàn)255.4.2 聊天功能285.4.3 限時功能29結(jié) 論32致 謝33參考文獻34iii第一章 緒論本章節(jié)主要介
7、紹了五子棋的發(fā)展史,研究五子棋的意義和五子棋的國內(nèi)外現(xiàn)狀。1.1 五子棋發(fā)展史五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為“連珠”,英譯為“renju”,英文稱之為“gobang”或“fir”(five in a row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學的高深學問“陰陽易理”;它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀
8、;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。對局開始時,先由執(zhí)黑棋一方將一枚棋子落在天元點上,然后由執(zhí)白棋一方在黑棋 周圍的交叉點上落子。但是,為了尊重對方和禮貌起見,持白棋的一方通常將盤面的第 二 著棋布在自己河界的一側(cè),即直止或斜止。此后黑白雙方輪流落子,直到某一方首先 在棋盤的橫線、縱線或斜線上形成連續(xù)五子或五子以上僅對白棋而言,則該方就算獲勝。連珠五子棋的一個特點是先行的一方優(yōu)勢很大,因此在職業(yè)比賽中對黑方做了種種限制,以利公平競爭。五子棋的比賽規(guī)則如下:1 黑先、白后,從天元開始相互順序落子;2 最先在棋盤橫向、縱向或斜向形成連續(xù)的同色五個棋子的一方
9、為勝;3 黑棋禁手判負、白棋無禁手。黑棋禁手有“三、三”、“四、四”和“長連”, 包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取勝;4 如分不出勝負,則到為平局;5 五連與禁手同時形成,判勝;6 黑方禁手形成時,白方應立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指出,反而 繼續(xù)落子,則禁手失效,不再判黑方負。1.2 五子棋研究意義和現(xiàn)狀java的廣泛流行是與它所編寫的程序可以在網(wǎng)絡(luò)上運行且可以跨平臺。事實上,支持java的瀏覽器內(nèi)置java虛擬機,使得java的小程序能夠在網(wǎng)絡(luò)上完全地傳送和運行。這樣使得程序人員即使不具備有關(guān)的網(wǎng)絡(luò)知識,也能編寫出高質(zhì)量的網(wǎng)絡(luò)通信程序。本程序是一個基于網(wǎng)絡(luò)
10、協(xié)議為tcp/ip的網(wǎng)上對弈游戲,采用服務(wù)器-客戶端的網(wǎng)絡(luò)架構(gòu)模式,允許網(wǎng)絡(luò)上的多臺機器(可能是兩臺機器)同時運行,一臺用作服務(wù)器,始終處理網(wǎng)絡(luò)上要求它進行服務(wù)的請求。如果有機器請求與它進行連接,用作服務(wù)器的機器接受之后就可以進行相互之間的通信。本系統(tǒng)最終目的是建立一個具有具體規(guī)則的五子棋平臺,使兩臺不同計算機的使用者通過一定的網(wǎng)絡(luò)連接,達到網(wǎng)絡(luò)對弈的目的,以及單機上的人機對戰(zhàn)。通過本程序,我們初步熟悉并掌握java語言的基本知識,掌握服務(wù)器-客戶端的網(wǎng)絡(luò)架構(gòu)模式,為以后學習高級web開發(fā)課程做準備。本課題在國內(nèi)已有些語言版本的同類軟件,但大部分只是網(wǎng)上對戰(zhàn)的功能沒有完成觀看棋局的功能,或者觀
11、看功能并不完善,在網(wǎng)絡(luò)上的合理的觀看機制的制定和其具體的線程使用的技術(shù)方法,并將其和對戰(zhàn),聊天合理的結(jié)合在一起是目前需要解決的問題。1.3 本論文主要內(nèi)容本論文主要結(jié)構(gòu)有五章。第一章引言,主要介紹了五子棋的發(fā)展史,五子棋的研究目的,五子棋的研究現(xiàn)狀。第二章系統(tǒng)使用工具介紹,主要介紹了myeclipse集成平臺,以及java語言的優(yōu)勢所在。第三章系統(tǒng)概要設(shè)計和算法分析,主要介紹了概要的介紹了系統(tǒng)的功能,同時對本系統(tǒng)的人工智能算法給出了一些案例,同時對算法進行了一些分析,介紹了本系統(tǒng)使用的算法。第四章詳細設(shè)計,主要介紹了本系統(tǒng)的設(shè)計思路,本系統(tǒng)的詳細功能描述。第五章系統(tǒng)實現(xiàn),主要介紹了本系統(tǒng)的各個
12、功能的實現(xiàn)以及部分核心代碼。第二章 系統(tǒng)使用工具介紹本章節(jié)主要介紹了本系統(tǒng)使用的編程工具myeclipse,同時簡單的介紹了java這一編程語言,和java語言相比其它語言所具有的優(yōu)勢。2.1 編程語言2.1.1 java語言介紹現(xiàn)代技術(shù)的發(fā)展,尤其是網(wǎng)絡(luò)技術(shù),給現(xiàn)代企業(yè)帶來了許多新的機遇和挑戰(zhàn),如改善客戶服務(wù)、全球化和信息檢索等,這些在技術(shù)上反映為信息的獲取、系統(tǒng)管理、系統(tǒng)集成、新技術(shù)的開發(fā)、internet、intranet等等與商業(yè)的結(jié)合。而這些要求一個隨處可用的開放的結(jié)構(gòu)和在不同的平臺之間低成本的信息傳遞方式,java正好滿足這些要求。java是由sun microsystems公司于
13、1995年5月推出的java程序設(shè)計語言(以下簡稱java語言)和java平臺的總稱。用java實現(xiàn)的hotjava瀏覽器(支持java applet)顯示了java的魅力:跨平臺、動感的web、internet計算。從此,java被廣泛接受并推動了web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持java applet。另一方面,java技術(shù)也不斷更新。java平臺由java虛擬機(java virtual machine)和java 應用編程接口(application programming interface、簡稱api)構(gòu)成。java 應用編程接口為java應用提供了一個獨立于操作系統(tǒng)的標準接
14、口,可分為基本部分和擴展部分。在硬件或操作系統(tǒng)平臺上安裝一個java平臺之后,java應用程序就可運行?,F(xiàn)在java平臺已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣java程序可以只編譯一次,就可以在各種系統(tǒng)中運行。java應用編程接口已經(jīng)從1.1.x版發(fā)展到1.2版。目前常用的java平臺基于java1.2。java語言是一個支持網(wǎng)絡(luò)計算的面向?qū)ο蟪绦蛟O(shè)計語言。java語言吸收了smalltalk語言和c+語言的優(yōu)點,并增加了其它特性,如支持并發(fā)程序設(shè)計、網(wǎng)絡(luò)通信、和多媒體數(shù)據(jù)控制等。2.1.2 java語言的優(yōu)點java技術(shù)取得今天這樣的成就,依賴于這門技術(shù)的先進性,java技術(shù)具有下列優(yōu)點:簡單、
15、健壯:許多高級語言都要由程序員進行指針運算和存儲器管理。這項工作即復雜又容易出錯。java不需要程序員進行指針運算和存儲器管理,簡化了設(shè)計,減少了出錯的可能性。面向?qū)ο螅簀ava是面向?qū)ο蟮某绦蛟O(shè)計語言。與面向過程的語言相比,面向?qū)ο蟮恼Z言更能反映人類對世界的認識和處理模式,具有良好的代碼重用性。處理復雜、龐大而且不斷變化的信息系統(tǒng),必須使用面向?qū)ο蟮某绦蛟O(shè)計語言。分布式:目前,在所有軟件產(chǎn)品中,僅供單個計算機使用的單機版軟件所占的比例越來越小。大多數(shù)軟件都可以運行在網(wǎng)絡(luò)環(huán)境中。java擁有一個網(wǎng)絡(luò)協(xié)議對象庫(tcp/ip,http,ftp等),可以象訪問當?shù)匚募粯釉L問internet上的對
16、象。改進的解釋性:為彌補解釋語言速度較慢的不足,java采用預編譯的辦法,將原程序生成字節(jié)代碼,減輕運行時的解釋工作。另一方面,有些java運行環(huán)境采用just-in-time(jit)編譯器將字節(jié)代碼編譯成機器碼直接運行,這種運行環(huán)境對于重復執(zhí)行的服務(wù)器端軟件特別有效,可以達到c語言的速度。安全:java語言在編譯時刪除了指針和內(nèi)存分配,在運行時檢查字節(jié)代碼,拒絕執(zhí)行非法的內(nèi)存訪問,超越權(quán)限的訪問等??梢苑烙诳凸?。平臺無關(guān):java通過采用虛擬機技術(shù)真正實現(xiàn)了與平臺無關(guān)。java軟件是真正跨平臺可移植的。多線程:允許一個應用程序同時做多個任務(wù)。動態(tài)性:java允許下載代碼模塊,因此,當程
17、序運行時也能動態(tài)升級。高性能:經(jīng)過實際的綜合評測得出結(jié)論,java是高性能的。java安裝配置:各平臺安裝程序可以到sun的網(wǎng)站上下載,在安裝完成后應該進行配置,通常集成開發(fā)環(huán)境(ide)自帶jdk或進行了自動配置,如果我們通過控制臺編譯或運行java程序則必須手動配置。jdk: 是java開發(fā)工具包(j2se software development kit)的縮寫,用java語言編寫applet小程序和應用程序的軟件開發(fā)環(huán)境,java開發(fā)者應該安裝jdk,并且通常jdk中已包含一個jre拷貝。jre: 是java運行環(huán)境 (java runtime enviroment) 的縮寫。它基本上
18、就和java虛擬機是同一個概念,運行java程序的應該安裝jre。bin:java常用開發(fā)工具目錄,例如javac,java,jar等工具。demo: sun提供的一些用于java開發(fā)的示范例子,如有關(guān)applets,jfc,plugin等。include: java提供用于c/c+調(diào)用的.h文件;jre: 對應版本的java運行環(huán)境文件sample: java案例。lib: java類庫目錄windows環(huán)境變量應設(shè)置的環(huán)境變量包括:java_home, path, classpath。假設(shè)j2dk安裝在“c:jdk1.5”,環(huán)境變量可設(shè)置為:java_home=c:jdk1.5classp
19、ath=.path=%java_home%bin;%path%2.2 myeclipse集成平臺介紹2.2.1 java的開發(fā)環(huán)境java是由sun微系統(tǒng)公司所發(fā)展出來的程序語言,它本身是一種對象導向(object-oriented)的程序語言。java目前在手機上應用最多的就是java游戲。java也號稱是能跨平臺使用的語言,這主要是因為java本身被編譯之后,并不是直接產(chǎn)生可執(zhí)行的碼,而是產(chǎn)生一種中間碼叫作 bytecode,這種碼必需在透過 java 的直譯器來解讀它,才能夠真正的被執(zhí)行,所以只要平臺上裝有這種java的直譯器,就能解讀bytecode也就能執(zhí)行java編譯過的程序,故與
20、java程序是在那種平臺上被編譯的,就完全沒有干系了。java寫出來的程序可分為兩類,分別是java applet與一般的application,而application 這一類就與一般的程序如c+的作用是比較類似的,是一個獨立可執(zhí)行的應用程序,像hotjava是一個瀏覽器,且就是使用java程序所發(fā)展出來的。最常見的java程序包括應用程序和applets。應用程序是單獨的程序,諸如hotjava瀏覽器軟件就是用java語言編寫的。 applets類似于應用程序,但是它們不能單獨運行, applets可以在支持java的瀏覽器中運行。applet主要是內(nèi)置于html網(wǎng)頁中,在瀏覽時發(fā)揮作用。
21、java的目標是為了滿足在一個充滿各式各樣不同種機器,不同操作系統(tǒng)平臺的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。利用java程序語言,可以在網(wǎng)頁中加入各式各樣的動態(tài)效果??梢苑派弦欢蝿赢嫞尤肼曇?,也可以建立交互式網(wǎng)頁等。2.2.2 myeclipse介紹myeclipse企業(yè)級工作平臺(myeclipse enterprise workbench ,簡稱myeclipse)是對eclipse ide的擴展,利用它我們可以在數(shù)據(jù)庫和javaee的開發(fā)、發(fā)布,以及應用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的javaee集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持html, strut
22、s, jsf, css, javascript, sql, hibernate。在結(jié)構(gòu)上,myeclipse的特征可以被分為7類:1. javaee模型2. web開發(fā)工具3. ejb開發(fā)工具4. 應用程序服務(wù)器的連接器5. javaee項目部署服務(wù)6. 數(shù)據(jù)庫服務(wù)7. myeclipse整合幫助對于以上每一種功能上的類別,在eclipse中都有相應的功能部件,并通過一系列的插件來實現(xiàn)它們。myeclipse結(jié)構(gòu)上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進行單獨的擴展和升級。簡單而言,myeclipse是eclipse的插件,也是一款功能強大的javaee集成開發(fā)環(huán)境,支持
23、代碼編寫、配置、測試以及除錯,myeclipse6.0以前版本需先安裝eclipse。myeclipse6.0以后版本安裝時不需安裝eclipse。本系統(tǒng)是使用的myeclipse8.5版本。myeclipse 8.5給我們帶來了新的控制臺功能,以及很多新的面貌和感覺,特別是對于jsf的改善,可以說是myeclipse的一個里程碑。新的控制臺功能可以稱之為配置中心,其中包括多個選項卡,開發(fā)人員可以看到他們的軟件、工作區(qū)等,增加了團隊效率。用戶也能夠通過配置中心,來進行安裝、更新或者卸載插件等操作,對于安裝和更新模塊,用戶只需要選擇一個復選框就可以完成。這些新的管理工具的出現(xiàn),大大改善了myec
24、lipse中的java server faces工具。第三章 系統(tǒng)功能分析與算法分析3.1 系統(tǒng)功能1網(wǎng)絡(luò)對戰(zhàn)網(wǎng)絡(luò)對戰(zhàn)主要是基于tcp/ip的網(wǎng)絡(luò)協(xié)議,采用服務(wù)器-客戶端的網(wǎng)絡(luò)架構(gòu)模式,允許網(wǎng)絡(luò)上的多臺機器(可能是兩臺機器)同時運行,一臺用作服務(wù)器,始終處理網(wǎng)絡(luò)上要求它進行服務(wù)的請求。如果有機器請求與它進行連接,用作服務(wù)器的機器接受之后就可以進行相互之間的通信。使用socket進行編程,通過事件監(jiān)聽器,落子的坐標值,通過流操作,將棋子的坐標發(fā)送過去,然后進行雙方棋盤的更新。然后,再根據(jù)贏的條件判定雙方的勝負。2人機對戰(zhàn) 人機對戰(zhàn)主要是通過使用線程調(diào)用人工智能算法來實現(xiàn)的。選擇人機對戰(zhàn)時,人工智
25、能線程啟動。當你落下一個棋子之后,人工智能線程遍歷所有棋盤的位置,然后算出所有棋盤位置的權(quán)限值,選擇權(quán)限值最大的位置落下棋子。然后,再根據(jù)贏的條件判定雙方的勝負。3單機游戲單機游戲主要是讓倆個不同的玩家在同一臺機上進行游戲,主要是將人機對戰(zhàn)中的人工智能算法去掉,直接由玩家控制棋子的落點,以此來完成游戲的游玩。3.2 算法分析(1)反向傳遞算法反向傳遞算法是一種結(jié)果導向的自學習方法,用在五子棋上是可以的。因為五子棋的游戲方法正是很明顯的結(jié)果導向的過程。簡單說這么個過程:1.設(shè)置輸入和輸出類型,比如都是坐標x1,y1、x2,y2.2.訓練:你告訴網(wǎng)絡(luò)a情況下應該輸出a1b情況下應該輸出b1c情況下
26、應該輸出c1.a+b情況下應該輸出ab13.測試:你問網(wǎng)絡(luò)a+b+c情況下,應該輸出多少?在哪里下子(就是x,y是多少?)網(wǎng)絡(luò)就根據(jù)前面bp訓練的結(jié)果自動算出你要的坐標。用matlab神經(jīng)網(wǎng)絡(luò)工具箱做吧,不是很難。另外,五子棋的棋盤別太大了,訓練難度和時間是隨棋盤大小成級數(shù)增長的。(2)博弈樹算法算法設(shè)計1.博弈樹的搜索過程在以下討論中,命名2個博弈者max和min。下面的任務(wù)是為max找最佳的移動。假設(shè)max先移動,然后2個博弈者輪流移動。因此,深度為偶數(shù)的節(jié)點,對應于max下一步移動的位置,稱為max節(jié)點;深度為奇數(shù)的節(jié)點對應于min下一步移動的位置,稱為min節(jié)點(博弈樹的頂節(jié)點深度為0
27、)。k層包括深度為2k和2k1的節(jié)點。通常用層數(shù)表示博弈樹的搜索深度,他可以表示出向前預測的必須認識到搜索到終點是不可能的(除了在博弈快結(jié)束時),所以,常采用在有限范圍搜索方法。這里使用啟發(fā)式搜索。在啟發(fā)式搜索的過程中,關(guān)鍵的一步是如何確定下一個要考察的節(jié)點,在確定節(jié)點時只要能充分利用與問題有關(guān)的信息,估計出節(jié)點的重要性,就能在搜索時選擇重要性較高的節(jié)點,以利于博弈者以較快的速度求出最佳的棋步。2采用靜態(tài)評估函數(shù)這里用評估函數(shù)h(i)衡量每一個葉節(jié)點位置的“值”。 一個最佳首步可以由一個最小最大化過程產(chǎn)生。假設(shè)輪到max從搜索樹的葉節(jié)點中選取,他肯定選擇擁有最大值的節(jié)點。因此,min葉節(jié)點的一
28、個max節(jié)點雙親的倒推值就等于葉節(jié)點的靜態(tài)評估值中的最大值。另一方面,min從葉結(jié)點中選取時,必須選取最小的節(jié)點(即最負的值)。既然如此,max葉節(jié)點的min雙親節(jié)點被分配一個倒推值,他等于葉節(jié)點靜態(tài)評估值的最小值。在所有葉節(jié)點的父節(jié)點被賦予倒推值后,開始倒推另一層,假定max將選擇有最大倒推值的min的后繼節(jié)點,而min會選擇有最小倒推值的max后繼節(jié)點。繼續(xù)逐層對節(jié)點評估,直到最后開始節(jié)點的后繼者被賦予倒推值。max將選擇有最大倒推值的節(jié)點作為他的首步。整個過程的有效性基于這樣的假設(shè)。用整個棋盤估值的函數(shù)h(n)為靜態(tài)估值函數(shù)。設(shè)想當前棋局s為輪到計算機方下棋(用 表示),任選一空點作為計
29、算機方的下棋位置(可有若干種選擇),接著考慮在此情況下游戲者一方下棋的棋局(用o表示);從某一“o”棋局出發(fā),任選一空點作為游戲者一方的落子處(又有若干種選擇),再次形成計算機方下棋的“ ”棋局;依此類推,這樣可形成一棵以s為根結(jié)點的博弈樹,該樹以o棋局為第2層子結(jié)點,以棋局為第3層子結(jié)點等等。如果繼續(xù)向前搜索,可形成多層子結(jié)點,現(xiàn)在以向前搜索3層子結(jié)點為例來說明極大極小值的過程。對第3層子結(jié)點的某一棋局n,求出其估計值h(n),假設(shè)有一博弈樹已形成, h(n)的值由各結(jié)點旁的數(shù)值給出。根據(jù)極小極大化分析法,先計算第3層子結(jié)點h(n)值,然后第2層子結(jié)點的估計值取他的各后繼子結(jié)點的極小值,根結(jié)
30、點的估計值取他的各子結(jié)點的極大值。這個取得最大估計值的子結(jié)點即為從s出發(fā)的計算機方的最佳落子方案。棋盤上某一行、某一列或某一對角線為一路,這里使 用的棋盤為19行19列,因此,行和列方向上共有191938路;從左下到右上方向的對角線有37路,同樣,從左上到右下方向的對角線也有37路。但對于五子棋來說必須在一條直線上有連續(xù)五個棋子才能贏。因此,在對角線上就可以減少8路。所以,整個棋盤路的總數(shù)為:對某一棋局n,第i路得分:h(i)hc(i)hm(i)。其中:hc(i)為計算機方在第i路估計值得分,hm(i)為游戲者一方在第i路得分。對的得分規(guī)則作如下說明。規(guī)則中代表一空點;o代表對方棋子;代表有計
31、算機方棋子;表示連續(xù)2點為空點;表示連續(xù)3個空點接一個計算機方棋子,再接兩空點。某一規(guī)則表示如在i路上有棋子構(gòu)成形如則hc(i)30。其他規(guī)則表示相同。在系統(tǒng)中使用的主要估值規(guī)則如下:由對稱性可知和的估值相同,同理可得其他具有這樣對稱性的估值都認為是相等的。在連續(xù)兩路上出現(xiàn)(3)的情形=hc(i)=5 000, 一路出現(xiàn)(3),另外一路出現(xiàn)(4)=hc(i)=5 000。所以在整個棋盤上的總估值為:為了增加系統(tǒng)的智能化也可以添加其他的一些規(guī)則。3遺傳算法優(yōu)化估值函數(shù)在博弈程序的幾大主要部分里,估值函數(shù)是與具體的棋類知識緊密結(jié)合的一部分??梢哉f估值函數(shù)在很大程度上決定了博弈程序的棋力高低。上面給
32、出的估值是根據(jù)實際經(jīng)驗給出的。如何對上述的估值進行優(yōu)化呢?下面采用遺傳算法來改進靜態(tài)估值。遺傳算法的估計值在很大的程度上也依賴于實施者的經(jīng)驗。但是可以利用一些高水平名局棋譜或同其他博弈程序?qū)模词褂媚骋唤M參數(shù)時取勝的機率有多大來進行較驗。經(jīng)過幾次的試驗一般就可以得到較好的靜態(tài)估值。傳統(tǒng)的算法一般只能維護一組較好的參數(shù)。遺傳算法同傳統(tǒng)的算法相比可以同時維護幾組較好的參數(shù),通過向其中添加一組新參數(shù),通常是將幾組老參數(shù)中選出的值組合在一起做一點變化。然后同幾組老的參數(shù)比較孰優(yōu)孰劣,將最差的一組從中去除。這里面較重要的操作是交叉和變異操作。交叉通過隨機交換父代個體的信息來繼承已有參數(shù)中的優(yōu)良內(nèi)容;變
33、異通過隨機改變個體中的基因而增加種群的多樣性,避免優(yōu)化的因局部震蕩而失敗。遺傳算法的優(yōu)點:(1)由于搜索算法是從問題的解開始的,而不是一組參數(shù)。所以被局部震蕩干擾導致求最優(yōu)解失敗的可能性大大減小。(2)此算法能將搜索重點集中于性能高的部分,能較快地求出最佳的參數(shù)。在使用中應當注意的問題如下:種群數(shù)目這是影響算法性能的重要因素。種群數(shù)目過大,會導致運算時間太長,結(jié)果收斂緩慢;種群數(shù)目太小則可能導致算法精度過低,甚至停止不前。交叉概率這個用于控制交叉操作的頻度。此概率過大會導致種群中的個體更新過快,較優(yōu)的個體不能穩(wěn)定的保持和傳遞信息;此概率過小則會使優(yōu)化的過程緩慢甚至停止不前。變異概率這個概率用于
34、控制產(chǎn)生變異個體的頻度,目的是防止整個種群中任意參數(shù)的幾個基因保持不變。一 般使用一個很小的概率即足以達成此任務(wù);概率太大則遺傳信息無法穩(wěn)定傳遞,從而使優(yōu)化過程變成隨機過程,失去確切的方向而導致失敗。(3)最簡單的算法1首先遍歷整個棋盤,找到一個可以落子的點,然后假設(shè)自己在該點落子,再然后判斷如果棋子落到這個點上后會對自己有什么利益,比如會不會形成沖4活三、雙活三等等,(事先將沖四活三、雙活三等效果定義上利益值,當然,如果是五個子連起來了的話,利益值要被定義成最高,最好是無窮大的),將各種效果的利益值相加,得到己方的利益值。2將角色互換一下,重復第一步,得到對方的利益值(其實是遞歸算法)。3將
35、己方的利益值減去對方的利益值,得到該點的總利益值。4整個棋盤所有能落子的點都計算出利益值之后,找出利益值最大的那個點,將棋子落到該點。可以進行算法的優(yōu)化,使用“今后幾步預測法”,具體方法是這樣的。(1)讓電腦分析一個可能的點,如果在某個位置下子將會形成對手不得不防守的棋型(例如:“沖四”,“活三”);那么下一步對手就必須按照你的思路下子來防守,如此便完成了第一步的預測。(2)重新調(diào)用棋型表填寫算法對預測后的棋進行盤面分析,如果出現(xiàn)了“四三”,“雙三”或“雙四”等制勝點,那么己方就可以獲勝;否則按照同樣的方法向下分析,就可以預測出第二步,第三步等。(3)但是要是盤面上沒有對手必須防的棋型,哪改怎
36、么辦?進攻不成就得考慮防守,將自己和對手調(diào)換位置,然后用上面的方法來預測對手的棋。這樣既可以防住對手巧妙的攻擊,又能等待機會發(fā)動反擊。本系統(tǒng)主要是使用的最簡單的算法,也就是遍歷算法。第四章 系統(tǒng)設(shè)計本章主要介紹了本系統(tǒng)各功能模塊的設(shè)計思路,詳細的分析了本系統(tǒng)的功能。4.1 詳細功能分析系統(tǒng)的程序流程圖:開始初始化游戲模式主循環(huán)控制主循環(huán)控制分析盤面填寫棋型表玩家落子電腦落子判斷勝負結(jié)束客戶端一客戶端二判斷勝負人機對弈網(wǎng)絡(luò)對弈否某方獲勝某方獲勝否圖4.1-1系統(tǒng)的程序流程圖基于客戶機/服務(wù)器的socket通信模型如下圖所示:創(chuàng)建socket類對象指定服務(wù)器端公認的socket地址和端口在sock
37、et上監(jiān)聽客戶端的連接請求阻塞,等待連接的建立接受客戶端的請求信息解釋并處理請求信息將處理結(jié)果返回給客戶端創(chuàng)建socket類對象向服務(wù)器端發(fā)送連接請求向服務(wù)器發(fā)出服務(wù)請求接受服務(wù)結(jié)果服務(wù)器端客戶端建立連接服務(wù)請求服務(wù)響應圖4.1-2基于客戶機/服務(wù)器的socket通信模型詳細功能:1用戶選擇黑棋還是白棋在單機游戲界面上添加倆個單選按鈕,一個按鈕的標簽為白棋,另外一個按鈕的標簽為黑棋,設(shè)置黑棋為默認值。然后根據(jù)選擇的是什么棋子,調(diào)用什么生成棋子的方法。2 .限時功能限時功能主要是在本系統(tǒng)各個生成界面中,添加一個顯示時間的界面,還有就是設(shè)定時間的空白文本框,在判定輸贏時,假如時間為零的話,判定該玩
38、家輸了比賽。3聊天功能聊天功能是建立一個聊天的界面,添加到游戲界面中,在網(wǎng)絡(luò)對弈時,通過socket進行連接,先從界面上讀取用戶所寫的話,在通過流操作,將話發(fā)送給對方,然后對方通過socket接受到,然后讀出話來,同時更新聊天的面板,反之,也是一樣進行。4人機對戰(zhàn)首先編寫一個智能算法類,該智能算法主要是使用遍歷算法。編寫一個人工智能線程類,在該線程中,調(diào)用人工智能算法,以及尋找位置類,跟據(jù)權(quán)限值,找到權(quán)限最大的一個點,返回該點的坐標值。人機對戰(zhàn)時,調(diào)用人工智能線程類,每當玩家落下一個字,自動執(zhí)行尋找最優(yōu)點位置,落下棋子,最后根據(jù)勝負判斷方法,判斷勝負。5網(wǎng)絡(luò)對戰(zhàn)需要編寫一個生成網(wǎng)絡(luò)對戰(zhàn)的棋盤類
39、。其次還需要一個網(wǎng)絡(luò)對弈的線程類。網(wǎng)絡(luò)對戰(zhàn)主要是同過socket進行連接。編寫一個具有socket的客戶端類,在該類中進行相關(guān)的流操作。網(wǎng)絡(luò)對戰(zhàn)開始時,調(diào)用線程類,線程類再調(diào)用客戶端類,然后就可以連接起來了。在連接時,注意判斷哪個玩家創(chuàng)建了游戲,哪個玩家加入游戲。4.2 設(shè)計思路4.2.1 人機對戰(zhàn)設(shè)計(1)繪制棋盤java中的graphics類是用于繪圖和顯示格式化文本的工具類。在java程序中繪圖必須在一個窗口(容器)中進行,繪圖窗體經(jīng)常被設(shè)計為一個組件容器。一般首先在一個面板中進行繪制,然后再將這個面板添加到顯示窗口中。graphics類是在java.awt包中聲明,顯示格式化文本和繪圖
40、是通過調(diào)用graphics類的drawxxx()方法實現(xiàn)的,例如 drawstring(string),drawline()等。繪圖采用的坐標系是原點在左上角,縱軸向下以像素為單位的坐標系。下面是graphics類中常用的各種圖形的繪制方法。drawline(int,int,int) 畫直線,參數(shù)為起點的x和y坐標,終點的x和y坐標。drawrect(int,int,int,int) 畫矩形,參數(shù)為左上角的x和y坐標,寬,高。drawroundrect(int,int,int,int,int,int) 畫圓角矩形,參數(shù)為左上角的x和y坐標,x寬,y高,深度x,深度y。draw3drect(in
41、t,int,int,int,boolean) 畫3d矩形,參數(shù)為左上角的x和y坐標,寬x,高y,true。drawovil(int,int,int,int) 畫卵形,參數(shù)為中心的x和y坐標,長軸,短軸。drawarc(int,int,int,int,int,int) 畫圓弧,參數(shù)為左上角的x和y坐標,寬,高,起始角,終止角。畫填充圖形只要把以上方法中的draw改為fill即可,參數(shù)表是一樣的。繪制這些圖形都是選用當前的顏色來繪制和填充的,黑色是系統(tǒng)默認的顏色,也可以使用graphics類中的setcolor()方法來設(shè)定繪圖的顏色。在本系統(tǒng)的棋盤類中,棋盤和棋子的繪制都是通過graphics類
42、來完成的。(2)算法設(shè)計當我們與電腦對戰(zhàn)時,您知道這些軟件是怎樣象人腦一樣進行思考的嗎?總的來說(我們假定您熟悉五子棋的基本規(guī)則),要讓電腦知道該在哪一點下子,就要根據(jù)盤面的形勢,為每一可能落子的點計算其重要程度,也就是當這子落下后會形成什么棋型(如:“沖四”、“活三”等),然后通覽全盤選出最重要的一點,這便是最基本的算法。當然,僅靠當前盤面進行判斷是遠遠不夠的,這樣下棋很容易掉進玩家設(shè)下的陷阱,因為它沒有考慮以后的變化。所以在此基礎(chǔ)上我們加入遞歸調(diào)用,即:在電腦中預測出今后幾步的各種走法,以便作出最佳選擇,這也是我們下棋時常說的“想了幾步”。(1) 二維數(shù)組 array :由于五子棋是一個二
43、維棋類游戲,所有首先想到的是定義一個chess類來表示棋子,先為整個棋盤建立一張表格用以記錄棋子信息,比如我們可以使用一個15*15的二維數(shù)組 array (15*15是五子棋棋盤的大小),數(shù)組的每一個元素對應棋盤上的一個交叉點,用chessman_empty表示空位、chessman_black代表自己的黑子、chessman_white代表電腦的白子。(2)shape :在此之后還要建立一張棋型表shape =new int15155,用來存放棋型數(shù)據(jù),就是剛才所說的重要程度,比如用20代表“沖四”的點,用15代表“活三”的點,那么在計算重要性時,就可以根據(jù)2015得出前者比后者重要,下子
44、時電腦便會自動選擇“沖四”的點。那為什么棋型表要使用三維數(shù)組呢?因為棋盤上的每一個點都可以與橫、豎、左斜、右斜四個方向的棋子構(gòu)成不同的棋型,所以一個點總共有4個記錄;這樣做的另一個好處是可以輕易判斷出復合棋型,例如:如果同一點上有2個15就是雙三、有一個15和一個20就是四三。(3) 算法實現(xiàn)設(shè)計一個1515的矩陣,矩陣的坐標就是棋子的位置,矩陣中每個一值可以設(shè)置為0,1,2,以代表空點,黑子和白子三種狀態(tài)。使用遍歷算法設(shè)計人工智能算法。第一步,計算出一個棋盤的五子棋的所有勝利組合。第二步,計算出玩家的下棋狀態(tài),電腦將會根據(jù)玩家的狀態(tài)而采取進攻或防守。第三步,根據(jù)第二步的運行情況,而出現(xiàn)三種結(jié)
45、果,玩家獲勝,電腦獲勝,和局。4.2.2 網(wǎng)絡(luò)對戰(zhàn)設(shè)計網(wǎng)絡(luò)對戰(zhàn)是使用socket進行編程的,通過socket,可以將倆臺不同的計算機連接起來。當雙方進行對弈時,需要同時更新雙方的棋盤。可以通過流操作,將棋子的坐標發(fā)送給對方,然后通過線程操作,更新雙方的棋盤。設(shè)計思路:第一步,一個玩家的機子作為服務(wù)器,等待其它客戶端的加入。第二步, 倆個玩家連接成功,進行對弈,同時更新雙方的棋盤第三步, 根據(jù)第二步情況,出現(xiàn)三種結(jié)果,玩家一獲勝,玩家二獲勝,和局。4.2.3 本地游戲設(shè)計在人機對戰(zhàn)的基礎(chǔ)上,去掉人工智能部分,直接用一個用戶代替。就是寫一個生成本地游戲的界面。第一步, 輸入倆個用戶名等人機交互操作
46、第二步, 進行對弈,更新棋盤第三步, 根據(jù)判定函數(shù),判定勝負。第五章 系統(tǒng)實現(xiàn)本章主要介紹了本系統(tǒng)的各個功能的實現(xiàn)以及部分核心代碼。5.1 主界面主界面主要是集合了單機游戲,人機對戰(zhàn),網(wǎng)絡(luò)對戰(zhàn)三個選項卡,提供友好的交主界面:主界面實現(xiàn)如圖所示:圖5.1-1 主界面部分核心代碼1.添加單機游戲選項卡private jmenuitem getlocalgamemenu() localgamemenu = new jmenuitem(單機游戲);/加入單機游戲選項 localgamemenu.addactionlistener(new actionlistener() /通過事件監(jiān)聽器產(chǎn)生單機游戲的
47、界面以及進行單機游戲2.添加人機對戰(zhàn)選項卡private jmenuitem getcomputergamemenu() if (computergamemenu = null) computergamemenu = new jmenuitem(人機對戰(zhàn));/加入人機對戰(zhàn)選項computergamemenu.addactionlistener(new actionlistener() /通過事件監(jiān)聽器產(chǎn)生人機對戰(zhàn)的界面以及進行人機對戰(zhàn)3.添加網(wǎng)絡(luò)對戰(zhàn)選項卡private jmenu getnetgamemenu() if (netgamemenu = null) netgamemenu = n
48、ew jmenu(網(wǎng)絡(luò)對戰(zhàn));/加入網(wǎng)絡(luò)對戰(zhàn)選項 /create the menu items for net game jmenuitem creategamemenuitem = new jmenuitem(創(chuàng)建游戲);/加入網(wǎng)絡(luò)對戰(zhàn)的子選項創(chuàng)建游戲 jmenuitem joingamemenuitem = new jmenuitem(加入游戲);/加入網(wǎng)絡(luò)對戰(zhàn)的子選項加入游戲creategamemenuitem.addactionlistener(new actionlistener() /通過事件監(jiān)聽器產(chǎn)生創(chuàng)建游戲的界面joingamemenuitem.addactionlistene
49、r(new actionlistener()/通過事件監(jiān)聽器產(chǎn)生加入游戲的界面5.2 單機游戲單機游戲主要是讓倆個不同的玩家在同一臺機上進行游戲,主要是將人機對戰(zhàn)中的人工智能算法去掉,直接由玩家控制棋子的落點,以此來完成游戲的游玩。單機游戲?qū)崿F(xiàn)如圖:圖5.2-1 單機游戲界面玩家uu獲勝界面:圖5.2-2 玩家uu獲勝界面5.3 人機對戰(zhàn)人機對戰(zhàn)主要是通過使用線程調(diào)用人工智能算法來實現(xiàn)的。選擇人機對戰(zhàn)時,人工智能線程啟動。當你落下一個棋子之后,人工智能線程遍歷所有棋盤的位置,然后算出所有棋盤位置的權(quán)限值,選擇權(quán)限值最大的位置落下棋子。然后,再根據(jù)贏的條件判定雙方的勝負。人機對戰(zhàn)實現(xiàn)如圖所示:圖
50、5.3-1 人機對弈界面電腦獲勝:圖5.3-2 電腦獲勝界面模擬人工智能算法int liyi(角色, 層次) if(層次=0) return 0; for(第一個可以落子的點 到 最后一個可以落子的點) int 利益,最大利益; /遞桂. 利益 = 獲取本角色利益值() - liyi(角色=相反角色,層次-1); if(利益最大利益) 最大利益 = 利益; 保存該點。 落子到所保存的點。部分核心代碼:class evaluationif (whitetypecountsfour 1)/白棋有多個沖四whitetypecountfour+;/白棋活四數(shù)目加一if (blacktypecounts
51、four 1)/ 黑棋有多個沖四blacktypecountfour+; /黑棋活四數(shù)目加一/computes the white value and the black value/計算出白棋的權(quán)限值和黑棋的權(quán)限值int wvalue = 0, bvalue = 0;if (iswhiteturn)/判定是否輪到白棋if (blacktypecountfive 0)/黑棋有五個棋子連在一起的類型bvalue = 9999;/黑色棋子的權(quán)限值被設(shè)為9999else if (whitetypecountfive 0)/白棋有五個棋子連在一起的類型wvalue = 9999; /白色棋子的權(quán)限值被
52、設(shè)為9999/white wins/白棋贏else if (whitetypecountfour 0 | whitetypecountsfour 0)/白棋有活四,或有沖四存在wvalue = 9990;/白棋的權(quán)限值被設(shè)為9990/black wins/黑棋贏else if (blacktypecountfour 0)/黑棋有活四bvalue = 9970;/黑棋權(quán)限值被設(shè)為9970/black wins/黑棋贏else if (blacktypecountsfour 0 & blacktypecountthree 0)/有沖四且有活三bvalue = 9960;/黑棋權(quán)限值被設(shè)為9960/
53、white wins/白棋贏else if (whitetypecountthree 0 & blacktypecountsfour = 0)/白棋有活三且黑棋沒有形成沖四wvalue = 9950;/白棋的權(quán)限值被設(shè)為9950/black wins/黑棋贏else if (blacktypecountthree 1 &/黑棋形成多個活三 whitetypecountthree = 0 &/白棋沒有活三whitetypecountsthree = 0)/白棋沒有沖三bvalue = 9940;/黑棋的權(quán)限值被設(shè)為99405.4 網(wǎng)絡(luò)對戰(zhàn)5.4.1 網(wǎng)絡(luò)對戰(zhàn)網(wǎng)絡(luò)對戰(zhàn)主要是能倆個不同的用戶各自使用的計算機連接起來進行對弈。選擇執(zhí)黑或執(zhí)白以及設(shè)定時間:圖5.4.1-1 選擇執(zhí)黑或執(zhí)白界面網(wǎng)絡(luò)對戰(zhàn)實現(xiàn)如圖所示:客戶端一(創(chuàng)建游戲):圖5.4.1-2 創(chuàng)建游戲的客戶端客戶端二(加入游戲):圖5.4.1-3 加入游戲的客戶端網(wǎng)絡(luò)對弈:圖5.4.1-4 網(wǎng)絡(luò)對弈界面客戶端yy獲勝界面:圖5.4.1-5 yy獲勝界面部分核心代碼網(wǎng)絡(luò)對弈的線程class netchessthread extends threadp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅裝修設(shè)計合同范例
- 專業(yè)分包施工合同范例
- 公務(wù)車服務(wù)合同范例
- 加盟中通合同范例
- PRDM1激活的PLXDC2通過JAK1-STAT3反饋調(diào)控肝細胞癌腫瘤相關(guān)巨噬細胞極化的研究
- 穿戴式心電信號智能分析方法研究
- 買抹賬房合同范例
- 儲物柜協(xié)議合同范例
- 釩鈦基MAX相的制備及其儲鋰性能研究
- 人員施工安全合同范例
- 古希臘文明-知到答案、智慧樹答案
- SYT 6968-2021 油氣輸送管道工程水平定向鉆穿越設(shè)計規(guī)范-PDF解密
- 2024年無錫商業(yè)職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案解析
- 交通安全宣傳意義
- 40米落地式腳手架專項施工方案
- 虛擬現(xiàn)實環(huán)境中的自然交互技術(shù)與算法
- 質(zhì)量手冊和質(zhì)量管理手冊
- 志愿服務(wù)與志愿者精神知識考試題庫大全(含答案)
- 2024年北京電子科技職業(yè)學院高職單招(英語/數(shù)學/語文)筆試題庫含答案解析
- 運維人員安全培訓內(nèi)容記錄
- 獨股一箭2010年20w實盤
評論
0/150
提交評論