畢業(yè)論文-圍棋游戲的設計與實現(xiàn)_第1頁
畢業(yè)論文-圍棋游戲的設計與實現(xiàn)_第2頁
畢業(yè)論文-圍棋游戲的設計與實現(xiàn)_第3頁
畢業(yè)論文-圍棋游戲的設計與實現(xiàn)_第4頁
畢業(yè)論文-圍棋游戲的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

太原理工大學畢業(yè)設計(論文)用紙圍棋游戲的設計與實現(xiàn)摘要圍棋作為一個棋類競技運動,在民間十分流行,為了熟悉五子棋規(guī)則及技巧,以及研究簡單的人工智能,決定用Java開發(fā)五子棋游戲。主要完成了人機對戰(zhàn)和玩家之間聯(lián)網對戰(zhàn)2個功能。網絡連接部分為Socket編程應用,客戶端和服務器端的交互用ClassMessage定義,有很好的可擴展性,客戶端負責界面維護和收集用戶輸入的信息,及錯誤處理。服務器維護在線用戶的基本信息和任意兩個對戰(zhàn)用戶的棋盤信息,動態(tài)維護用戶列表。在人機對弈中通過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準性的幾個要素,以及提出若干提高精準性的辦法,以及對它們搜索的節(jié)點數(shù)進行比較,在這些算法的基礎上分析一些提高電腦AI方案,如遞歸算法、電腦學習等。算法的研究有助于理解程序結構,增強邏輯思維能力,在其他人工智能方面也有很大的參考作用。關鍵詞:圍棋,信息自動化,游戲,java

DesignandImplementationofchessgameABSTRACTGoasachesstournamentsportisverypopularinthefolk,inordertoknowtherenjurulesandtechniques,andartificialintelligenceresearchsimple,decidedtouseJavagobanggamedevelopment.Maincompletedtheman-machinebetweennetworkingandmultiplayergamewithtwofunctions.NetworkconnectionpartsforSocketprogrammingapplications,clientandtheservertointeractwiththeClassMessagedefinition,hasgoodscalability,theclientisresponsibleforthemaintenanceandcollectinformationofuserinputinterface,anderrorhandling.Thebasicinformationoftheservermaintenanceonlineusersandanytwoagainsttheuser'sinformationboard,dynamicmaintenanceuserlist.Throughdeepsearchandvaluationinman-machinegamemodule,toimprovecomputerchessplayer'sintelligence.Analysisofseveralfactorsthathaveeffectontheprecisionofthevaluationmodule,andputsforwardsomeimprovetheprecisionofthemethod,aswellastothenumberofnodesinthesearchtocomparethem,onthebasisofthesealgorithmsanalyzesomeimproveAIscheme,suchasrecursivealgorithm,computerlearning,etc.Algorithmresearchhelpstounderstandtheprogramstructure,enhancethelogicalthinkingability,intheotherartificialintelligencealsohasagreatreferencefunction.Keywords:Go,InformationAutomation,Games,Java目錄摘要 iABSTRACT ii第1章緒論 11.1背景 11.2設計內容 2第2章圍棋對弈系統(tǒng) 42.1圍棋概述 42.1.1圍棋定義 42.1.2開發(fā)圍棋的任務及目的 52.2主要系統(tǒng)介紹 52.3本章小結 6第3章圍棋對弈系統(tǒng)的設計 73.1系統(tǒng)需求分析 73.2系統(tǒng)開發(fā)及運行環(huán)境 83.3系統(tǒng)主要功能要求 83.4系統(tǒng)總體結構 93.5本章小結 10第4章圍棋對弈系統(tǒng)的具體實現(xiàn) 114.1界面設計 114.2輸贏判斷設計 144.3程序設計及調試運行 154.4本章小結 15第5章結束語 16參考文獻 17致謝 18附錄 19譯文資料 33中文譯文 47第1章緒論1.1背景圍棋是一種智力游戲,起源于中國。中日韓是現(xiàn)今圍棋的三大支柱,但近年來日本圍棋逐步衰弱,形成了中韓爭霸的局面。圍棋是中華民族傳統(tǒng)文化中的瑰寶,它體現(xiàn)了中華民族對智慧的追求,古人常以“琴棋書畫”論及一個人的才華和修養(yǎng),其中的“棋”指的就是圍棋。被人們形象地比喻為黑白世界的圍棋,是我國古人所喜愛的娛樂競技活動,同時也是人類歷史上最悠久的一種棋戲。由于它將科學、藝術和競技三者融為一體,有著發(fā)展智力,培養(yǎng)意志品質和機動靈活的戰(zhàn)略戰(zhàn)術思想意識的特點,因而,幾千年來長盛不衰,并逐漸地發(fā)展成了一種國際性的文化競技活動。圍棋是一種策略性二人棋類游戲,使用格狀棋盤及黑白二色棋子進行對弈。目前圍棋流行于亞太,覆蓋世界范圍,是一種非常流行的棋類游戲。中國圍棋規(guī)則是數(shù)子法,圍棋的本質是:誰的占地面積大誰獲勝。圍棋的規(guī)則十分簡單,卻擁有十分廣闊的落子空間,使得圍棋變化多端,比其它棋類復雜深奧。這就是圍棋的魅力所在。下圍棋對人腦的智力開發(fā)很有幫助,可增強一個人的計算能力、創(chuàng)造能力、思維能力、判斷能力,也能提高人的注意力和控制力。下圍棋對兒童少年的智力發(fā)展起到積極作用,使他們能更好的分析事物。Java語言是當今最為流行的程序設計語言之一作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向對象,與平臺無關,分布式應用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強大的大型應用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應用程序“一次編寫,處處可用”的實現(xiàn)成為了可能。近來隨著計算機的快速發(fā)展,各種各樣的電腦游戲層出不窮,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍”便是最具說服力的代表。越來越多的具有智能的機器進入了人類的生活,人工智能的重要性如今顯而易見。自己對人工智能比較感興趣,而圍棋游戲程序的開發(fā)實現(xiàn)這個課題,正好提供給我這樣一個研究的機會,通過對人工智能中博弈方面的研究(人機對弈),讓我在簡單的人機對弈全局設計,以及具體到相關算法上有了深入的了解。人工智能屬于計算機科學的領域,它以計算機技術為基礎,近幾十年來,它的理論和技術已經日益成熟,應用領域也正在不斷擴大,顯示出強大的生命力。人工智能大致可以分成幾個學科,它們每一個都是獨特的,但是它們常常又互相結合起來完成設計任務,這時,這些學科之間的差別就變的很模糊。人工智能在專家系統(tǒng),自然語言理解,自動定理證明,自動程序設計,人工智能在機器人學、模式識別、物景分析、數(shù)據庫的智能檢索、機器下棋(實質上是博弈論問題)和家用電器智能化等領域都有廣泛的應用。而這個課題就是和人工智能中的博弈論領域緊密相關的。

這個題目核心是人工智能和Socekt編程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技術,正在各行各業(yè)廣泛滲透。智能已經成為當今各種新產品、新裝備的發(fā)展方向。所以,趁著這個機會,對人工智能中比較容易實現(xiàn)的人機博弈進行了解研究學習,也是很實用且很有必要的。1.2設計內容此設計是一個小游戲(圍棋)的實現(xiàn),主要運用了GUI(用戶圖形界面)API(應用程序借口)來實現(xiàn)。此程序沒有用到圖片的引用,棋盤和棋子的設計完全是應用函數(shù)繪制,再加入復選框,按鈕,標簽及實現(xiàn)本游戲的用戶界面布局。在頁面上通過單純的JCreator實現(xiàn)的下棋程序,能夠實現(xiàn)提子,打劫等簡單的下棋功能。更好的掌握java編程以及布局和設計。通過課程設計把課堂上講的內容融會貫通,學會設計程序、開發(fā)應用軟件、開發(fā)系統(tǒng)軟件等各項工作。通過實習掌握語言的語法結構,理解類和對象的概念,準確的使用各種數(shù)據類型,對面向對象中的繼承和多態(tài)的概念要理解、會使用,在程序中提高代碼的重用性,使設計的程序結構清晰、易于維護。一、棋盤盤面有縱橫各十九條等距離、垂直交叉的平行線,共構成19×19=361個交叉點(以下簡稱為“點”)。在盤面上標有幾個小圓點。稱為星位,中央的星位又稱“天元”。二、棋子棋子分黑白兩色。均為扁圓形。棋子的數(shù)量以黑子181、白子180個為宜。三、圍棋的下法1、對局雙方各執(zhí)一色棋子,黑先白后,交替下子,每次只能下一子。2、棋子下在棋盤的點上。3、棋子下定后,不得向其他點移動。4、輪流下子是雙方的權利,但允許任何一方放棄下子權。四、棋子的氣一個棋子在棋盤上,與它直線緊鄰的空點是這個棋子的“氣”。棋子直線緊鄰的點上,如果有同色棋子存在,則它們便相互連接成一個不可分割的整體。它們的氣也應一并計算。棋子直線緊鄰的點上,如果有異色棋子存在,這口氣就不復存在。如所有的氣均為對方所占據,便呈無氣狀態(tài)。無氣狀態(tài)的棋子不能在棋盤上存在,也就是第四條——提子。五、提子把無氣之子提出盤外的手段叫“提子”。提子有二種:1、下子后,對方棋子無氣,應立即提取。2、下子后,雙方棋子都呈無氣狀態(tài),應立即提取對方無氣之子。六、計算勝負1、貼3又3/4子的規(guī)則第一步,把死子撿掉。第二步,只數(shù)一方圍得點(叫做目)并記錄下來(一般圍得點以整十目為單位),再數(shù)剛才那一方的子數(shù)并記錄下來,再把目數(shù)和子數(shù)加起來。第三步,如果數(shù)的是黑棋,再減去3又3/4子,如果數(shù)的是白棋,再加上3又3/4子。第四步,結果和180又1/2(棋盤361個點的一半)比較,超過就算勝,否則判負。2、讓先與讓子讓先不貼目,讓子要貼還讓子數(shù)的一半(就當被讓方是預先收了單官)。第2章圍棋對弈系統(tǒng)2.1圍棋概述網絡圍棋在中國的出現(xiàn)幾乎跟隨著互聯(lián)網同步成長,1998年,聯(lián)眾率先推出了網絡圍棋對弈。幾年來各大網絡圍棋平臺先后上線,出身各異,水平也參差不齊。根據網絡資料顯示,截止2007年底,中國網絡圍棋平臺平均在線人數(shù)達6萬人。

大型的游戲平臺如QQ游戲、聯(lián)眾游戲中都有圍棋游戲。也就是說QQ圍棋、聯(lián)眾圍棋都是鑲嵌在其游戲平臺之上。依靠游戲平臺用戶人數(shù)的優(yōu)勢,這兩個平臺圍棋用戶人數(shù)占據了網絡圍棋用戶的半數(shù)之多。

但根據專業(yè)人士分析:這部分用戶無論在產品使用深度和對圍棋的認知上是絕對的新手,淺嘗輒止,他們大多是過客。同時他們的圍棋軟件本身也不夠專業(yè)。專業(yè)的網絡圍棋平臺才是中國網絡圍棋普及和發(fā)展的出路。

目前國內的專業(yè)網絡圍棋平臺,大致可分使用韓產軟件和國產軟件兩大類。國內專業(yè)圍棋平臺的領軍人物弈城、TOM,便是使用韓產軟件的代表。兩平臺能夠實現(xiàn)中韓對壘的特性,為他們吸引了不少高水平的棋手,并受到棋友的廣泛認可。但他們同樣有一個死穴,就是兩家皆為購買韓國軟件,不掌握主動權,因此根本無法保證軟件的及時更新,容易受制于韓方。“弈城事件”便將這個致命缺點暴露無疑。

經典的圍棋系統(tǒng)有:Handtalk,Goemate,Wulu,他是陳志行的作品,曾多次獲得過冠軍。在他的指導下一個研究小組編寫了烏鷺(WUIU),也在比賽中取得過亞軍。Handtalk是用匯編語言編寫的,執(zhí)行速度快,程序本身也不大。由于程序并不大,可以推側出其所用到的模式資料也不多。Handtalk在大多數(shù)的情況下都不會失誤,作者本人曾提到他是用到一種類似人類棋手在下圍棋時常用到的手割法來幫助判斷的。Handtalk與其它的程序明顯不同的地方是它的攻殺能力特別強,在大多數(shù)的比賽中,都是通過吃掉對方幾塊棋而獲勝。這是由于程序的棋塊安危判斷能力、形勢判斷能力、眼位判斷能力和模式匹配能力都很強的關系.這些系統(tǒng)的好壞,跟設計者的棋力關系很大。2.1.1圍棋定義圍棋是人生的模擬。開局時,盤上一片空白,就好像一個剛剛有了自覺意識的小孩,睜開了懵懂的雙眼,開始了自己的人生之路。開局時,你可以有各種選擇,自由度最大,走哪一步都不會讓你立刻輸?shù)?。布局基本上是興趣的顯示,有喜歡大模樣的,那是寄希望于未來的做法;有現(xiàn)實地撈空的;有順應對方的思路,不知不覺中達到自己目的的;也有處處與對方作對,即使自己不爽,也要給對方添堵的。由于棋盤的廣大,不可能面面俱到地行棋。過程中,對局者不斷地在判斷、取舍,好像人生開始在選擇自己的道路了。看著這里想要,那里也想要,可是沒法面面俱到,終究只能選取一條路。有時候,你的招法對路,越走越暢,有的時候就有問題,想要的沒要到,越下越添堵。優(yōu)勢時,好比人生得意時,心情很爽,最好一直就這么下去;劣勢時,千方百計尋找對手的破綻,伺機翻盤。心理毅力強的人,總能把弦繃得緊緊的,一直像甲魚一樣咬住對手;心理軟弱的人,很早就放棄抵抗,認輸投降。優(yōu)勢時被對方翻盤了,就好像原本勝券在握的一件事情,被自己搞砸了,懊悔痛恨都沒有用;大敗的棋,忽然找到對手的漏勺又贏了回來,就好像本已被逼到絕境,卻又咸魚翻生,大獲全勝,心情之爽,難以表達!由于圍棋的棋盤相對比較廣大,過程也較反復,一盤棋下來,通常勢均力敵的對手都會有不止一次的獲勝機會。這種翻來覆去的體驗,非常象人生經歷的一種濃縮、抽象。人生,是不可重復的,因此在邁出想要嘗試的一步時,有可能隨之而來的,是非常慘痛的代價。而圍棋的過程,可以讓你在做出種種嘗試后付出最少的代價--大不了輸一盤棋么?推掉再來就是了。圍棋還含有藝術、哲學的成份,以及創(chuàng)造世界的哲理。通過學習圍棋,你不僅享受到其中的樂趣,而且還會開拓一個更加美好的世界。2.1.2開發(fā)圍棋的任務及目的隨著Intemet的普及,網絡游戲己經成為大家耳濡目染的新生事物。網絡游戲從出現(xiàn)到現(xiàn)在發(fā)展的時間很短,但是其發(fā)展速度卻非常之快?,F(xiàn)在,可以說網絡游戲已經成為人們休閑、娛樂的有效方式。網絡游戲種類很多,目前主要分戰(zhàn)略類、RPG類、棋牌類等幾種,常見的棋牌類游戲有中國象棋、國際象棋、圍棋、橋牌、拱豬、麻將等。網絡游戲具有如下特征:2.2主要系統(tǒng)介紹主要功能包括:

能實現(xiàn)聯(lián)機對戰(zhàn),和單機版游戲對戰(zhàn)。

開始游戲之后:

1、用戶雙方自行選擇白棋和黑棋。

2、任何一方可以隨時隨地認輸,游戲結束。

4、要實現(xiàn)圍棋最基本吃掉對方的法則。

此設計為本人原創(chuàng)作品。其中包括:源程序,可執(zhí)行程序,論文,錄像,使用說明。(1)有一個或多個游戲服務器啟動特定游戲服務;(2)游戲者到游戲網站下載客戶端程序并申請游戲賬號。然后啟動客戶端程序通過某種網絡協(xié)議連接游戲服務器。(3)客戶端負責處理客戶端顯示和操作界面,具有簡單的邏輯處理功能力,同時負責接收發(fā)送與服務器端交互的數(shù)據包。(4)服務器程序負方處理服務器端邏輯、游戲邏輯、客戶之間的網絡信息傳遞,以及數(shù)據庫之間的數(shù)據讀取保存工作。同時服務器端還要承擔客戶端數(shù)據的接收、轉發(fā)工作。(5)網絡游戲常用的網絡協(xié)議有Internet的TCP/IP協(xié)議、適用于局域網(如紅色警報聯(lián)網等采用)的IPX協(xié)議。雖然目前很多圍棋游戲正在運行,但是使用java平臺開發(fā)的游戲少之又少,這就使得圍棋客戶端的運行平臺十分有限,不能滿足今后發(fā)展的需求,如移動客戶端,就基本上沒有。因此開發(fā)一套基于java的圍棋系統(tǒng)十分必要。2.3本章小結這一章介紹了當前圍棋應該具備的功能模塊,并提供了市面上比較流行的圍棋系統(tǒng)作為參考。在這一章中,我們可以了解什么是圍棋系統(tǒng),當前圍棋系統(tǒng)的市場需求,還有一個圍棋系統(tǒng)應該的開發(fā)目標。第3章圍棋對弈系統(tǒng)的設計這一章時介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設計,系統(tǒng)的數(shù)據流程圖。3.1系統(tǒng)需求分析1.設計流程(圖3-1)圖3-1設計流程圖2.運行流程(帶流程圖3-2)圖3-2運行流程圖3.2系統(tǒng)開發(fā)及運行環(huán)境硬件平臺:惠普6450B軟件平臺:操作系統(tǒng):Windows7旗艦版。開發(fā)工具包:JDKVersion1.6.0_13MyEclipse8.5分辨率:最佳效果1024×768像素。3.3系統(tǒng)主要功能要求系統(tǒng)設計目標如下:

主要功能包括:

1、能夠在局域網上實現(xiàn)多人在線對戰(zhàn)。

2、能夠實現(xiàn)單機版游戲對戰(zhàn)。

開始游戲之后:

1、用戶雙方選擇白棋和黑棋。

2、任何一方可以隨時隨地認輸,游戲結束。

3、要實現(xiàn)圍棋最基本吃掉對方的法則。此設計為本站原創(chuàng)作品。其中包括:源程序,可執(zhí)行程序,論文,錄像,使用說明。3.4系統(tǒng)總體結構如圖3-3系統(tǒng)功能結構圖圖3-3系統(tǒng)功能結構圖privatevoidjbInit()throwsException{choice1.setBackground(newColor(236,190,98));button1.setBackground(newColor(236,190,98));//try//{//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//}catch(Exceptione){e.printStackTrace();}this.setResizable(false);newThread(this).start();//啟動監(jiān)聽線程this.PORT=1976;this.isInitiative=false;//是否主動連接this.stopFlag=false;//是否繼續(xù)監(jiān)聽的標志this.choice1.addItem("黑");this.choice1.addItem("白");LastPoint=newPoint();messagePoint=newPoint();this.setSize(470,450);this.setTitle("圍棋大戰(zhàn)制造者:郭欣");this.panelGo.setEnabled(false);//開始之前屏蔽掉盤面checkbox1.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox1_mouseClicked(e);}});this.goStartPoint=this.panelGo.getLocation();//this.setLayout(borderLayout1);panel1.setLayout(borderLayout2);checkbox1.setCheckboxGroup(checkboxGroup1);checkbox1.setLabel("單機");checkbox2.setCheckboxGroup(checkboxGroup1);checkbox2.setLabel("聯(lián)機");checkbox2.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox2_mouseClicked(e);}});label1.setText("對方地址");button1.setLabel("連接");3.5本章小結通過對圍棋游戲的編寫,使自己對java語言有了更深的了解。讓我漸漸體會到了JAVA的博大精深。以及怎么學習JAVA,怎么學習計算機語言,怎樣對問題進行解決和運用JAVAGUI,查找JAVAAPI的使用都用了更進一步的理解。也更加熟悉和了解了java開發(fā)工具Eclipse的使用同時,程序在編寫完畢之后還有很多地方需要完善。例如:可以把另一方選擇為電腦方,讓電腦自動下,也可以給游戲添加背景音樂;甚至可以修改成網絡游戲,用戶可以在網上對戰(zhàn)??傊泻芏嗟胤娇梢詳U充和完善。在此次設計過程中我也學到了許多了關于計算機方面的知識,編程能力有了很大的提高。第4章圍棋對弈系統(tǒng)的具體實現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設計的質量,并在很大程度上決定了軟件是否成功。4.1界面設計系統(tǒng)主界面如圖4-1(修改前),圖4-2(修改后)圖4-1主界面修改前//畫棋盤voidpaintChessboard(Graphicsg,PointstartPoint,intinterval){intpX=startPoint.x;intpY=startPoint.y;intLINELENGTH=interval*18;inti;for(i=0;i<19;i++){g.drawLine(pX+i*interval,pY,pX+i*interval,pY+LINELENGTH);g.drawLine(pX,pY+i*interval,pX+LINELENGTH,pY+i*interval);}g.fillOval(pX+interval*3-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*3-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*3-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*9-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.fillOval(pX+interval*15-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14));g.drawRect(pX-3,pY-3,366,366);}圖4-2主界面修改后關鍵代碼: voidinitMyHash(PointstartPoint,intinterval){Oneone;Pointkey;//邏輯點標志inti,j;//定義i,jfor(i=1;i<=19;i++)for(j=1;j<=19;j++)//循環(huán){key=newPoint(i,j);one=newOne();//創(chuàng)建對象one.posX=startPoint.x+(i-1)*interval;//相鄰點處理,獲取one.posY=startPoint.y+(j-1)*interval;//相鄰點處理。獲取//獲取相鄰點one.pointAround[0]=newPoint(i,j-1);//上one.pointAround[1]=newPoint(i,j+1);//下one.pointAround[2]=newPoint(i-1,j);//左one.pointAround[3]=newPoint(i+1,j);//右if(i==1)one.pointAround[2]=one.OUT;//左的周圍if(i==19)one.pointAround[3]=one.OUT;//右的周圍if(j==1)one.pointAround[0]=one.OUT;//上的周圍if(j==19)one.pointAround[1]=one.OUT;//下的周圍myHash.put(key,one);//我的我的哈希表并且在里鍵入關鍵字}}//更新盤面publicvoidpaint(Graphicsg){PointstartPoint=STARTPOINT;//創(chuàng)建對象,開始點intinterval=INTERVAL;//定義成員變量this.paintChessboard(g,startPoint,interval);//棋盤的操作this.paintChessman(g,startPoint,interval);//棋子的操作}//畫棋盤4.2輸贏判斷設計中國規(guī)則又稱數(shù)子規(guī)則,子空皆地,主要在春蘭杯及中國國內使用。它規(guī)定“雙方下子完畢的棋局,計算勝負采用數(shù)子法。先將雙方死子全部清理出盤外,然后對一方的活棋(包括活棋圍住的點)以子為單位進行計數(shù)。雙方活棋之間的空點各得一半,一個點即為一子。勝負的基準以棋局總點數(shù)的一半180又1/2點為歸本數(shù)。凡一方活棋與所屬空點的總和大于此數(shù)者為勝,小于此數(shù)者為負,等于此數(shù)者為和。采用貼子方式的棋局,勝負標準另行規(guī)定。”關于貼子的規(guī)定:“為了抵消黑方先手的效率,現(xiàn)行全國性正式比賽在終局計算勝負時,黑方需貼出三又四分之三子?!币虼?,黑184又1/4,白176又3/4為雙方分別獲勝的基數(shù)。簡言之,就黑方至少185以上方為獲勝,反之白方勝對終局有以下規(guī)定:一、棋局下到雙方一致確認著子完畢,為終局。二、對局中,有一方中途認輸,為終局。關于終局判斷的規(guī)定: 一、除總則第七條的規(guī)定外,凡比賽一方棄權或因各種原因被裁判員判負、判和的對局,也作終局處理。二、雙方確認的終局,確認的次序應是,先由輪走方,后是對方以異色棋子一枚放于已方棋盤右下角的線外。4.3程序設計及調試運行利用JSP“一次編寫,各處運行”的編程優(yōu)點,按功能模塊結構設計菜單,布置各明細模塊工作界面,編寫各個模塊的程序代碼,進行編譯連接運行,經過反復調試修改,以達到系統(tǒng)功能要求。這個過程具有大量的工作量,應仔細對每個程序細節(jié)進行分析思考、編寫程序并調試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要的地方加以注釋,以便于程序閱讀和修改。每個Java源文件都包含一個單一的公共類或接口。若私有類和接口與一個公共類相關聯(lián)??梢詫⑺鼈兒凸差惙湃胪瑐€源文件。公共類必須是這個文件中的第一個類和接口。4.4本章小結本章介紹了系統(tǒng)的具體實現(xiàn)和部分關鍵代碼。1.一個新的系統(tǒng),從頁面到數(shù)據庫再到配置文件,建議統(tǒng)一使用UTF-8。2.setCharacterEncodingFilter只對post請求有效,get一律忽略。3.JavaScript和Ajax亂碼的避免,注意JavaScript默認是ISO8859的編碼,避免JS/AJAX亂碼和GET一樣,不要在URL里面使用中文,實在避免不了,就只能在生成鏈接的時候轉碼,絕對不能想當然的認為SetCharacterEncodingFilter會幫你做什么事情。4.如果在本項目中采用了get方式提交請求并附加參數(shù),結果導致編碼亂碼,原因是Tomcat默認請求編碼是ISO8859,需要在Tomcat的配置文件server.xml添加一個參數(shù),URIEncoding=”UTF-8”,這樣請求中附件的參數(shù)就會以UTF-8來進行編碼。5.Ajax請求亂碼使用Ajax,JS也是默認使用ISO8859編碼,所以在進行請求時遇到中文參數(shù)需要進行編碼,此類做到代碼簡潔清楚,盡量避免可能潛在的程序錯誤如:varurl="GetSelectListAction.do?queryData=subTrade"+"&queryId="+encodeURI(obj.value)+"&r="+Math.random();這里有兩個地方需要注意:第一個地方是encodeURI(),方法,可以將參數(shù)進行轉碼,默認是轉化為UTF-8,如果需要轉為其他碼制,需要在方法中添加第二個參數(shù)。第二個地方是Math.random(),由于Ajax有緩存機制,在接受請求的時候第一時間先判斷該請求的地址是否被訪問過,如果被訪問過則直接使用緩存中的內容返回,這個東西很討厭,客戶在訪問過一次出錯后以后每次出現(xiàn)的都是這個錯誤,所以在請求中給其增加一個時間戳,只要可以隨機生成一個不同的字串就可以,保證Ajax每次都去訪問服務器。第5章結束語圍棋對弈系統(tǒng)的研究與實現(xiàn)為進一步進行計算機博弈打下了一定的基礎。但該系統(tǒng)目前仍有許多問題亟待解決,例如,對死活庫的建立,可以為將來系統(tǒng)進一步判斷死活打下基礎,達到真正智能化,并進一步實現(xiàn)“人-機”對弈。毋庸置疑,這是一個很有研究價值的領域。多次獲得計算機圍棋世界冠軍的“手談”開發(fā)者陳志行教授在《電腦圍棋門徑》中提到了設計計算機圍棋的方法:第一,顯示棋盤棋子及其他必須顯示的內容;設置黑白選擇、進子及有關的功能。第二,設置計算和記錄棋子串氣數(shù)的功能,賦予提子和禁著的功能。第三,設計一種函數(shù),表征每個棋子對周圍的影響,用以劃分勢力范圍,作為靜態(tài)形式判斷的基礎。第四,要對盤上各著點分別試進黑子和白子,比較進子前后的靜態(tài)形勢,以估算該點的進子價值,成為著點選擇的基本依據。還要設置棋譜記錄、計時、發(fā)聲、顯示形式對比、計算勝負等功能?!笆紫缺匦柰瓿汕皟蓚€部分,其次先解決后兩個部分,這樣程序就算是基本會下棋了”。圍棋對弈系統(tǒng)的設計完成了前三個部分,故本系統(tǒng)下一步的工作要解決第四部分的內容,分別對棋局中的各點著黑子和白子,并對落子前后的靜態(tài)局面形勢進行比較,進而估算該點的著子價值,以此作為基本依據進行著點選擇,其中還包括算法優(yōu)化問題,以進一步提高系統(tǒng)的效率。參考文獻[1]馮博.Java網絡編程實例教程,清華大學出版社,,2005.1[2]趙文靖編著.Java程序設計基礎與上機指導.清華大學出版社,2006[3](美)RogersCadenhead.Java編程入門經典.梅興文譯.第4版.人民郵電出版社,2007[4](美)BruceEckel編.《Java編程思想第3版》.機械工業(yè)出版社,2005[5]陳國君等編著.Java2程序設計基礎.清華大學出版社,2006[6]朱喜福等編.Java程序設計.人民郵電出版社,2005[7](美)DougLea著.Java并發(fā)編程:設計原則與模式.中國電力出版社譯。2004[8]李芝興,楊瑞龍編.《Java程序設計之網絡編程》.清華大學出版社,2006[9]趙越超.應用JSP技術開發(fā)Web應用程序[J].中國金融電腦.2002[10]王淑榮,趙晉松,范慧敏,白小軍.JSP技術在WEB應用中的研究[J].西北電力技術2003[11]AndreaSteelman,JoelMurach.Murach'sJavaServletsandJSP[M].2011.[12]MichaelGehond.LogicProgrammingandNonmonotonicReasoning[M]德國.SpringerBerlin/Heidelberg.2007[13]WattsDJ.SmallWorlds.Thedynamicsofnetworksbetweenorderandrandomness[P].America:56A2579BB6,l999-05-13.致謝感謝行文至此,我的這篇論文已接近尾聲;歲月如梭,我四年的大學時光也即將敲響結束的鐘聲。離別在即,站在人生的又一個轉折點上,心中難免思緒萬千,一種感恩之情油然而生。生我者父母。感謝生我養(yǎng)我,含辛茹苦的父母。是你們,為我的學習創(chuàng)造了條件;是你們,一如既往的站在我的身后默默的支持著我。沒有你們就不會有我的今天。謝謝你們,我的父親母親!

在這四年中,老師的諄諄教導、同學的互幫互助使我在專業(yè)技術和為人處事方面都得到了很大的提高。感謝軟件學院在我四年的大學生活當中對我的教育與培養(yǎng),感謝太原理工大學軟件的所有專業(yè)老師,沒有你們的辛勤勞動,就沒有我們今日的滿載而歸,感謝上海杰普軟件公司對我的培養(yǎng),感謝大學四年曾經幫助過我的所有同學。在制作畢業(yè)設計過程中我曾經向老師們和同學們請教過不少的問題,老師們的熱情解答和同學們的熱心幫助才使我的畢業(yè)設計能較為順利的完成。在此我向你們表示最衷心的感謝。 附錄源代碼/*************************MainWindow**********************/importjava.awt.*;//importjavax.swing.*;importjava.awt.event.*;import.*;importjava.io.*;publicclassMainWindowextendsFrameimplementsRunnable{GopanelGo=newGo();ImagemyImage;intPORT;SocketsendSocket;//主動連接SocketPrintWriterwriter;//用來發(fā)送messagebooleanstopFlag;booleanisInitiative;PointmessagePoint;PointgoStartPoint=null;PointyellowPoint=null;booleanstepColor=true;PointLastPoint=null;//移除黃點時,判斷位置變動BorderLayoutborderLayout1=newBorderLayout();Panelpanel1=newPanel();Panelpanel2=newPanel();BorderLayoutborderLayout2=newBorderLayout();Panelpanel3=newPanel();CheckboxGroupcheckboxGroup1=newCheckboxGroup();Checkboxcheckbox1=newCheckbox();Checkboxcheckbox2=newCheckbox();Labellabel1=newLabel();TextFieldtextField1=newTextField();Buttonbutton1=newButton();Labellabel2=newLabel();Choicechoice1=newChoice();Buttonbutton2=newButton();GridLayoutgridLayout1=newGridLayout();BorderLayoutborderLayout3=newBorderLayout();publicMainWindow(){try{jbInit();}catch(Exceptione){e.printStackTrace();}}privatevoidjbInit()throwsException{choice1.setBackground(newColor(236,190,98));button1.setBackground(newColor(236,190,98));//try//{//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//}catch(Exceptione){e.printStackTrace();}this.setResizable(false);newThread(this).start();//啟動監(jiān)聽線程this.PORT=1976;this.isInitiative=false;//是否主動連接this.stopFlag=false;//是否繼續(xù)監(jiān)聽的標志this.choice1.addItem("黑");this.choice1.addItem("白");LastPoint=newPoint();messagePoint=newPoint();this.setSize(470,450);this.setTitle("圍棋大戰(zhàn)制造者:郭欣");this.panelGo.setEnabled(false);//開始之前屏蔽掉盤面checkbox1.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox1_mouseClicked(e);}});this.goStartPoint=this.panelGo.getLocation();//this.setLayout(borderLayout1);panel1.setLayout(borderLayout2);checkbox1.setCheckboxGroup(checkboxGroup1);checkbox1.setLabel("單機");checkbox2.setCheckboxGroup(checkboxGroup1);checkbox2.setLabel("聯(lián)機");checkbox2.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){checkbox2_mouseClicked(e);}});label1.setText("對方地址");button1.setLabel("連接");button1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button1_actionPerformed(e);}});label2.setText("");button2.setBackground(newColor(236,190,98));button2.setLabel("開始");button2.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){button2_actionPerformed(e);}});panel3.setLayout(gridLayout1);gridLayout1.setRows(8);gridLayout1.setColumns(1);gridLayout1.setHgap(100);gridLayout1.setVgap(10);panel2.setLayout(borderLayout3);this.panel2.setSize(500,70);panelGo.addMouseMotionListener(newjava.awt.event.MouseMotionAdapter(){publicvoidmouseMoved(MouseEvente){panelGo_mouseMoved(e);}});panelGo.addMouseListener(newjava.awt.event.MouseAdapter(){publicvoidmouseClicked(MouseEvente){panelGo_mouseClicked(e);}});this.addWindowListener(newjava.awt.event.WindowAdapter(){publicvoidwindowClosing(WindowEvente){this_windowClosing(e);}});panel3.setBackground(newColor(236,190,98));panel3.add(checkbox1,null);panel3.add(checkbox2,null);panel3.add(label1,null);panel3.add(textField1,null);panel3.add(button1,null);panel3.add(choice1,null);panel3.add(button2,null);panel3.add(label2,null);this.panel1.add(this.panelGo,BorderLayout.CENTER);this.panel1.add(panel3,BorderLayout.EAST);this.add(panel2,BorderLayout.SOUTH);this.add(panel1,BorderLayout.CENTER);this.disableLink();//廢掉控件//this.button2.setEnabled(false);//廢掉開始this.checkboxGroup1.setSelectedCheckbox(this.checkbox1);this.yellowPoint=newPoint(1000,1000);//初始化一個世紀外的黃點 this.centerWindow();this.show();myImage=this.createImage(16,16);//用來紀錄有黃點之前的圖像}voidcenterWindow(){ Dimensiond=Toolkit.getDefaultToolkit().getScreenSize(); intpX=(d.width-this.getWidth())/2; intpY=(d.height-this.getHeight())/2; this.setLocation(pX,pY);}publicstaticvoidmain(Stringargs[]){MainWindowmain=newMainWindow();}//監(jiān)聽線程publicvoidrun(){try{ServerSocketserverSocket=newServerSocket(PORT);SocketreceiveSocket=null;receiveSocket=serverSocket.accept();if(this.isInitiative)//如果已在進行,則不接受連接this.stopFlag=true;this.checkboxGroup1.setSelectedCheckbox(this.checkbox2);//自動選擇聯(lián)機this.button1.setEnabled(false);this.choice1.setEnabled(true);this.textField1.setEnabled(false);this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.writer=newPrintWriter(receiveSocket.getOutputStream(),true);BufferedReaderreader=newBufferedReader(newInputStreamReader(receiveSocket.getInputStream()));Stringmessage;while(!this.stopFlag){this.panelGo.showError("接收連接成功");message=reader.readLine();this.doMessage(message);}reader.close();receiveSocket.close();serverSocket.close();}catch(IOExceptionioe){this.panelGo.showError("您贏了");}}//處理接收到的東西voiddoMessage(Stringmessage){if(message.startsWith("start"))//判斷開始{this.panelGo.showError("開始了");if(message.equals("start_black"))this.choice1.select("白");elsethis.choice1.select("黑");if(this.choice1.getSelectedItem().equals("黑"))//只要你是黑的,就先走this.panelGo.setEnabled(true);this.paintMyColor();//表明顏色this.disableLink();}else//下子的信息{intcolor=Integer.parseInt(message.substring(0,1));this.messagePoint.x=Integer.parseInt(message.substring(1,3));this.messagePoint.y=Integer.parseInt(message.substring(3,5));this.panelGo.setEnabled(true);//解禁this.panelGo.doStep(this.messagePoint,color);}}//為鼠標定位voidpanelGo_mouseMoved(MouseEvente){PointrealPoint=e.getPoint();PointmousePoint=this.panelGo.getMousePoint(realPoint,this.goStartPoint);this.removeLastMousePoint(this.LastPoint,mousePoint);//this.LastPoint=mousePoint;大錯誤,使對象公用了一個地址this.LastPoint.x=mousePoint.x;this.LastPoint.y=mousePoint.y;if(this.isPlace(mousePoint))this.showMousePoint(mousePoint);}//加黃點的范圍booleanisPlace(Pointp){if(p.x>19||p.x<1||p.y<1||p.y>19)returnfalse;intcolor;Oneone;one=(One)(this.panelGo.myHash.get(p));color=one.color;if(color!=0)returnfalse;returntrue;}voidpanelGo_mouseClicked(MouseEvente){if(this.isSingle()){this.doSingle();}else{this.doMultiple();}}//開始voidbutton2_actionPerformed(ActionEvente){if(e.getActionCommand().equals("開始")){this.disableLink();this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.button2.setLabel("退出");if(this.isSingle())this.panelGo.setEnabled(true);else//聯(lián)機版時{if(this.choice1.getSelectedItem().equals("黑")){this.writer.println("start_black");}elsethis.writer.println("start_white");}this.paintMyColor();//表明顏色}elseif(e.getActionCommand().equals("退出")){this.dispose();System.exit(0);}}//disable聯(lián)機時用的控件voiddisableLink(){this.textField1.setBackground(newColor(236,190,98));this.textField1.setEnabled(false);this.choice1.setEnabled(false);this.button1.setEnabled(false);}//enable聯(lián)機時的控件voidenableLink(){this.textField1.setBackground(Color.white);this.textField1.setEnabled(true);this.choice1.setEnabled(true);this.button1.setEnabled(true);}//判斷類型booleanisSingle(){returnthis.checkbox1.getState();}voidsingle(){}voidmultiple(){}//加小黃點voidshowMousePoint(PointmousePoint){Graphicsg=this.panelGo.getGraphics();g.setColor(Color.yellow);g.fillOval(mousePoint.x*20-6,mousePoint.y*20-6,this.panelGo.INTERVAL-8,this.panelGo.INTERVAL-8);this.yellowPoint.x=mousePoint.x;//定位黃點this.yellowPoint.y=mousePoint.y;GraphicsmyG=this.myImage.getGraphics();this.createMyImage(myG,this.yellowPoint,0);}//消除前一個黃點vo

溫馨提示

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

評論

0/150

提交評論