版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> Java程序課程設(shè)計任務(wù)書</p><p><b> 主要任務(wù)與目標</b></p><p> 創(chuàng)建一個圍棋對弈平臺。</p><p> 基于Panel類定義一個面板子類,在其中利用Graphics類的drawLine()方法繪制棋盤格線,利用fillOval()方法繪制棋盤四角的星位。為面板注冊MouseEvent
2、監(jiān)聽器,為一個按鈕注冊ActionEvent事件監(jiān)聽器,實現(xiàn)單擊鼠標布子、單機一個重新開局等操作。</p><p> 黑白棋子基于Canvas類的子類,其中,paint()方法用來繪制棋子,通過為棋子注冊MouseEvent事件監(jiān)聽器實現(xiàn)雙擊棋子吃子、右擊棋子悔棋操作。Canvas組件表示屏幕上一個空白矩形區(qū)域,應(yīng)用程序可以在該區(qū)域內(nèi)繪圖,或者從該區(qū)域捕獲用戶的輸入事件。必須重寫paint方法,以便在Canva
3、s上執(zhí)行自定義圖形。</p><p> 主類為Frame的子類,前面創(chuàng)建的棋盤被置入其中。 </p><p><b> 主要內(nèi)容與基本要求</b></p><p><b> 系統(tǒng)的功能要求:</b></p><p> 1. 要求有黑白兩色棋子,保存所有已下的棋子,包括在棋盤上的所有棋子和被踢
4、掉的,若某一次 落子沒有造成踢子,包括所有被這個棋子提掉的棋子及這個棋子本身。如果踢子,則保存所有被踢掉的棋子。保證實現(xiàn)下棋的基本操作如:可以允許悔棋,落子,提示信息,重新開始游戲等功能。</p><p> 2.熟悉JAVA中swing的組件運用,基本工具的熟練掌握。</p><p> 學(xué)習并掌握以下技術(shù):Java;熟練使用以下開發(fā)工具:JCreator 等</p>&l
5、t;p><b> 三、計劃進度</b></p><p> 1.12月28日--12月 29日:搜集資料、查閱文獻,確定選題</p><p> 2.12月29日--01月02日:需求分析,系統(tǒng)設(shè)計,系統(tǒng)功能模塊完善</p><p> 3.01月02日-- 01月06 日:編程實現(xiàn)系統(tǒng)、系統(tǒng)測試與修改4.01月05日-- 01月07
6、日:課程設(shè)計報告撰寫</p><p> 5.01月 07日--01月07日:課程設(shè)計報告答辯</p><p><b> 主要參考文獻:</b></p><p> 陳軼.姚曉昆編著.Java程序設(shè)計實驗指導(dǎo).北京:清華大學(xué)出版社,2006</p><p> 趙文靖編著.Java程序設(shè)計基礎(chǔ)與上機指導(dǎo).北京:清華大
7、學(xué)出版社,2006</p><p> 吳其慶編著.Java程序設(shè)計實例教程.北京:冶金工業(yè)出版社,2006</p><p> 陳國君等編著.Java2程序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2006</p><p> [5].Java網(wǎng)絡(luò)編程實例教程,清華大學(xué)出版社,馮博等,2005.1</p><p><b> 摘要&l
8、t;/b></p><p> 圍棋作為一個棋類競技運動,在民間十分流行,為了熟悉五子棋規(guī)則及技巧,以及研究簡單的人工智能,決定用Java開發(fā)五子棋游戲。主要完成了人機對戰(zhàn)和玩家之間聯(lián)網(wǎng)對戰(zhàn)2個功能。網(wǎng)絡(luò)連接部分為Socket編程應(yīng)用,客戶端和服務(wù)器端的交互用Class Message定義,有很好的可擴展性,客戶端負責界面維護和收集用戶輸入的信息,及錯誤處理。服務(wù)器維護在線用戶的基本信息和任意兩個對戰(zhàn)用戶的
9、棋盤信息,動態(tài)維護用戶列表。在人機對弈中通過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準性的幾個要素,以及提出若干提高精準性的辦法,以及對它們搜索的節(jié)點數(shù)進行比較,在這些算法的基礎(chǔ)上分析一些提高電腦AI方案,如遞歸算法、電腦學(xué)習等。算法的研究有助于理解程序結(jié)構(gòu),增強邏輯思維能力,在其他人工智能方面也有很大的參考作用。</p><p> 關(guān)鍵詞:圍棋,信息自動化,游戲,java</p
10、><p><b> ABSTRACT</b></p><p> As a chess athletic sports, the folk very popular, to familiar with renju rules and skills, and research simple artificial intelligence, decided to use J
11、ava development renju game. Main completed the man-machine against and between players networking against two functions. Network connection parts for Socket programming application, the client and the server interaction
12、with scale-up macro definition, have very good scalability, the client is responsible for maintenance and collect user interfac</p><p> Keywords: information automation , games , Java</p><p>&l
13、t;b> 目 錄</b></p><p> Java程序課程設(shè)計任務(wù)書II</p><p><b> 摘要IV</b></p><p> ABSTRACTV</p><p><b> 目 錄VI</b></p><p><b>
14、 第1章 引言1</b></p><p><b> 1.1 背景1</b></p><p> 1.2 課程設(shè)計內(nèi)容2</p><p> 1.3 任務(wù)分工4</p><p> 第2章 圍棋對弈系統(tǒng)5</p><p> 2.1 圍棋概述5</p><
15、;p> 2.1.1圍棋定義6</p><p> 2.1.2 開發(fā)圍棋的任務(wù)及目的7</p><p> 2.2 主要系統(tǒng)介紹7</p><p> 2.3 本章小結(jié)8</p><p> 第3章 圍棋對弈系統(tǒng)的設(shè)計9</p><p> 3.1 系統(tǒng)需求分析9</p><p&g
16、t;<b> 用戶登陸界面圖9</b></p><p> 3.2 系統(tǒng)開發(fā)及運行環(huán)境10</p><p> 3.3 系統(tǒng)主要功能要求11</p><p> 3.4.系統(tǒng)總體結(jié)構(gòu)12</p><p> 3.5 本章小結(jié)13</p><p> 第4章 圍棋對弈系統(tǒng)的具體實現(xiàn)14
17、</p><p> 4.1界面設(shè)計14</p><p> 4.1.1用戶登陸界面圖14</p><p> 4.1.2用戶注冊界面圖15</p><p> 4.1.3 系統(tǒng)主界面18</p><p> 4.2程序設(shè)計及調(diào)試運行21</p><p> 4.3 本章小結(jié)21&l
18、t;/p><p> 第5章 結(jié)束語22</p><p><b> 致謝23</b></p><p><b> 參考文獻24</b></p><p><b> 附錄 源代碼25</b></p><p><b> 第1章 引言<
19、/b></p><p><b> 1.1 背景</b></p><p> 圍棋是一種智力游戲,起源于中國。中日韓是現(xiàn)今圍棋的三大支柱,但近年來日本圍棋逐步衰弱,形成了中韓爭霸的局面。</p><p> 圍棋是中華民族傳統(tǒng)文化中的瑰寶,它體現(xiàn)了中華民族對智慧的追求,古人常以“琴棋書畫”論及一個人的才華和修養(yǎng),其中的“棋”指的就是圍棋。
20、被人們形象地比喻為黑白世界的圍棋,是我國古人所喜愛的娛樂競技活動,同時也是人類歷史上最悠久的一種棋戲。由于它將科學(xué)、藝術(shù)和競技三者融為一體,有著發(fā)展智力,培養(yǎng)意志品質(zhì)和機動靈活的戰(zhàn)略戰(zhàn)術(shù)思想意識的特點,因而,幾千年來長盛不衰, 并逐漸地發(fā)展成了一種國際性的文化競技活動。</p><p> 圍棋是一種策略性二人棋類游戲,使用格狀棋盤及黑白二色棋子進行對弈。目前圍棋流行于亞太,覆蓋世界范圍,是一種非常流行的棋類游戲
21、。</p><p> 中國圍棋規(guī)則是數(shù)子法,圍棋的本質(zhì)是:誰的占地面積大誰獲勝。</p><p> 圍棋的規(guī)則十分簡單,卻擁有十分廣闊的落子空間,使得圍棋變化多端,比其它棋類復(fù)雜深奧。這就是圍棋的魅力所在。下圍棋對人腦的智力開發(fā)很有幫助,可增強一個人的計算能力、創(chuàng)造能力、思維能力、判斷能力,也能提高人的注意力和控制力。下圍棋對兒童少年的智力發(fā)展起到積極作用,使他們能更好的分析事物。&l
22、t;/p><p> Java語言是當今最為流行的程序設(shè)計語言之一 作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向?qū)ο?,與平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強大的大型應(yīng)用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應(yīng)用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應(yīng)用程序“一次編寫,處處可用”的實現(xiàn)成為了可能。<
23、/p><p> 近來隨著計算機的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍”便是最具說服力的代表。</p><p> 越來越多的具有智能的機器進入了人類的生活,人工智能的重要性如今顯而易見。自己對人工智能比較感興趣,而圍棋游戲程序
24、的開發(fā)實現(xiàn)這個課題,正好提供給我這樣一個研究的機會,通過對人工智能中博弈方面的研究(人機對弈),讓我在簡單的人機對弈全局設(shè)計,以及具體到相關(guān)算法上有了深入的了解。人工智能屬于計算機科學(xué)的領(lǐng)域,它以計算機技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴大,顯示出強大的生命力。人工智能大致可以分成幾個學(xué)科,它們每一個都是獨特的,但是它們常常又互相結(jié)合起來完成設(shè)計任務(wù),這時,這些學(xué)科之間的差別就變的很模糊。人工智能在專
25、家系統(tǒng),自然語言理解,自動定理證明,自動程序設(shè)計,人工智能在機器人學(xué)、模式識別、物景分析、數(shù)據(jù)庫的智能檢索、機器下棋(實質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。而這個課題就是和人工智能中的博弈論領(lǐng)域緊密相關(guān)的。 這個題目核心是人工智能和Socekt編程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技術(shù),正在各行各業(yè)廣泛滲透。智能已經(jīng)成為當今各種新產(chǎn)品、新裝備的發(fā)展
26、方向。所</p><p> 1.2 課程設(shè)計內(nèi)容</p><p> 此課程設(shè)計是一個小游戲(圍棋)的實現(xiàn),主要運用了GUI(用戶圖形界面)API(應(yīng)用程序借口)來實現(xiàn)。此程序沒有用到圖片的引用,棋盤和棋子的設(shè)計完全是應(yīng)用函數(shù)繪制, 再加入復(fù)選框,按鈕,標簽及實現(xiàn)本游戲的用戶界面布局。</p><p> 在頁面上通過單純的JCreator實現(xiàn)的下棋程序,能夠?qū)?/p>
27、現(xiàn)提子,打劫等簡單的下棋功能。更好的掌握java編程以及布局和設(shè)計。通過課程設(shè)計把課堂上講的內(nèi)容融會貫通,學(xué)會設(shè)計程序、開發(fā)應(yīng)用軟件、開發(fā)系統(tǒng)軟件等各項工作。通過實習掌握語言的語法結(jié)構(gòu),理解類和對象的概念,準確的使用各種數(shù)據(jù)類型,對面向?qū)ο笾械睦^承和多態(tài)的概念要理解、會使用,在程序中提高代碼的重用性,使設(shè)計的程序結(jié)構(gòu)清晰、易于維護。</p><p><b> 一、棋盤 </b></p
28、><p> 盤面有縱橫各十九條等距離、垂直交叉的平行線,共構(gòu)成19×19=361個交叉點(以下簡稱為 “點”)。 在盤面上標有幾 個小圓點。稱為星位,中央的星位又稱“天元”。</p><p><b> 二、棋子 </b></p><p> 棋子分黑白兩色。均為扁圓形。 棋子的數(shù)量以黑子181、白子180個為宜。</p>
29、<p><b> 三、圍棋的下法</b></p><p> 一、對局雙方各執(zhí)一色棋子,黑先白后,交替下子,每次只能下一子。 </p><p> 二、棋子下在棋盤的點上。 </p><p> 三、棋子下定后,不得向其他點移動。 </p><p> 四、輪流下子是雙方的權(quán)利,但允許任何一方放棄下子權(quán)。&
30、lt;/p><p><b> 四、棋子的氣</b></p><p> 一個棋子在棋盤上,與它直線緊鄰的空點是這個棋子的“氣”。 棋子直線緊鄰的點上,如果有同色棋子存在,則它們便相互連接成一個不可分割的整體。它們的氣也應(yīng)一并計算。 棋子直線緊鄰的點上,如果有異色棋子存在,這口氣就不復(fù)存在。如所有的氣均為對方所占據(jù),便呈無氣狀態(tài)。無氣狀態(tài)的棋子不能在棋盤上存在,也就是第四
31、條——提子。 </p><p><b> 五、提子 </b></p><p> 把無氣之子提出盤外的手段叫“提子”。 </p><p><b> 提子有二種: </b></p><p> 一、下子后,對方棋子無氣,應(yīng)立即提取。 </p><p> 二、下子后,雙方棋
32、子都呈無氣狀態(tài),應(yīng)立即提取對方無氣之子。</p><p><b> 六、計算勝負 </b></p><p> 1、貼3又3/4子的規(guī)則 </p><p> 第一步,把死子撿掉。第二步,只數(shù)一方圍得點(叫做目)并記錄下來(一般圍得點以整十目為單位),再數(shù)剛才那一方的子數(shù)并記錄下來,再把目數(shù)和子數(shù)加起來。第三步,如果數(shù)的是黑棋,再減去3又3/
33、4子,如果數(shù)的是白棋,再加上3又3/4子。第四步,結(jié)果和180又1/2(棋盤361個點的一半)比較,超過就算勝,否則判負。 </p><p><b> 2、讓先與讓子 </b></p><p> 讓先不貼目,讓子要貼還讓子數(shù)的一半(就當被讓方是預(yù)先收了單官)。</p><p><b> 1.3 任務(wù)分工</b><
34、;/p><p> 第2章 圍棋對弈系統(tǒng)</p><p><b> 2.1 圍棋概述</b></p><p> 網(wǎng)絡(luò)圍棋在中國的出現(xiàn)幾乎跟隨著互聯(lián)網(wǎng)同步成長,1998年, 聯(lián)眾率先推出了網(wǎng)絡(luò)圍棋對弈。幾年來各大網(wǎng)絡(luò)圍棋平臺先后 上線,出身各異,水平也參差不齊。根據(jù)網(wǎng)絡(luò)資料顯示,截止 2007年底,中國網(wǎng)絡(luò)圍棋平臺平均在線人數(shù)達6萬人。
35、大型的游戲平臺如QQ游戲、聯(lián)眾游戲中都有圍棋游戲。也就是 說QQ圍棋、聯(lián)眾圍棋都是鑲嵌在其游戲平臺之上。依靠游戲平 臺用戶人數(shù)的優(yōu)勢,這兩個平臺圍棋用戶人數(shù)占據(jù)了網(wǎng)絡(luò)圍棋 用戶的半數(shù)之多。 但根據(jù)專業(yè)人士分析:這部分用戶無論在產(chǎn)品使用深度和對圍 棋的認知上是絕對的新手,淺嘗輒止,他們大多是過客。同時 他們的圍棋軟件本身也不夠?qū)I(yè)。專業(yè)的網(wǎng)絡(luò)圍棋平臺才是中 國網(wǎng)絡(luò)圍棋普及和發(fā)展的出路。 目前國內(nèi)的專業(yè)網(wǎng)絡(luò)圍棋平臺
36、,大致可分使用韓產(chǎn)軟件和國 產(chǎn)軟件兩大類。國內(nèi)專業(yè)圍棋平臺的領(lǐng)軍人物弈城、TOM, 便 是使用韓產(chǎn)軟件的代表。兩平臺能夠?qū)崿F(xiàn)中韓對壘的特性,為 他們吸引了不少高水平的棋手,并受到棋友的廣泛認可。但他 們同樣有一個死穴,就是兩家皆為購買韓國軟件,不掌握主動 權(quán),因此根本無法保證軟件的及時更新,容易受制于韓方。“弈 城事件”便將這個致命缺點暴露無疑</p><p><b> 2.1.1圍棋定義</b
37、></p><p><b> 圍棋是人生的模擬。</b></p><p> 開局時,盤上一片空白,就好像一個剛剛有了自覺意識的小孩,睜開了懵懂的雙眼,開始了自己的人生之路。開局時,你可以有各種選擇,自由度最大,走哪一步都不會讓你立刻輸?shù)簟?lt;/p><p> 布局基本上是興趣的顯示,有喜歡大模樣的,那是寄希望于未來的做法;有現(xiàn)實地撈空
38、的;有順應(yīng)對方的思路,不知不覺中達到自己目的的;也有處處與對方作對,即使自己不爽,也要給對方添堵的。</p><p> 由于棋盤的廣大,不可能面面俱到地行棋。過程中,對局者不斷地在判斷、取舍,好像人生開始在選擇自己的道路了??粗@里想要,那里也想要,可是沒法面面俱到,終究只能選取一條路。有時候,你的招法對路,越走越暢,有的時候就有問題,想要的沒要到,越下越添堵。</p><p> 優(yōu)勢
39、時,好比人生得意時,心情很爽,最好一直就這么下去;劣勢時,千方百計尋找對手的破綻,伺機翻盤。心理毅力強的人,總能把弦繃得緊緊的,一直像甲魚一樣咬住對手;心理軟弱的人,很早就放棄抵抗,認輸投降。</p><p> 優(yōu)勢時被對方翻盤了,就好像原本勝券在握的一件事情,被自己搞砸了,懊悔痛恨都沒有用;大敗的棋,忽然找到對手的漏勺又贏了回來,就好像本已被逼到絕境,卻又咸魚翻生,大獲全勝,心情之爽,難以表達!</p&
40、gt;<p> 由于圍棋的棋盤相對比較廣大,過程也較反復(fù),一盤棋下來,通常勢均力敵的對手都會有不止一次的獲勝機會。這種翻來覆去的體驗,非常象人生經(jīng)歷的一種濃縮、抽象。人生,是不可重復(fù)的,因此在邁出想要嘗試的一步時,有可能隨之而來的,是非常慘痛的代價。而圍棋的過程,可以讓你在做出種種嘗試后付出最少的代價--大不了輸一盤棋么?推掉再來就是了。</p><p> 我想,這就是圍棋的魅力之所在吧。<
41、;/p><p> 2.1.2 開發(fā)圍棋的任務(wù)及目的</p><p> 隨著 Intemet 的普及,網(wǎng)絡(luò)游戲己經(jīng)成為大家耳濡目染的新生事物。網(wǎng)絡(luò)游戲從出現(xiàn)到現(xiàn)在發(fā)展的時間很短,但是其發(fā)展速度卻非常之快?,F(xiàn)在,可以說網(wǎng)絡(luò)游戲已經(jīng)成為人們休閑、娛樂的有效方式。網(wǎng)絡(luò)游戲種類很多,目前主要分戰(zhàn)略類、 RPG 類、棋牌類等幾種,常見的棋牌類游戲有中國象棋、國際象棋、圍棋、橋牌、拱豬、麻將等。網(wǎng)絡(luò)游戲
42、具有如下特征:(1)有一個或多個游戲服務(wù)器啟動特定游戲服務(wù);(2)游戲者到游戲網(wǎng)站下載客戶端程序并申請游戲賬號。然后啟動客戶端程序通過某種網(wǎng)絡(luò)協(xié)議連接游戲服務(wù)器。(3)客戶端負責處理客戶端顯示和操作界面,具有簡單的邏輯處理功能力, 同時負責接收發(fā)送與服務(wù)器端交互的數(shù)據(jù)包。(4)服務(wù)器程序負方處理服務(wù)器端邏輯、游戲邏輯、客戶之間的網(wǎng)絡(luò)信息傳遞,以及數(shù)據(jù)庫之間的數(shù)據(jù)讀取保存工作。 同時服務(wù)器端還要承擔客戶端數(shù)據(jù)的接收、轉(zhuǎn)發(fā)工作。(
43、 5 ) 網(wǎng)絡(luò)游戲常用的網(wǎng)絡(luò)協(xié)議有Internet的 TCp / IP 協(xié)議、適用于局域網(wǎng)(如紅色警報聯(lián)網(wǎng)等采用)的IPX協(xié)議。雖然目前很多圍棋游戲正在運行,但是使用java平臺開發(fā)的游戲少之又少,這就使得圍棋客戶端的運行平臺十分有限,</p><p> 2.2 主要系統(tǒng)介紹</p><p> 主要功能包括:用戶連接服務(wù)器之后:1、新用戶可以注冊。2、老用戶必須登陸,才可以玩游
44、戲等其他動作。開始游戲之后:1、用戶雙方選擇白棋和黑棋。2、任何一方可以隨時隨地認輸,游戲結(jié)束。4、要實現(xiàn)圍棋最基本吃掉對方的法則。此設(shè)計為本站原創(chuàng)作品。其中包括:源程序,可執(zhí)行程序,論文,錄像,使用說明。</p><p><b> 2.3 本章小結(jié)</b></p><p> 這一章介紹了當前圍棋應(yīng)該具備的功能模塊,并提供了市面上比較流行的圍棋系統(tǒng)作為參
45、考。在這一章中,我們可以了解什么是圍棋系統(tǒng),當前圍棋系統(tǒng)的市場需求,還有一個圍棋系統(tǒng)應(yīng)該的開發(fā)目標。</p><p> 第3章 圍棋對弈系統(tǒng)的設(shè)計</p><p> 這一章時介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計,系統(tǒng)的數(shù)據(jù)流程圖。</p><p> 3.1 系統(tǒng)需求分析</p><p><b> 用戶登陸界面圖&
46、lt;/b></p><p> 3.設(shè)計流程(帶流程圖)</p><p> 3.設(shè)計流程(帶流程圖)</p><p><b> 游戲初始化</b></p><p><b> 白棋贏</b></p><p><b> 黑棋贏</b><
47、/p><p><b> 判斷</b></p><p><b> 準備就緒</b></p><p> 3.2 系統(tǒng)開發(fā)及運行環(huán)境</p><p><b> 硬件平臺:</b></p><p> CPU:P41.8GHz。</p><
48、;p> 內(nèi)存:256MB以上。</p><p><b> 軟件平臺:</b></p><p> 操作系統(tǒng):Windows XP。</p><p> 開發(fā)工具包:JDK Version1.6.2。</p><p> JSP服務(wù)器:Tomcat 6.0。</p><p> 瀏覽器:
49、推薦使用IE6.0。</p><p> 分辨率:最佳效果1024×768像素。 </p><p> 3.3 系統(tǒng)主要功能要求</p><p> 系統(tǒng)設(shè)計目標如下:主要功能包括:1、能夠在局域網(wǎng)上實現(xiàn)多人在線對戰(zhàn)。用戶連接服務(wù)器之后:1、新用戶可以注冊。
50、2、老用戶必須登陸,才可以玩游戲等其他動作。3、登陸之后,用戶可以選擇跟哪個在線玩家對戰(zhàn),如果對方同意,游戲開始。4、如果有以前沒有下完的棋譜,可以選擇讀取棋譜,看看每一部是怎么走的。開始游戲之后:1、用戶雙方選擇白棋和黑棋。2、任何一方可以隨時隨地認輸,游戲結(jié)束。3、如果雙方?jīng)]有下完,可以保存棋盤。4、要實現(xiàn)圍棋最基本吃掉對方的法則。此設(shè)計為本站原創(chuàng)作品。其中包括:源程序,可執(zhí)行程序,論文,錄像,使用說明。</p
51、><p> 3.4.系統(tǒng)總體結(jié)構(gòu)</p><p> 圖3.1 系統(tǒng)功能結(jié)構(gòu)圖</p><p> 介紹:各功能模塊實現(xiàn)的功能為:</p><p> 庫存管理功能模塊圖如圖3.2所示。</p><p> 圖3.2庫存管理功能模塊圖</p><p><b> 3.5 本章小結(jié)<
52、;/b></p><p> 通過對圍棋游戲的編寫,使自己對java語言有了更深的了解。讓我漸漸體會到了JAVA的博大精深。以及怎么學(xué)習JAVA,怎么學(xué)習計算機語言,怎樣對問題進行解決和運用JAVA GUI,查找JAVA API的使用都用了更進一步的理解。也更加熟悉和了解了java開發(fā)工具Eclipse的使用</p><p> 同時,程序在編寫完畢之后還有很多地方需要完善。例如:可
53、以把另一方選擇為電腦方,讓電腦自動下,也可以給游戲添加背景音樂;甚至可以修改成網(wǎng)絡(luò)游戲,用戶可以在網(wǎng)上對戰(zhàn)??傊?,有很多地方可以擴充和完善。在此次設(shè)計過程中我也學(xué)到了許多了關(guān)于計算機方面的知識,編程能力有了很大的提高。</p><p> 第4章 圍棋對弈系統(tǒng)的具體實現(xiàn)</p><p> 界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計的質(zhì)量, 并在很大程度上決定了軟件是否成功
54、。</p><p><b> 4.1界面設(shè)計</b></p><p> 4.1.1用戶登陸界面圖</p><p> 圖4.1.1 用戶登錄模塊框圖</p><p> 圖4.1 用戶登陸界面</p><p> 此loginDialog函數(shù)的作用是檢測用戶登陸的合法性,并確認用戶輸入了合法
55、的登錄名和口令。</p><p><b> 部分代碼:</b></p><p> login = new JDialog();</p><p> login.setTitle("登錄"); //設(shè)置標題</p><p> login.setLayout(new FlowLayout())
56、; //利用流布局來設(shè)置窗口的布局</p><p> login.add(new JLabel("用戶名:")); //添加標簽為用戶名的對象</p><p> final JTextField name = new JTextField(10); //設(shè)置文本框中字符不得超過10個</p><p> login.add(nam
57、e);</p><p> login.add(new JLabel("密 碼:"));</p><p> final JPasswordField password = new JPasswordField(10); //設(shè)置密碼框中字符不得多于10個</p><p> password.setEchoChar('*
58、9;); //設(shè)置顯示密碼對應(yīng)的字符為*</p><p> 4.1.2用戶注冊界面圖</p><p> 圖4.2 用戶注冊界面</p><p> private void registerDialog(final JDialog regDialog) {</p><p> Box box1 = Box.createVertical
59、Box();</p><p> box1.add(new JLabel("用戶名:", JLabel.RIGHT)); //添加用戶名標簽,用戶名在標簽中靠右對齊</p><p> box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("性別:&q
60、uot;, JLabel.RIGHT)); //添加性別標簽,性別在標簽中靠右對齊</p><p> box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("密碼:", JLabel.RIGHT), -1); //添加密碼標簽,密碼在標簽中靠右對齊</p><p&g
61、t; box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("確認密碼:", JLabel.RIGHT)); //添加確認密碼標簽,確認密碼在標簽中靠右對齊</p><p> Box box2 = Box.createVerticalBox();</p><p&g
62、t; final JTextField nameTextField = new JTextField(10); //設(shè)置用戶名文本框字符不得超過10個,且文本框不能被繼承</p><p> box2.add(nameTextField);</p><p> box2.add(Box.createVerticalStrut(8));</p><p> fin
63、al CheckboxGroup cbg = new CheckboxGroup();</p><p> Box box21 = Box.createHorizontalBox();</p><p> final Checkbox cb1 = new Checkbox("男", cbg, true); //復(fù)選框默認狀態(tài)選定為男性</p><
64、p> box21.add(cb1);</p><p> box21.add(new Checkbox("女", cbg, false)); //當鼠標點擊女性復(fù)選框時,flase自動變?yōu)閠rue</p><p> box2.add(box21);</p><p> box2.add(Box.createVerticalSt
65、rut(8)); </p><p> //定義密碼框中的字符長度小于10個</p><p> final JPasswordField pass1 = new JPasswordField(10);</p><p> box2.add(pass1);</p><p> box2.add(Box.createVerticalStrut(
66、8));</p><p> final JPasswordField pass2 = new JPasswordField(10);</p><p> box2.add(pass2);</p><p> Box baseBox = Box.createHorizontalBox();</p><p> baseBox.add(box1
67、);</p><p> baseBox.add(box2);</p><p> regDialog.setLayout(new FlowLayout());</p><p> regDialog.add(baseBox);</p><p> JButton confirm = new JButton("確定");
68、 //創(chuàng)建并聲明確定按鈕</p><p> JButton cancel = new JButton("取消"); //創(chuàng)建并聲明取消按鈕</p><p> regDialog.add(confirm);</p><p> regDialog.add(cancel);</p><p> regDialog.
69、setSize(200, 200); //設(shè)置大小</p><p> regDialog.setResizable(false);</p><p> regDialog.setLocationRelativeTo(null);</p><p> confirm.addActionListener(new ActionListener() {</p&
70、gt;<p> public void actionPerformed(ActionEvent arg0) {</p><p> String sex = null;</p><p> if (cbg.getSelectedCheckbox() == cb1)</p><p> sex = "男";</p>&
71、lt;p><b> else</b></p><p> sex = "女";</p><p> if (saveUserData(nameTextField.getText().trim(), sex, </p><p> new String(pass1.getPassword()), new String(
72、pass2.getPassword())))</p><p> regDialog.setVisible(false);</p><p><b> else</b></p><p> JOptionPane.showMessageDialog(regDialog, "輸入有誤,請檢查", "錯誤提示"
73、;,</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p> }); //獲取監(jiān)聽器</p><p> cancel.addActionListener(new ActionListener() {</p>&l
74、t;p> public void actionPerformed(ActionEvent arg0) {</p><p> regDialog.setVisible(false);</p><p><b> }</b></p><p> }); //獲取監(jiān)聽器</p><p><b> }
75、</b></p><p> 4.1.3 系統(tǒng)主界面</p><p><b> 主界面修改前</b></p><p><b> 主界面修改后</b></p><p> 圖4.3 系統(tǒng)主界面</p><p><b> 關(guān)鍵代碼:</b>
76、</p><p> void initMyHash(Point startPoint,int interval)</p><p><b> {</b></p><p><b> One one;</b></p><p> Point key;
77、 //邏輯點標志</p><p> int i,j; //定義i,j</p><p> for(i=1;i<=19;i++)</p><p> for(j=1;j<=19;j++) //循環(huán)</p><p>&
78、lt;b> {</b></p><p> key=new Point(i,j);</p><p> one=new One(); //創(chuàng)建對象</p><p> one.posX=startPoint.x+(i-1)*interval;//相鄰點處理,獲取</p><p> o
79、ne.posY=startPoint.y+(j-1)*interval;//相鄰點處理。獲取//獲取相鄰點</p><p> one.pointAround[0]=new Point(i,j-1); //上</p><p> one.pointAround[1]=new Point(i,j+1); //下</p><p> one.poin
80、tAround[2]=new Point(i-1,j); //左</p><p> one.pointAround[3]=new Point(i+1,j); //右</p><p> if(i==1)one.pointAround[2]=one.OUT; //左的周圍</p><p> if(i==19)one.pointAro
81、und[3]=one.OUT; //右的周圍</p><p> if(j==1)one.pointAround[0]=one.OUT; //上的周圍</p><p> if(j==19)one.pointAround[1]=one.OUT; //下的周圍</p><p> myHash.put(key,one);
82、 //我的我的哈希表并且在里鍵入關(guān)鍵字</p><p><b> }</b></p><p><b> }</b></p><p><b> //更新盤面</b></p><p> public void paint(Graphics g)&l
83、t;/p><p><b> {</b></p><p> Point startPoint=STARTPOINT; //創(chuàng)建對象,開始點</p><p> int interval=INTERVAL; //定義成員變量</p><p
84、> this.paintChessboard(g,startPoint,interval); //棋盤的操作</p><p> this.paintChessman(g,startPoint,interval); //棋子的操作</p><p><b> }</b></p><p><b> //畫棋
85、盤</b></p><p> 4.2程序設(shè)計及調(diào)試運行</p><p> 利用JSP“一次編寫,各處運行”的編程優(yōu)點,按功能模塊結(jié)構(gòu)設(shè)計菜單,布置各明細模塊工作界面,編寫各個模塊的程序代碼,進行編譯連接運行,經(jīng)過反復(fù)調(diào)試修改,以達到系統(tǒng)功能要求。這個過程具有大量的工作量,應(yīng)仔細對每個程序細節(jié)進行分析思考、編寫程序并調(diào)試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要
86、的地方加以注釋,以便于程序閱讀和修改。</p><p><b> 4.3 本章小結(jié)</b></p><p> 本章介紹了系統(tǒng)的具體實現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要用到的loginDialog函數(shù),主界面的框架設(shè)計。</p><p><b> 第5章 結(jié)束語</b></p><p>
87、Java語言是當今最為流行的程序設(shè)計語言之一 作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向?qū)ο?,與平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強大的大型應(yīng)用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應(yīng)用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應(yīng)用程序“一次編寫,處處可用”的實現(xiàn)成為了可能。</p><p> 人工
88、智能屬于計算機科學(xué)的領(lǐng)域,它以計算機技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴大,顯示出強大的生命力。</p><p> 近來隨著計算機的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍”便是最具說服力的代表。</p>
89、;<p><b> 致謝</b></p><p><b> 參考文獻</b></p><p> 基于Java的遠程圍棋對弈軟件的設(shè)計 《華東交通大學(xué)學(xué)報》 1999年01期 </p><p> [美]Rogers Cadenhead. Java編程入門經(jīng)典.梅興文譯.第4版.北京:人民郵電出版社,
90、2007</p><p> 楊昭編著.二級Java語言程序設(shè)計教程.北京:中國水利水電出版社,2006</p><p> 李芝興,楊瑞龍編.《Java程序設(shè)計之網(wǎng)絡(luò)編程》.清華大學(xué)出版社,2006年3</p><p> 宛延闿等編著.實用Java程序設(shè)計教程.北京:機械工業(yè)出版社,2006</p><p> 陳國君等編著.Java2程
91、序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2006</p><p> 鄭莉.王行言.馬素霞編著.Java語言程序設(shè)計.北京:清華大學(xué)出版社,2006</p><p> 丁振凡主編.Java語言實用教程.北京:北京郵電大學(xué)出版社,2005</p><p> 朱喜福等編.Java程序設(shè)計.北京:人民郵電出版社,2005</p><p> ?。溃〣
92、ruce Eckel編.《Java編程思想第3版》.機械工業(yè)出版社, 2005年9月</p><p> ?。溃〥oug Lea著.Java并發(fā)編程:設(shè)計原則與模式.中國電力出版社譯。2004年3月。</p><p> Java技術(shù)論壇:http://www.javastudy.org/</p><p> 瘋狂Java聯(lián)盟:http://www.crazyjav
93、a.org/digest.php</p><p> 中文Java技術(shù)網(wǎng):http://www.cn-java.com/</p><p><b> 附錄 源代碼</b></p><p> /*************************MainWindow**********************/</p><p&
94、gt; import java.awt.BorderLayout;</p><p> import java.awt.Button;</p><p> import java.awt.Checkbox;</p><p> import java.awt.CheckboxGroup;</p><p> import java.awt.
95、Choice;</p><p> import java.awt.Color;</p><p> import java.awt.Dimension;</p><p> import java.awt.FlowLayout;</p><p> import java.awt.Frame;</p><p> i
96、mport java.awt.Graphics; </p><p> //抽象類,不能用于構(gòu)造方法創(chuàng)建對象</p><p> import java.awt.GridLayout;</p><p> import java.awt.Image;</p><p> import java.awt.Label;</p>
97、<p> import java.awt.Panel;</p><p> import java.awt.Point;</p><p> import java.awt.TextField;</p><p> import java.awt.Toolkit;</p><p> import java.awt.event.
98、ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.awt.event.MouseEvent;</p><p> import java.awt.event.WindowEvent;</p><p> import java.
99、io.BufferedReader;</p><p> import java.io.IOException;</p><p> import java.io.InputStreamReader;</p><p> import java.io.PrintWriter;</p><p> import java.io.RandomAc
100、cessFile;</p><p> import java.net.ServerSocket;</p><p> import java.net.Socket;</p><p> import javax.swing.Box;</p><p> import javax.swing.JButton;</p><p
101、> import javax.swing.JDialog;</p><p> import javax.swing.JLabel; </p><p> //負責創(chuàng)建標簽對象,標簽用來顯示信息,但沒有編輯功能</p><p> import javax.swing.JOptionPane;</p><p> impor
102、t javax.swing.JPasswordField;</p><p> import javax.swing.JTextField; //利用import引用各類包</p><p> public class MainWindow extends Frame implements Runnable</p><p><b>
103、 {</b></p><p> Go panelGo=new Go(); //用Go類聲明并創(chuàng)建一個panelGo對象</p><p> Image myImage;</p><p><b> int PORT;</b></p><p> Socket sendSocket;
104、 //主動連接Socket</p><p> PrintWriter writer; //用來發(fā)送message</p><p> boolean stopFlag;</p><p> boolean isInitiative;</p><p> Point messagePoint;</p&g
105、t;<p> Point goStartPoint=null; //初始化</p><p> Point yellowPoint=null;</p><p> boolean stepColor=true;</p><p> Point LastPoint=null; //移除黃點時,判斷位置變動</p
106、><p> BorderLayout borderLayout1 = new BorderLayout(); //用BorderLayout布局</p><p> Panel panel1 = new Panel(); //創(chuàng)建面板</p><p> Panel panel2 = new Panel();</p><p>
107、BorderLayout borderLayout2 = new BorderLayout();</p><p> Panel panel3 = new Panel();</p><p> CheckboxGroup checkboxGroup1 = new CheckboxGroup(); //選項框</p><p> Checkbox checkbo
108、x1 = new Checkbox(); //聲明創(chuàng)建Checkbox類的對象</p><p> Checkbox checkbox2 = new Checkbox();</p><p> Label label1 = new Label();</p><p> TextField textField1 = new TextField();</p&g
109、t;<p> Button button1 = new Button();</p><p> Label label2 = new Label();</p><p> Choice choice1 = new Choice();</p><p> Button button2 = new Button();</p><p&g
110、t; GridLayout gridLayout1 = new GridLayout(); //利用GridLayout布局</p><p> BorderLayout borderLayout3 = new BorderLayout();</p><p> public MainWindow() //構(gòu)造MainWindow方法</p&g
111、t;<p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> jbInit(); //可能發(fā)生異常的語句</p><p><b> }</b></p
112、><p> catch(Exception e)</p><p><b> {</b></p><p> e.printStackTrace();</p><p> } //異常處理</p><p><b> }</b></p><p&g
113、t; private void jbInit() throws Exception //用關(guān)鍵字throws聲明拋出異常</p><p><b> {</b></p><p> choice1.setBackground(new Color(236, 190, 120)); //設(shè)置棋盤底色</p><p> button1.s
114、etBackground(new Color(236, 190, 120));</p><p> this.setResizable(false);</p><p> new Thread(this).start(); //啟動監(jiān)聽線程</p><p> this.PORT=1976;</p>&l
115、t;p> this.isInitiative=false; //是否主動連接</p><p> this.stopFlag=false; //是否繼續(xù)監(jiān)聽的標志</p><p> this.choice1.addItem("黑");</p>
116、<p> this.choice1.addItem("白");</p><p> LastPoint=new Point();</p><p> messagePoint=new Point();</p><p> this.setSize(470,450);</p><p> this.setTi
117、tle("圍棋程序 作者:圍棋對弈小組"); //設(shè)置標題</p><p> this.panelGo.setEnabled(false); //開始之前屏蔽掉盤面</p><p> checkbox1.addMouseListener(new java.awt.event.MouseAdapter()</p&g
118、t;<p><b> {</b></p><p> public void mouseClicked(MouseEvent e)</p><p><b> {</b></p><p> checkbox1_mouseClicked(e);</p><p><b>
119、}</b></p><p> }); //獲取監(jiān)聽器</p><p> this.goStartPoint=this.panelGo.getLocation(); //</p><p> this.setLayout(borderLayout1); //設(shè)置背景布局</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計---中國象棋對弈系統(tǒng)
- java課程設(shè)計---中國象棋對弈系統(tǒng)程序
- java課程設(shè)計--人機對弈五子棋
- java課程設(shè)計
- java課程設(shè)計----課程設(shè)計報告
- 網(wǎng)絡(luò)對弈課程設(shè)計說明書
- java課程設(shè)計--java面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 網(wǎng)絡(luò)對弈課程設(shè)計說明書
- java課程設(shè)計---java程序設(shè)計
- java課程設(shè)計--java程序設(shè)計
- java課程設(shè)計--日歷
- java課程設(shè)計模板
- java課程設(shè)計報告
- java課程設(shè)計報告
- java掃雷課程設(shè)計
- java 課程設(shè)計 掃雷
- java課程設(shè)計報告
- java課程設(shè)計2048
- java課程設(shè)計報告-
- java時鐘課程設(shè)計
評論
0/150
提交評論