版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> Java程序課程設(shè)計任務(wù)書</p><p><b> 主要任務(wù)與目標(biāo)</b></p><p> 創(chuàng)建一個圍棋對弈平臺。</p><p> 基于Panel類定義一個面板子類,在其中利用Graphics類的drawLine()方法繪制棋盤格線,利用fillOval()方法繪制棋盤四角的星位。為面板注冊MouseEvent
2、監(jiān)聽器,為一個按鈕注冊ActionEvent事件監(jiān)聽器,實(shí)現(xiàn)單擊鼠標(biāo)布子、單機(jī)一個重新開局等操作。</p><p> 黑白棋子基于Canvas類的子類,其中,paint()方法用來繪制棋子,通過為棋子注冊MouseEvent事件監(jiān)聽器實(shí)現(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、掉的,若某一次 落子沒有造成踢子,包括所有被這個棋子提掉的棋子及這個棋子本身。如果踢子,則保存所有被踢掉的棋子。保證實(shí)現(xiàn)下棋的基本操作如:可以允許悔棋,落子,提示信息,重新開始游戲等功能。</p><p> 2.熟悉JAVA中swing的組件運(yùn)用,基本工具的熟練掌握。</p><p> 學(xué)習(xí)并掌握以下技術(shù):Java;熟練使用以下開發(fā)工具:JCreator 等</p>&l
5、t;p><b> 三、計劃進(jìn)度</b></p><p> 1.12月28日--12月 29日:搜集資料、查閱文獻(xiàn),確定選題</p><p> 2.12月29日--01月02日:需求分析,系統(tǒng)設(shè)計,系統(tǒng)功能模塊完善</p><p> 3.01月02日-- 01月06 日:編程實(shí)現(xiàn)系統(tǒng)、系統(tǒng)測試與修改4.01月05日-- 01月07
6、日:課程設(shè)計報告撰寫</p><p> 5.01月 07日--01月07日:課程設(shè)計報告答辯</p><p><b> 主要參考文獻(xiàn):</b></p><p> 陳軼.姚曉昆編著.Java程序設(shè)計實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,2006</p><p> 趙文靖編著.Java程序設(shè)計基礎(chǔ)與上機(jī)指導(dǎo).北京:清華大
7、學(xué)出版社,2006</p><p> 吳其慶編著.Java程序設(shè)計實(shí)例教程.北京:冶金工業(yè)出版社,2006</p><p> 陳國君等編著.Java2程序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2006</p><p> [5].Java網(wǎng)絡(luò)編程實(shí)例教程,清華大學(xué)出版社,馮博等,2005.1</p><p><b> 摘要&l
8、t;/b></p><p> 圍棋作為一個棋類競技運(yùn)動,在民間十分流行,為了熟悉五子棋規(guī)則及技巧,以及研究簡單的人工智能,決定用Java開發(fā)五子棋游戲。主要完成了人機(jī)對戰(zhàn)和玩家之間聯(lián)網(wǎng)對戰(zhàn)2個功能。網(wǎng)絡(luò)連接部分為Socket編程應(yīng)用,客戶端和服務(wù)器端的交互用Class Message定義,有很好的可擴(kuò)展性,客戶端負(fù)責(zé)界面維護(hù)和收集用戶輸入的信息,及錯誤處理。服務(wù)器維護(hù)在線用戶的基本信息和任意兩個對戰(zhàn)用戶的
9、棋盤信息,動態(tài)維護(hù)用戶列表。在人機(jī)對弈中通過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準(zhǔn)性的幾個要素,以及提出若干提高精準(zhǔn)性的辦法,以及對它們搜索的節(jié)點(diǎn)數(shù)進(jìn)行比較,在這些算法的基礎(chǔ)上分析一些提高電腦AI方案,如遞歸算法、電腦學(xué)習(xí)等。算法的研究有助于理解程序結(jié)構(gòu),增強(qiáng)邏輯思維能力,在其他人工智能方面也有很大的參考作用。</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ā)及運(yùn)行環(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)的具體實(shí)現(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)試運(yùn)行21</p><p> 4.3 本章小結(jié)21&l
18、t;/p><p> 第5章 結(jié)束語22</p><p><b> 致謝23</b></p><p><b> 參考文獻(xiàn)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ì)和機(jī)動靈活的戰(zhàn)略戰(zhàn)術(shù)思想意識的特點(diǎn),因而,幾千年來長盛不衰, 并逐漸地發(fā)展成了一種國際性的文化競技活動。</p><p> 圍棋是一種策略性二人棋類游戲,使用格狀棋盤及黑白二色棋子進(jìn)行對弈。目前圍棋流行于亞太,覆蓋世界范圍,是一種非常流行的棋類游戲
21、。</p><p> 中國圍棋規(guī)則是數(shù)子法,圍棋的本質(zhì)是:誰的占地面積大誰獲勝。</p><p> 圍棋的規(guī)則十分簡單,卻擁有十分廣闊的落子空間,使得圍棋變化多端,比其它棋類復(fù)雜深奧。這就是圍棋的魅力所在。下圍棋對人腦的智力開發(fā)很有幫助,可增強(qiáng)一個人的計算能力、創(chuàng)造能力、思維能力、判斷能力,也能提高人的注意力和控制力。下圍棋對兒童少年的智力發(fā)展起到積極作用,使他們能更好的分析事物。&l
22、t;/p><p> Java語言是當(dāng)今最為流行的程序設(shè)計語言之一 作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向?qū)ο?,與平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強(qiáng)大的大型應(yīng)用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應(yīng)用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應(yīng)用程序“一次編寫,處處可用”的實(shí)現(xiàn)成為了可能。<
23、/p><p> 近來隨著計算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍(lán)”便是最具說服力的代表。</p><p> 越來越多的具有智能的機(jī)器進(jìn)入了人類的生活,人工智能的重要性如今顯而易見。自己對人工智能比較感興趣,而圍棋游戲程序
24、的開發(fā)實(shí)現(xiàn)這個課題,正好提供給我這樣一個研究的機(jī)會,通過對人工智能中博弈方面的研究(人機(jī)對弈),讓我在簡單的人機(jī)對弈全局設(shè)計,以及具體到相關(guān)算法上有了深入的了解。人工智能屬于計算機(jī)科學(xué)的領(lǐng)域,它以計算機(jī)技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴(kuò)大,顯示出強(qiáng)大的生命力。人工智能大致可以分成幾個學(xué)科,它們每一個都是獨(dú)特的,但是它們常常又互相結(jié)合起來完成設(shè)計任務(wù),這時,這些學(xué)科之間的差別就變的很模糊。人工智能在專
25、家系統(tǒng),自然語言理解,自動定理證明,自動程序設(shè)計,人工智能在機(jī)器人學(xué)、模式識別、物景分析、數(shù)據(jù)庫的智能檢索、機(jī)器下棋(實(shí)質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。而這個課題就是和人工智能中的博弈論領(lǐng)域緊密相關(guān)的。 這個題目核心是人工智能和Socekt編程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技術(shù),正在各行各業(yè)廣泛滲透。智能已經(jīng)成為當(dāng)今各種新產(chǎn)品、新裝備的發(fā)展
26、方向。所</p><p> 1.2 課程設(shè)計內(nèi)容</p><p> 此課程設(shè)計是一個小游戲(圍棋)的實(shí)現(xiàn),主要運(yùn)用了GUI(用戶圖形界面)API(應(yīng)用程序借口)來實(shí)現(xiàn)。此程序沒有用到圖片的引用,棋盤和棋子的設(shè)計完全是應(yīng)用函數(shù)繪制, 再加入復(fù)選框,按鈕,標(biāo)簽及實(shí)現(xiàn)本游戲的用戶界面布局。</p><p> 在頁面上通過單純的JCreator實(shí)現(xiàn)的下棋程序,能夠?qū)?/p>
27、現(xiàn)提子,打劫等簡單的下棋功能。更好的掌握java編程以及布局和設(shè)計。通過課程設(shè)計把課堂上講的內(nèi)容融會貫通,學(xué)會設(shè)計程序、開發(fā)應(yīng)用軟件、開發(fā)系統(tǒng)軟件等各項工作。通過實(shí)習(xí)掌握語言的語法結(jié)構(gòu),理解類和對象的概念,準(zhǔn)確的使用各種數(shù)據(jù)類型,對面向?qū)ο笾械睦^承和多態(tài)的概念要理解、會使用,在程序中提高代碼的重用性,使設(shè)計的程序結(jié)構(gòu)清晰、易于維護(hù)。</p><p><b> 一、棋盤 </b></p
28、><p> 盤面有縱橫各十九條等距離、垂直交叉的平行線,共構(gòu)成19×19=361個交叉點(diǎn)(以下簡稱為 “點(diǎn)”)。 在盤面上標(biāo)有幾 個小圓點(diǎn)。稱為星位,中央的星位又稱“天元”。</p><p><b> 二、棋子 </b></p><p> 棋子分黑白兩色。均為扁圓形。 棋子的數(shù)量以黑子181、白子180個為宜。</p>
29、<p><b> 三、圍棋的下法</b></p><p> 一、對局雙方各執(zhí)一色棋子,黑先白后,交替下子,每次只能下一子。 </p><p> 二、棋子下在棋盤的點(diǎn)上。 </p><p> 三、棋子下定后,不得向其他點(diǎn)移動。 </p><p> 四、輪流下子是雙方的權(quán)利,但允許任何一方放棄下子權(quán)。&
30、lt;/p><p><b> 四、棋子的氣</b></p><p> 一個棋子在棋盤上,與它直線緊鄰的空點(diǎn)是這個棋子的“氣”。 棋子直線緊鄰的點(diǎn)上,如果有同色棋子存在,則它們便相互連接成一個不可分割的整體。它們的氣也應(yīng)一并計算。 棋子直線緊鄰的點(diǎn)上,如果有異色棋子存在,這口氣就不復(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> 六、計算勝負(fù) </b></p><p> 1、貼3又3/4子的規(guī)則 </p><p> 第一步,把死子撿掉。第二步,只數(shù)一方圍得點(diǎn)(叫做目)并記錄下來(一般圍得點(diǎn)以整十目為單位),再數(shù)剛才那一方的子數(shù)并記錄下來,再把目數(shù)和子數(shù)加起來。第三步,如果數(shù)的是黑棋,再減去3又3/
33、4子,如果數(shù)的是白棋,再加上3又3/4子。第四步,結(jié)果和180又1/2(棋盤361個點(diǎn)的一半)比較,超過就算勝,否則判負(fù)。 </p><p><b> 2、讓先與讓子 </b></p><p> 讓先不貼目,讓子要貼還讓子數(shù)的一半(就當(dāng)被讓方是預(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ù)達(dá)6萬人。
35、大型的游戲平臺如QQ游戲、聯(lián)眾游戲中都有圍棋游戲。也就是 說QQ圍棋、聯(lián)眾圍棋都是鑲嵌在其游戲平臺之上。依靠游戲平 臺用戶人數(shù)的優(yōu)勢,這兩個平臺圍棋用戶人數(shù)占據(jù)了網(wǎng)絡(luò)圍棋 用戶的半數(shù)之多。 但根據(jù)專業(yè)人士分析:這部分用戶無論在產(chǎn)品使用深度和對圍 棋的認(rè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)中韓對壘的特性,為 他們吸引了不少高水平的棋手,并受到棋友的廣泛認(rèn)可。但他 們同樣有一個死穴,就是兩家皆為購買韓國軟件,不掌握主動 權(quán),因此根本無法保證軟件的及時更新,容易受制于韓方。“弈 城事件”便將這個致命缺點(diǎn)暴露無疑</p><p><b> 2.1.1圍棋定義</b
37、></p><p><b> 圍棋是人生的模擬。</b></p><p> 開局時,盤上一片空白,就好像一個剛剛有了自覺意識的小孩,睜開了懵懂的雙眼,開始了自己的人生之路。開局時,你可以有各種選擇,自由度最大,走哪一步都不會讓你立刻輸?shù)簟?lt;/p><p> 布局基本上是興趣的顯示,有喜歡大模樣的,那是寄希望于未來的做法;有現(xiàn)實(shí)地?fù)瓶?/p>
38、的;有順應(yīng)對方的思路,不知不覺中達(dá)到自己目的的;也有處處與對方作對,即使自己不爽,也要給對方添堵的。</p><p> 由于棋盤的廣大,不可能面面俱到地行棋。過程中,對局者不斷地在判斷、取舍,好像人生開始在選擇自己的道路了??粗@里想要,那里也想要,可是沒法面面俱到,終究只能選取一條路。有時候,你的招法對路,越走越暢,有的時候就有問題,想要的沒要到,越下越添堵。</p><p> 優(yōu)勢
39、時,好比人生得意時,心情很爽,最好一直就這么下去;劣勢時,千方百計尋找對手的破綻,伺機(jī)翻盤。心理毅力強(qiáng)的人,總能把弦繃得緊緊的,一直像甲魚一樣咬住對手;心理軟弱的人,很早就放棄抵抗,認(rèn)輸投降。</p><p> 優(yōu)勢時被對方翻盤了,就好像原本勝券在握的一件事情,被自己搞砸了,懊悔痛恨都沒有用;大敗的棋,忽然找到對手的漏勺又贏了回來,就好像本已被逼到絕境,卻又咸魚翻生,大獲全勝,心情之爽,難以表達(dá)!</p&
40、gt;<p> 由于圍棋的棋盤相對比較廣大,過程也較反復(fù),一盤棋下來,通常勢均力敵的對手都會有不止一次的獲勝機(jī)會。這種翻來覆去的體驗(yàn),非常象人生經(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ù)責(zé)處理客戶端顯示和操作界面,具有簡單的邏輯處理功能力, 同時負(fù)責(zé)接收發(fā)送與服務(wù)器端交互的數(shù)據(jù)包。(4)服務(wù)器程序負(fù)方處理服務(wù)器端邏輯、游戲邏輯、客戶之間的網(wǎng)絡(luò)信息傳遞,以及數(shù)據(jù)庫之間的數(shù)據(jù)讀取保存工作。 同時服務(wù)器端還要承擔(dān)客戶端數(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é)議。雖然目前很多圍棋游戲正在運(yùn)行,但是使用java平臺開發(fā)的游戲少之又少,這就使得圍棋客戶端的運(yùn)行平臺十分有限,</p><p> 2.2 主要系統(tǒng)介紹</p><p> 主要功能包括:用戶連接服務(wù)器之后:1、新用戶可以注冊。2、老用戶必須登陸,才可以玩游
44、戲等其他動作。開始游戲之后:1、用戶雙方選擇白棋和黑棋。2、任何一方可以隨時隨地認(rèn)輸,游戲結(jié)束。4、要實(shí)現(xiàn)圍棋最基本吃掉對方的法則。此設(shè)計為本站原創(chuàng)作品。其中包括:源程序,可執(zhí)行程序,論文,錄像,使用說明。</p><p><b> 2.3 本章小結(jié)</b></p><p> 這一章介紹了當(dāng)前圍棋應(yīng)該具備的功能模塊,并提供了市面上比較流行的圍棋系統(tǒng)作為參
45、考。在這一章中,我們可以了解什么是圍棋系統(tǒng),當(dāng)前圍棋系統(tǒng)的市場需求,還有一個圍棋系統(tǒng)應(yīng)該的開發(fā)目標(biāo)。</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> 準(zhǔn)備就緒</b></p><p> 3.2 系統(tǒng)開發(fā)及運(yùn)行環(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è)計目標(biāo)如下:主要功能包括:1、能夠在局域網(wǎng)上實(shí)現(xiàn)多人在線對戰(zhàn)。用戶連接服務(wù)器之后:1、新用戶可以注冊。
50、2、老用戶必須登陸,才可以玩游戲等其他動作。3、登陸之后,用戶可以選擇跟哪個在線玩家對戰(zhàn),如果對方同意,游戲開始。4、如果有以前沒有下完的棋譜,可以選擇讀取棋譜,看看每一部是怎么走的。開始游戲之后:1、用戶雙方選擇白棋和黑棋。2、任何一方可以隨時隨地認(rèn)輸,游戲結(jié)束。3、如果雙方?jīng)]有下完,可以保存棋盤。4、要實(shí)現(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> 介紹:各功能模塊實(shí)現(xiàn)的功能為:</p><p> 庫存管理功能模塊圖如圖3.2所示。</p><p> 圖3.2庫存管理功能模塊圖</p><p><b> 3.5 本章小結(jié)<
52、;/b></p><p> 通過對圍棋游戲的編寫,使自己對java語言有了更深的了解。讓我漸漸體會到了JAVA的博大精深。以及怎么學(xué)習(xí)JAVA,怎么學(xué)習(xí)計算機(jī)語言,怎樣對問題進(jìn)行解決和運(yùn)用JAVA GUI,查找JAVA API的使用都用了更進(jìn)一步的理解。也更加熟悉和了解了java開發(fā)工具Eclipse的使用</p><p> 同時,程序在編寫完畢之后還有很多地方需要完善。例如:可
53、以把另一方選擇為電腦方,讓電腦自動下,也可以給游戲添加背景音樂;甚至可以修改成網(wǎng)絡(luò)游戲,用戶可以在網(wǎng)上對戰(zhàn)??傊泻芏嗟胤娇梢詳U(kuò)充和完善。在此次設(shè)計過程中我也學(xué)到了許多了關(guān)于計算機(jī)方面的知識,編程能力有了很大的提高。</p><p> 第4章 圍棋對弈系統(tǒng)的具體實(shí)現(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ù)的作用是檢測用戶登陸的合法性,并確認(rèn)用戶輸入了合法
55、的登錄名和口令。</p><p><b> 部分代碼:</b></p><p> login = new JDialog();</p><p> login.setTitle("登錄"); //設(shè)置標(biāo)題</p><p> login.setLayout(new FlowLayout())
56、; //利用流布局來設(shè)置窗口的布局</p><p> login.add(new JLabel("用戶名:")); //添加標(biāo)簽為用戶名的對象</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)); //添加用戶名標(biāo)簽,用戶名在標(biāo)簽中靠右對齊</p><p> box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("性別:&q
60、uot;, JLabel.RIGHT)); //添加性別標(biāo)簽,性別在標(biāo)簽中靠右對齊</p><p> box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("密碼:", JLabel.RIGHT), -1); //添加密碼標(biāo)簽,密碼在標(biāo)簽中靠右對齊</p><p&g
61、t; box1.add(Box.createVerticalStrut(10));</p><p> box1.add(new JLabel("確認(rèn)密碼:", JLabel.RIGHT)); //添加確認(rèn)密碼標(biāo)簽,確認(rèn)密碼在標(biāo)簽中靠右對齊</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ù)選框默認(rèn)狀態(tài)選定為男性</p><
64、p> box21.add(cb1);</p><p> box21.add(new Checkbox("女", cbg, false)); //當(dāng)鼠標(biāo)點(diǎn)擊女性復(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、 //邏輯點(diǎn)標(biāo)志</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;//相鄰點(diǎn)處理,獲取</p><p> o
79、ne.posY=startPoint.y+(j-1)*interval;//相鄰點(diǎn)處理。獲取//獲取相鄰點(diǎn)</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)建對象,開始點(diǎn)</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)試運(yùn)行</p><p> 利用JSP“一次編寫,各處運(yùn)行”的編程優(yōu)點(diǎn),按功能模塊結(jié)構(gòu)設(shè)計菜單,布置各明細(xì)模塊工作界面,編寫各個模塊的程序代碼,進(jìn)行編譯連接運(yùn)行,經(jīng)過反復(fù)調(diào)試修改,以達(dá)到系統(tǒng)功能要求。這個過程具有大量的工作量,應(yīng)仔細(xì)對每個程序細(xì)節(jié)進(jìn)行分析思考、編寫程序并調(diào)試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要
86、的地方加以注釋,以便于程序閱讀和修改。</p><p><b> 4.3 本章小結(jié)</b></p><p> 本章介紹了系統(tǒng)的具體實(shí)現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要用到的loginDialog函數(shù),主界面的框架設(shè)計。</p><p><b> 第5章 結(jié)束語</b></p><p>
87、Java語言是當(dāng)今最為流行的程序設(shè)計語言之一 作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向?qū)ο?,與平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強(qiáng)大的大型應(yīng)用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應(yīng)用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應(yīng)用程序“一次編寫,處處可用”的實(shí)現(xiàn)成為了可能。</p><p> 人工
88、智能屬于計算機(jī)科學(xué)的領(lǐng)域,它以計算機(jī)技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴(kuò)大,顯示出強(qiáng)大的生命力。</p><p> 近來隨著計算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅夫的“深藍(lán)”便是最具說服力的代表。</p>
89、;<p><b> 致謝</b></p><p><b> 參考文獻(xiàn)</b></p><p> 基于Java的遠(yuǎn)程圍棋對弈軟件的設(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> 宛延闿等編著.實(shí)用Java程序設(shè)計教程.北京:機(jī)械工業(yè)出版社,2006</p><p> 陳國君等編著.Java2程
91、序設(shè)計基礎(chǔ).北京:清華大學(xué)出版社,2006</p><p> 鄭莉.王行言.馬素霞編著.Java語言程序設(shè)計.北京:清華大學(xué)出版社,2006</p><p> 丁振凡主編.Java語言實(shí)用教程.北京:北京郵電大學(xué)出版社,2005</p><p> 朱喜福等編.Java程序設(shè)計.北京:人民郵電出版社,2005</p><p> ?。溃〣
92、ruce Eckel編.《Java編程思想第3版》.機(jī)械工業(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> //負(fù)責(zé)創(chuàng)建標(biāo)簽對象,標(biāo)簽用來顯示信息,但沒有編輯功能</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; //移除黃點(diǎn)時,判斷位置變動</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)聽的標(biāo)志</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è)置標(biāo)題</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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計---中國象棋對弈系統(tǒng)
- java課程設(shè)計---中國象棋對弈系統(tǒng)程序
- java課程設(shè)計--人機(jī)對弈五子棋
- 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
提交評論