版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p> 基于Java的“網絡版五子棋”游戲的設計和實現(xiàn)</p><p><b> 摘 要</b></p><p> 目前,隨著計算機網絡的發(fā)展,以計算機技術
2、和網絡技術為核心的現(xiàn)代網絡技術已經在現(xiàn)實生活和生產中得到了廣泛的使用,休閑類網絡游戲集趣味性,娛樂性,互動性和益智性于一體,已經成為多數人群的休閑方式,也為多數人所喜好。</p><p> 本設計收集了關于JAVA基礎的書籍,著重收錄了關于SOCKET編程的內容,找到了五子棋概述和規(guī)則的資料,查閱了網絡通信技術的相關論文,同時也參考了很多關于五子棋實現(xiàn)的程序資料以及關于JAVA開發(fā)工具的介紹的文檔。在期間,作者
3、學習了多線程技術、數據傳輸技術、SOCKET編程技術,研究了網絡通信原理、JAVA編寫原理等一系列的原理。開發(fā)了五子棋網絡對戰(zhàn)的代碼,實現(xiàn)了網絡聊天、聯(lián)機對戰(zhàn)、網絡通信、界面組織如:棋盤、建立服務器、連接到服務器等功能。通過對以上技術的學習和研究,利用SOCKET編程,能服務器與客戶端之間的連接,利用多線程技術完成了服務器端與客戶端之間的數據傳輸、網絡通信,使得兩個客戶端能夠同步的進行處理。</p><p>
4、關鍵詞: JAVA 多線程 SOCKET 五子棋</p><p><b> Abstract</b></p><p> At present , with the development of computer networks , computer and network technology as the core of modern network te
5、chnology has been widely used in real life and production, the casual game set interesting , entertaining, interactive and puzzle in one, has become the majority population of leisure, but also for the majority of people
6、 have preferences. The design of the collection of books on the JAVA -based , focusing on the collection of content SOCKET programming , found the data ov</p><p> Keywords: JAVA multith
7、reading SOCKET Gobang</p><p><b> 目錄</b></p><p><b> 1 緒論1</b></p><p> 1.1 背景及意義1</p><p> 1.2 選題的目的1</p><p> 1.3 五子棋介紹2&l
8、t;/p><p> 1.4 主要完成內容2</p><p> 2 開發(fā)環(huán)境及工具介紹3</p><p> 2.1 開發(fā)環(huán)境及運行環(huán)境3</p><p> 2.1.1 開發(fā)環(huán)境3</p><p> 2.1.2 運行環(huán)境3</p><p> 2.1.2 開發(fā)工具3</p&
9、gt;<p> 2.2 Java 簡介3</p><p> 2.2.1 Java的起源和發(fā)展3</p><p> 2.2.2 Java特點4</p><p> 2.3 Java Socket 網絡編程簡介5</p><p> 2.3.1 Java Socket 網絡編程基礎5</p>
10、<p> 2.3.2 Socket編程的實現(xiàn)6</p><p> 2.4 Java 圖形編程7</p><p> 2.5多線程機制7</p><p> 3 需求分析和總體設計9</p><p> 3.1 需求分析作用9</p><p> 3.1.1 界面需求分析9</p&
11、gt;<p> 3.1.2 軟件需求分析9</p><p> 3.2 總體設計9</p><p> 3.2.1 系統(tǒng)設計思想10</p><p> 3.2.2 系統(tǒng)總體設計10</p><p> 3.3 功能模塊及流程11</p><p> 3.3.1 系統(tǒng)主要模塊11
12、</p><p> 3.3.2服務器端作用12</p><p> 3.3.3客戶端作用13</p><p> 4 詳細設計及實現(xiàn)15</p><p> 4.1 系統(tǒng)主流程15</p><p> 4.2 如何判斷輸贏16</p><p> 4.3 開發(fā)環(huán)境的搭建19&
13、lt;/p><p> 4.4 功能模塊的界面實現(xiàn)20</p><p> 5 軟件的測試23</p><p> 5.1 軟件測試的方法23</p><p><b> 6 總結語25</b></p><p><b> 參考文獻26</b></p>
14、<p><b> 1 緒論</b></p><p><b> 1.1 背景及意義</b></p><p><b> 1.背景</b></p><p> 隨著經濟社會的迅速發(fā)展,人們生活水平有了很大的提高,人們的生活觀念也發(fā)生了巨大的改變。高品質的生活、現(xiàn)代化得生活方式成為人們共
15、同追求的目標;休閑、娛樂性活動作為時尚生活中的一部分,而被大多數的人所追捧。棋類項目作為一種智力型項目,可以益智健心、修身養(yǎng)性,也可以滿足人們對于娛樂和休閑的新需求。一些項目比如五子棋等等,由于項目本身互動的特點,一直被人們所喜愛,因此得以生存和發(fā)展,成為許多人喜愛的休閑娛樂性棋類項目。</p><p> 而今,以網絡技術為核心和計算機技術的現(xiàn)代網絡技術已經在現(xiàn)實生活得到了十分的廣泛的使用。休閑類網絡游戲集合了
16、益智性、趣味性、互動性、娛樂性于一體,已經成為多數人群的選擇的休閑方式。</p><p> 借此,本論文在分析了當前計算機網絡的蓬勃發(fā)展和人們對于休閑娛樂性生活方式的追求,以java語言為工具,在MyEclipse的環(huán)境那下,以精美的界面,以常規(guī)安全的socket建立連接,設計更為益智的網絡版五子棋游戲,增強了趣味性和益智性。</p><p><b> 2.意義</b&
17、gt;</p><p> 現(xiàn)在人們壓力日益增大,人們需要勞逸結合也獲得更高的工作效率,工作之余的娛樂對每一個人來說都是必不可少的放松方式。五子棋游戲簡單易學同時具有很大奧妙性,也非常富有趣味性與消遣性。在經過不斷發(fā)展后,五子棋已經成為棋盤娛樂的重要的組成部分,它能夠開發(fā)智力、增強思維能力,而且富含哲理,有助于修身養(yǎng)性。是人們休閑娛樂的不二的選擇。而網絡互動娛樂是近幾年迅速發(fā)展起來的新的娛樂形式,成為IT產業(yè)中增
18、長最快的娛樂形式之一。</p><p> 網絡五子棋游戲很多是使用Java語言開發(fā)的一款游戲。它使用SOCKET建立連接,多線程處理數據,這些特點使這款游戲無論是客戶端還是服務器的實現(xiàn)都相對容易。</p><p><b> 1.2 選題的目的</b></p><p> 隨著計算機網絡技術的不斷發(fā)展,網絡游戲已經成為最具潛力的熱點領域。各種
19、各樣的游戲使人眼花繚亂,而特別是其中一些休閑益智類的棋牌游戲,集娛樂性、趣味性、益智性和互動性于一體,擁有很大的用戶。棋類游戲能鍛煉人的思維,起到修身養(yǎng)性的作用。五子棋游戲可以分為兩類:一類是單機版五子棋游戲,另一類是網絡五子棋游戲。隨著計算機網絡和JAVA技術的不斷發(fā)展,使用Java開發(fā)網絡五子棋游戲將是一個實用性很強的畢業(yè)設計項目。</p><p> 網絡五子棋游戲的總體功能是要設計出具有精美界面的,具備人
20、工智能的,支持網絡對弈的五子棋游戲。本系統(tǒng)最終的目的是建立一個有具體規(guī)則的網絡五子棋平臺,達到網絡對弈的目的。</p><p><b> 1.3 五子棋介紹</b></p><p> 五子棋起源于中國古代的傳統(tǒng)黑白棋種之一,是一種兩人對弈的純策略型棋類游戲?,F(xiàn)代五子棋日本稱之為“連珠”,英譯為Renju,英文為“FIR”(Five in a Row 的縮寫)或“G
21、obang”,中文有“串珠”、 “五子連”、“連五子”等很多種名字。它發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且引人入勝;不僅能提高智力,而且富含哲理。</p><p> 傳統(tǒng)五子棋的棋具與圍棋類似,棋子分為黑白兩色,棋盤有大有小,棋子放置于棋盤線交叉點上。兩人對局,各選一色,輪流落子。五子棋游戲規(guī)則:游戲雙方輪流在棋盤下棋子,一方的棋子在橫、豎、兩個對角線上首先到達五子者為勝方。因為五子棋在落子后不能移
22、動或拿掉,所以也可以用紙和筆來進行游戲。</p><p> 隨著五子棋的發(fā)展,逐步發(fā)現(xiàn)先行優(yōu)勢非常大,最后總結出“先行必勝”的結論。五子棋成為競技運動,核心問題是怎樣解決傳統(tǒng)五子棋下法中“先行必勝”的問題。而競技五子棋便是參賽雙方打破“先行必勝”的問題,以棋盤和棋子為介體,進行智力性對抗的競技體育項目。</p><p> 1.4 主要完成內容</p><p>
23、 本課題為了分析了五子棋規(guī)則及技巧,以及研究客戶端界面的布局,決定用Java開發(fā)五子棋游戲。主要完成客戶端界面設計和網絡對戰(zhàn)2個功能模塊??蛻舳素撠熓占脩舻男畔⒑徒缑婢S護,以及錯誤處理;服務器的建立以及對戰(zhàn)用戶的基本信息和兩個對戰(zhàn)用戶的棋盤信息,判斷輸贏。</p><p> 2 開發(fā)環(huán)境及工具介紹</p><p> 2.1 開發(fā)環(huán)境及運行環(huán)境</p><p>
24、; 2.1.1 開發(fā)環(huán)境</p><p> ★ Microsoft Windows XP或以上版本</p><p> ★ JDK 1.60</p><p> ★ MyEclipse8.5</p><p> 2.1.2 運行環(huán)境</p><p> ★ Microsoft Windows XP或以上
25、版本 操作系統(tǒng)</p><p> ★ 1024*768或以上的屏幕分辨率</p><p> 2.1.2 開發(fā)工具</p><p> Java的開發(fā)工具很多,比如JBuilder、MyEclipse、NetBeans IDE、JCreator 等等,不同的工具可能對開發(fā)不同的程序有針對的優(yōu)勢。我選擇MyEclipse進行編寫,我們說一下MyEclipse的優(yōu)勢
26、。</p><p> ★ MyEclipse是一種具有可擴展的開放源代碼IDE。MyEclipse可以在同一IDE中集成了來自不同供應商的工具,并實現(xiàn)了工具之間的相互操作,從而顯著簡化了項目工作流程。 </p><p> ★ MyEclipse框架的靈活性來自于它的擴展點。在XML中定義的已知接口,并充當插件的耦合點。擴展點的范圍包括從簡單字符串,到一個Java類的描述。</
27、p><p> ★ MyEclipse的最大特點是它能接受由Java開發(fā)者自己編寫的開放源代碼插件。</p><p> 2.2 Java 簡介</p><p> Java是一種簡單的、分布式的、面向對象的、可移植、解釋的、安全的的多線程語言。它以其平臺無關性、硬件結構無關性、強安全性、面向對象、語言簡潔的特點,在網絡編程語言中占據了無可比擬的優(yōu)勢,成為實現(xiàn)電子商
28、務系統(tǒng)的首選語言[2]。</p><p> 2.2.1 Java的起源和發(fā)展</p><p> Java是Sun公司在1995年推出的新興的編程語言,它是一種跨平臺的、應用于當前高速發(fā)展的網絡的編程語言。在編程語言中,可認為Basic語言促使了C語言的出現(xiàn),C語言促進了C++的出現(xiàn),而C++又促使了Java語言的出現(xiàn)。</p><p> 自從Java正式推出
29、后,以它特有的優(yōu)勢迅速發(fā)展,經過幾年的發(fā)展,Java已經在軟件開發(fā)等領域占有很大的市場。Java分為三種:J2SE、J2EE和J2ME。J2SE是Java平臺標準版[3],主要應用于桌面程序和Java小應用程序開發(fā);J2EE主要用于企業(yè)級開發(fā)和大型網站的開發(fā);J2ME主要用于手機等移動設備程序的開發(fā)。</p><p> 2.2.2 Java特點</p><p><b> ★
30、 平臺無關性</b></p><p> Java的平臺無關性能讓這種軟件在每個平臺上都能正常地運行,就是"只要寫一次程序,在任何地方、任何時間該程序永遠都能夠運行"。Java解釋器生成與體系無關的字節(jié)碼指令,這些指令對應于Java虛擬機里表示,Java解釋器得到字節(jié)碼后,對它進行轉換,只要安裝Java運行系統(tǒng),Java就可以在任何處理器上運行。</p><p
31、><b> ★ 簡單性</b></p><p> Java語言是一種面向對象的語言,它通過提供最基本的方法來完成指定的任務,開發(fā)者只要知道一些概念就能夠編寫一些應用程序。</p><p><b> ★ 多線程</b></p><p> 設計Java的多線程,是為了滿足人們對創(chuàng)建交互式網上程序的需要。用Ja
32、va編寫出來的應用程序可以同時執(zhí)行很多任務。多線程機制使應用程序可以并行執(zhí)行,而且同步機制保證了對共享數據的正確操作。</p><p><b> ★ 健壯性</b></p><p> Java語言被病毒感染和破壞得最少。Java丟棄了難學和危險的指針功能,而大部分病毒程序常用的方法就是通過巧妙地運用地址變量如指針來獲取計算機的資源,從而使程序不安全。</p
33、><p> ★ 面向對象語言</p><p> Java的設計集中于對象及其接口,它提供了簡單的類機制以及動態(tài)的接口模型。對象中封裝它的狀態(tài)變量和相應的方法,實現(xiàn)了模塊化和信息的隱藏;而類則是提供對象的原型,并且通過繼承的機制,子類可以使用父類所提供的方法,以實現(xiàn)代碼的復用。</p><p><b> ★ 自動內存管理</b></
34、p><p> 也可以說自動內存管理是Java健壯性的體現(xiàn),內存管理是很多種應用程序內的很關鍵因素。在網絡上的其他地方讀取大量的數據,之后把該數據寫入硬盤上的數據庫內,一般的設計就是把數據讀入內存中的某些集合內,對這些數據執(zhí)行某些操作,之后把數據寫入數據庫。在數據寫入數據庫后,在下一批處理之前,臨時存儲數據的集合必須清空舊數據,或被刪除后再建。這種操作可能執(zhí)行很多次,很多語言要手工清空或刪除集合數據結構。Java的自
35、動內存管理[4]正好解決這一點,它使程序員不用再為內存管理寫大量的代碼。</p><p> 2.3 Java Socket 網絡編程簡介</p><p> 2.3.1 Java Socket 網絡編程基礎</p><p> 網絡編程,簡單的理解就是兩臺計算機相互通信。其基本模型就是客戶機/服務器模型,也就是通信雙方中的一方必須提供一個固定的端口,而另一方則
36、只需要知道這個端口,并去建立兩者之間的聯(lián)系,然后完成數據交換。這里提供固定位置的一方通常稱為服務器,而建立聯(lián)系的一方通常稱為客戶端[5]。</p><p> 基于客戶機/服務器的Socket通信模型如圖2-1所示:</p><p> 圖2-1 基于客戶機/服務器的Socket通信模型圖</p><p> Socket工作過程如下:</p>&l
37、t;p> (1)建立連接:服務器端程序分配一個端口號,開始監(jiān)聽來自客戶端的請求。當客戶請求一個連接時,服務器使用accept()方法打開Socket連接,將該Socket連接到此端口上。</p><p> (2)數據通信:服務器和客戶端使用Socket的InputStream(輸入流)和OutputStream(輸出流)進行通信。</p><p> (3)關閉連接:通信結束,服
38、務器和客戶端程序斷開連接,釋放所有占用的系統(tǒng)資源。</p><p> Java為這個模型的實現(xiàn)提供了簡化的Socket編程接口。在程序中只要導入java.io包就可以方便的使用java的Socket編程接口。</p><p> Java中Socket連接機制如圖2-2所示:</p><p> 圖2-2 Socket的連接機制[6]</p>&l
39、t;p> 2.3.2 Socket編程的實現(xiàn)</p><p> Socket類表示了系統(tǒng)的IP地址和端口號的結合,可以理解為客戶端或者服務器端的一個特殊對象。它包含兩個處理流的方法,一個是getInputStream(),另一個是getOutputStream(),分別用來獲得網絡的輸入流和輸出流。構造Socket對象的代碼如下:</p><p> Socket s = new
40、 Socket(IP, port); </p><p> IP,port分別為服務器端的IP地址和服務器端的端口號。</p><p> ServerSocket類是一個專門建立Socket服務器的類,它可以用服務器需要使用的端口號作為參數來創(chuàng)建ServerSocket對象。示例代碼如下:</p><p> ServerSocket ss = new Serve
41、rSocket(TCP_PORT);</p><p> 當一個客戶端程序建立一個Socket連接,所連接的端口號為對應TCP_PORT時,服務器對象ss便響應這個連接,在用上述ss對象調用accept()創(chuàng)建一個代表服務器的Socket對象。創(chuàng)建后服務器便可以利用這個Socket對象與客戶端進行數據交換。示例代碼如下:</p><p> Socket clientSocket = ss
42、.accept();</p><p> 在本系統(tǒng)的實現(xiàn)過程中,在支持網絡對弈的服務器類的定義中需要使用ServerSocket類來響應多個客戶端的連接請求。能夠同時建立多個服務器,玩家可以選擇不同的服務器參與游戲。</p><p> 2.4 Java 圖形編程</p><p> Java中的Graphics類是一個工具類,用來繪圖和顯示格式化文本,Graph
43、ics類是在java.awt包中聲明的。在Java程序中繪圖必須在一個窗口或者是一個容器中進行,繪圖窗體經常被設計為一個組件容器。顯示格式化文本和繪圖是調用Graphics類的drawXX()方法完成的,例如drawString(String)等等。繪圖采用的坐標系[7]是原點在左上角,縱軸向下以像素為單位的坐標系。</p><p><b> 2.5多線程機制</b></p>
44、<p> 多線程機制是指單個程序可以運行多個不同的線程,執(zhí)行不同的任務。因為線程只能在單個進程的作用域內活動,所以創(chuàng)建線程比創(chuàng)建進程要廉價得多,同一類線程共享代碼和數據空間,每個線程有獨立的運行桟和程序計數器(PC),線程切換的開銷小。因此多線程編程在現(xiàn)代軟件設計中在量采用。</p><p> 創(chuàng)建新線程必須編寫一個線程類,用Java編寫多線程代碼有兩種方式</p><p>
45、; ★ 直接繼承Java的線程類Thread;</p><p> ★ 實現(xiàn)Runnable接口</p><p> 無論采用哪種方式均需要在程序中編寫Run()方法,線程在運行時要完成的任務在該方法實現(xiàn)。Thread 類封裝了線程的行為。繼承Thread類須重寫run()方法實現(xiàn)各自的任務。程序中不要直接調用線程的run()方法,而是調用start()方法啟動線程,讓其進入可調度的狀態(tài)
46、,線程獲得調度時將自動執(zhí)行run()方法。</p><p> 由于Java的單重繼承的限制,有些類必須繼承其它個類時又要實現(xiàn)線程的特性。這時可通過實現(xiàn)Runnable接口的方式來滿足兩方面的要求。Runnable 接口只有一個方法 run(),它就是線程運行時要執(zhí)行的方法,只要將具體代碼寫入其中即可。線程在調度時將自動調用Runnable 接口對象的run方法。</p><p> 多線
47、程是Java的一個特點,多線程可以使程序反應更快、交互性更強,并能提高執(zhí)行效率。在網絡五子中如果服務器是單線程的,則只能與一個客戶端相連,就失去了網絡對戰(zhàn)的意義了。所以應該采用多線程方式。當服務器與一個客戶端建立連接,就開啟一個線程與之相連,同時監(jiān)聽其它用戶的連接。</p><p> 請求的通信協(xié)議規(guī)定:</p><p> public class Request {</p>
48、;<p> public static final int LOGIN = 1;//輸入用戶名的請求</p><p> public static final int CR_ROOM = 2;//創(chuàng)建房間的請求</p><p> public static final int GET_ROOM = 3;//獲取房間列表的請求</p><p>
49、public static final int DEL_ROOM = 4;//刪除房間</p><p> public static final int FLUSH_ROOM = 5;//刷新房間的請求</p><p> public static final int IN_ROOM = 6;//進入房間</p><p> public static fina
50、l int IN_RESULT = 7;//進入房間結果的請求</p><p> public static final int CHESS = 8;//落子的請求</p><p> public static final int SEND_MSG = 9;//發(fā)送聊天請求</p><p> public static final int NEWS_TART
51、= 10;//新開游戲請求</p><p> public static final int WIN = 11;//代表贏的請求</p><p> public static final int GIVEUP = 12;//放棄請求</p><p> public static final int SUM = 13;//求和</p><p&
52、gt; public static final int SUM_RESULT = 14;//求和結果處理</p><p> public static final int EXIT = 15;//退出</p><p> public static final int EXIT_ROOM = 16;//退出游戲大廳的請求</p><p> public sta
53、tic final int ROVS = 17;//轉觀戰(zhàn)請求</p><p> public static final int IN_LOOK = 18;//進入觀戰(zhàn)</p><p> public static final int LOO_GET_DATA = 19;//觀看請求數據</p><p> public static final int BAC
54、K_CHESS = 20;//悔棋</p><p> public static final int BACK_CHESS_RESULT = 21;//悔棋結果處理</p><p><b> }</b></p><p> 3 需求分析和總體設計</p><p> 3.1 需求分析作用</p>&
55、lt;p> 軟件需求分析是軟件開發(fā)周期的第一個階段,也是關系到軟件開發(fā)成敗的最關鍵一步。只有通過了軟件需求分析,才能把軟件的功能和性能由總體的概念性和理論性描述轉化為具體的規(guī)格說明,從而建立軟件開發(fā)的基礎。實踐證明,需求分析工作進行得準確程度,在很大程度上決定了軟件開發(fā)的成敗。</p><p> 軟件需求分析的任務就是讓用戶與開發(fā)者明確開發(fā)的是一個什么軟件。具體的說,就是通過對問題及其環(huán)境的理解、分析與
56、綜合把握,建立邏輯模型,完成軟件的邏輯方案設計。</p><p> 3.1.1 界面需求分析</p><p> 軟件的界面簡潔明了而不失精美,操作簡單容易,功能按鈕名稱簡單易懂,棋盤的大小,棋子的樣式。</p><p> 3.1.2 軟件需求分析</p><p> 現(xiàn)有的網絡編程模式主要分成兩類:一種是基于C/S(Client/S
57、erver)模式,另一種是B/S (Browser/Server)模式。網絡五子棋系統(tǒng)應用于局域網,對交互性要求很高,本系統(tǒng)選用了C/S 模式進行實現(xiàn),網絡內部使用TCP/IP 方式利用Socket提供的服務,使用Java Graphics類進行用戶圖形界面的搭建。系統(tǒng)分成兩個部分,分別為服務端程序以及客戶端程序[8]。結合實際情況,將服務器端的程序和客戶端的程序放在一起,便可以更為方便的建立游戲和參與游戲,有效解決了在局域網中服務器未
58、開啟,則無法進行游戲的缺陷。</p><p> 五子棋網絡游戲主要分為兩個部分,游戲服務端和游戲客戶端。游戲服務端主要存儲所有連線客戶的相關信息及各種狀態(tài),并負責游戲客戶之間數據的傳遞;游戲客戶端提供給客戶聯(lián)機對戰(zhàn)按鈕,使其能與其他玩家進行游戲。由于將服務器端和客戶端程序放在一起,所以可以減少界面繪制的冗余代碼,使得客戶端和服務器端使用相同的界面。</p><p><b>
59、3.2 總體設計</b></p><p> 總體設計是軟件開發(fā)過程中的另一個重要階段,在這一階段中將根據需求分析中提出的邏輯模型,合理地完成物理模型的設計。這個階段的主要目標是將反映了用戶信息需求的邏輯方案轉換成物理方案,并為下一階段提供必須的技術資料。</p><p> 總體設計應遵循以下原則:</p><p> ★ 整體性:軟件是作為統(tǒng)一整體
60、而存在的。因此,在總體設計中要從整個軟件的角度去考慮。</p><p> ★ 靈活性:為保持軟件長久的生命力,要求該軟件具有很強的環(huán)境適應性。為此,該軟件必須具有較好的開放性與結構的可變性。</p><p> ★ 可靠性:可靠性是指軟件抵御外界干擾的能力及受外界干擾時的恢復能力。</p><p> ★ 經濟性:經濟性是指在滿足游戲軟件需求的前提下,盡可能地減少
61、對游戲的開銷。</p><p> 3.2.1 系統(tǒng)設計思想</p><p> 通過服務器的連接,不同的玩家可以連接到各自想參加比賽的服務器地址,并開始各自的游戲。通過安全的SOCKET連接交換數據。通過多線程,使得每個對戰(zhàn)的雙方不會受到第三方數據的干擾。本系統(tǒng)的功能能夠實現(xiàn)一個在網絡上供客戶進行對戰(zhàn)的五子棋網絡游戲,因為是C/S 模式的網絡游戲,客戶只要連接到服務器上,就能選擇任何其
62、它用戶已創(chuàng)建好的游戲進行對戰(zhàn)游戲。在C/S模式游戲中,Server一般提供所有用戶的全部信息,并能提供客戶之間的信息轉發(fā)??蛻糁g的通訊必須通過Server進行,因為多個客戶能夠連接到同一臺Server上,所以Server必須用Thread 負責每個用戶的通訊和消息處理。</p><p> 客戶連接成功,Server利用特定的客戶Thread連接不斷從客戶讀取數據,實現(xiàn)客戶和服務器或者客戶與客戶之間的信息的交互
63、。客戶端同樣采用的是線程控制的思想,在每一個客戶端連接上服務器后,就為此客戶端啟動一個網絡收發(fā)數據線程。</p><p> 3.2.2 系統(tǒng)總體設計</p><p> 系統(tǒng)使用Socket 技術以及java 多線程機制進行客戶與服務端之間信息的交互,但一個真正實用程序必須針對具體應用定制一套協(xié)議用于用戶程序之間進行交互,而該協(xié)議的定制往往是編寫程序的關鍵也是核心內容,該協(xié)議的完善決定
64、程序是否能夠正常運行。</p><p> 所謂協(xié)議[9]就是程序之間交互的信息的格式規(guī)定, 服務端和客戶端都遵循該協(xié)議才能夠進行對話, 通俗講是人類之間的語言。 </p><p> 3.3 功能模塊及流程</p><p> 3.3.1 系統(tǒng)主要模塊</p><p> 游戲各模塊功能如表3-1:</p><p&g
65、t; 表3-1 各模塊功能</p><p> 同時根據上面的系統(tǒng)的設計要求,可以將此網絡五子棋游戲分為以下五個模塊:</p><p> 初始化模塊:建立棋盤數組并清零;初始化界面并在屏幕上畫出棋盤。</p><p> 主循環(huán)控制模塊:負責控制下棋順序,當輪到某方下子時,負責將程序流程轉到相應的模塊中。</p><p> 玩家落子模
66、塊:即用戶在指定落子區(qū)域單擊后,程序就會得到該棋子的坐標,并且將棋盤數組中坐標處記錄棋子的顏色,1代表白色,2代表黑色,以說明是哪一方下的棋子。</p><p> 勝負判斷模塊:根據預先設定的五子棋規(guī)則,判斷游戲輸贏。</p><p> 網絡模塊[10]:網絡功能的實現(xiàn),使兩臺不同計算機的用戶通過網絡連接,實現(xiàn)網絡對弈的功能。</p><p> 網絡編程的模式
67、和選取</p><p> 網絡編程模式主要分成兩類: 一種是基于C/S(客戶機/服務器)模式, 另一種是B/S(瀏覽器/服務器)式;C/S 程序具有好的交互性, 功能強大, 但是客戶端必須安裝客戶端軟件, 限制了其應用; B/S 模式下要求客戶端具有瀏覽器, 但瀏覽器在安全方面有一些限制, 交互性與功能有一些限制網絡五子棋系統(tǒng)應用,所以一般的網絡五子棋游戲都選用了C/S 模式進行實現(xiàn),使用TCP/IP 方式利用
68、Socket 通過傳輸層提供服務。</p><p> 在Socket工作中,用ClientSocket類建立客戶端連接,用ServerSocket類建立服務器端連接,這兩個組件分別用來操縱客戶端和服務器端的Socket對象進行連接和傳輸數據。在通信過程中,服務器端應用程序先啟動,然后等待客戶端的連接請求。在另外一臺計算機上啟動客戶端應用程序,同時輸入服務器端Socket地址和端口號進行選擇服務器,找到服務器后就
69、向服務器端發(fā)請求連接服務器端,允許連接后即向客戶端Socket收到Accept信號??蛻舳撕头掌鞫司驼浇⑵鹆撕? 就可以分別調用Tserve Rsocket和TClientSocket的Socket屬性和客戶端進行數據傳輸。客戶端和服務器端Socket組件必須設置相同的端口號。</p><p><b> 服務器端作用</b></p><p> 服務器端[11
70、]主要通過建立流連接來連接客戶端,與客戶端進行相互通信、轉發(fā)信息。接收客戶端的信息,接收信息后按照此客戶端的要求將信息發(fā)送到相應的客戶端,服務器端起到了中轉的作用。</p><p> 服務器類用于接收客戶端的連接,并為每個客戶端在服務器端啟動唯一的守護線程,線程主要功能是接收客戶端發(fā)送過來的消息并做出相應的處理??蛻舳税l(fā)送到服務器端的主要消息有兩部分:一部分是客戶端發(fā)送給服務器端需要服務器端進行處理的,如客戶端
71、發(fā)送過的連接信息、客戶端改名信息、客戶端斷開連接信息等;另一部分是客戶端發(fā)送給服務器端需要服務端轉發(fā)給其他客戶端的消息,如客戶端給游戲另一方發(fā)送的棋盤狀態(tài)數據、聊天信息等。</p><p> 玩家進入游戲界面時,如果玩家不想進入別人已經建立好的游戲中,那也可以自己從界面中建立一個房間,等待其他玩家的進入。直接點擊創(chuàng)建房間,這樣一個自己的游戲就建立了,如果有玩家加入游戲,系統(tǒng)會提示某某玩家請求進入房間,這時你可以
72、選擇是或者否。游戲各模塊功能跟客服端的模塊相同。</p><p> 服務器類使用狀況如圖3-1:</p><p> 圖3 -1 服務器類用況圖</p><p><b> 客戶端作用</b></p><p> 游戲客戶端的主要功能是為了初始化和組織用戶界面,并且定義了各個按鈕的功能。</p>&l
73、t;p> 玩家進入游戲界面時,首先提示玩家選擇聯(lián)機對戰(zhàn),當玩家選擇聯(lián)機對戰(zhàn)后,會彈出請輸入玩家名的聊天框,輸入玩家名點擊進入(在此判斷是否會有相同名稱的玩家名),跳轉到另一個玩家界面,再此玩家可以創(chuàng)建房間或者加入已經有了的房間。</p><p> 游戲客戶端使用狀況如圖3-2:</p><p> 圖3-2 游戲客戶端用況圖</p><p> 客戶端副
74、類的主要功能是當前玩家與其他玩家進行對弈時,網絡客戶端處理需要發(fā)送和接收的消息。</p><p> 圖3-3 棋盤類用況圖</p><p> 4 詳細設計及實現(xiàn)</p><p><b> 4.1 系統(tǒng)主流程</b></p><p> 玩家進入游戲,選擇聯(lián)機對戰(zhàn),輸入玩家昵稱,進入游戲大廳,選擇進入房間、創(chuàng)建房
75、間或者轉觀戰(zhàn),進入房間,進入對弈階段。對弈結束,從新開始。</p><p> 系統(tǒng)主流程如圖4-1:</p><p> 圖4-1 網絡五子棋游戲流程圖</p><p> 4.2 如何判斷輸贏</p><p> 輸贏的判斷是網絡五子棋游戲中一個很重要的部分。當雙方每放下一個棋子的時候,程序都要進行判斷是否已經產生了輸贏。如果是,則停止
76、游戲,并發(fā)送結果給服務器,服務器再發(fā)送結果給對方。橫,豎或者對角線方向上擁有五顆同樣的棋子時,即為勝利。</p><p> 圖4-2 五子棋判斷輸贏示意圖</p><p> 當在棋盤中放入一個棋子時,比如白色。程序要計算它左邊連在一起的白色棋子的個數,然后計算右邊與它相連在一起的白色棋子的個數。再將兩數相加,如果為四,與自己加起來剛好為五。則白棋獲勝。用同樣的方法在垂直和對角線方向進
77、行判斷同色棋子個數。如果獲勝,則客戶端發(fā)送信息給服務器,否則由對方下棋,并重復進行相同的運算。</p><p><b> 具體的算法如下:</b></p><p> 1.豎著判斷輸贏的算法:</p><p> public boolean isWin(int i,int j){</p><p> int j1=j
78、-1;</p><p> int count=1;</p><p> while(true){ </p><p> if(j1>=0&&chessBoard[i][j]==chessBoard[i][j1]){</p><p><b> count++;</b></p>
79、<p><b> j1--;</b></p><p><b> }else{</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b>&l
80、t;/p><p><b> j1=j+1;</b></p><p> while(true){ </p><p> if(j1<col&&chessBoard[i][j]==chessBoard[i][j1]){</p><p><b> count++;</b>&l
81、t;/p><p><b> j1++;</b></p><p><b> }else{</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }<
82、;/b></p><p> if(count>=5){</p><p> return true;</p><p><b> }</b></p><p> return false;</p><p><b> }</b></p><p
83、> 2.橫著判斷輸贏的算法:</p><p> public boolean isWin1(int i,int j){</p><p> int count=1;</p><p> int i1=i-1;</p><p> while(true){ </p><p> if(i1>=0&
84、amp;&chessBoard[i][j]==chessBoard[i1][j]){</p><p><b> count++;</b></p><p><b> i1--;</b></p><p><b> }else{</b></p><p><b>
85、; break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> i1=i+1;</b></p><p> while(true){ </p><p> if(
86、i1<row&&chessBoard[i][j]==chessBoard[i1][j]){</p><p><b> count++;</b></p><p><b> i1++;</b></p><p><b> }else{</b></p><p&g
87、t;<b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(count>=5){</p><p> return true;</p><p><b>
88、 }</b></p><p> return false;</p><p><b> }</b></p><p> 3.斜著(東北方向)判斷輸贏的算法</p><p> public boolean isWin2(int i,int j){</p><p> int cou
89、nt,i1,j1;</p><p><b> count=1;</b></p><p> j1=j+1;i1=i+1;</p><p> while(true){ </p><p> if(i1<row&&j1<col&&chessBoard[i][j]==ch
90、essBoard[i1][j1]){</p><p><b> count++;</b></p><p><b> i1++;</b></p><p><b> j1++;</b></p><p><b> }else{</b></p>
91、<p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> j1=j-1;i1=i-1;</p><p> while(true){ </p><p&g
92、t; if(i1>=0&&j1>=0&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b> count++;</b></p><p><b> i1--;</b></p><p><b> j1--;</
93、b></p><p><b> }else{</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(count&g
94、t;=5){</p><p> return true;</p><p><b> }</b></p><p> return false;</p><p><b> }</b></p><p> 4.斜著(西北方向)判斷輸贏的算法</p><
95、p> public boolean isWin3(int i,int j){</p><p> int count,i1,j1;</p><p><b> count=1;</b></p><p> j1=j+1;i1=i-1;</p><p> while(true){ </p>
96、<p> if(i1>=0&&j1<col&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b> count++;</b></p><p><b> i1--;</b></p><p><b> j1
97、++;</b></p><p><b> }else{</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> j1
98、=j-1;i1=i+1;</p><p> while(true){ </p><p> if(i1<row&&j1>=0&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b> count++;</b></p><p
99、><b> i1++;</b></p><p><b> j1--;</b></p><p><b> }else{</b></p><p><b> break;</b></p><p><b> }</b><
100、/p><p><b> }</b></p><p> if(count>=5){</p><p> return true;</p><p><b> }</b></p><p> return false;</p><p><b&g
101、t; }</b></p><p> 4.3 開發(fā)環(huán)境的搭建</p><p><b> 1.安裝JDK</b></p><p> 從網站上下載免費安裝軟件,并按照要求一步一步安裝。</p><p> 2.安裝MyEclipse</p><p> 從官方網站上下載免費壓縮包,在
102、jdk安裝目錄下,解壓此壓縮包即可。</p><p><b> 3.配置環(huán)境變量</b></p><p> 在環(huán)境變量的配置中,假設JDK的安裝目錄為D:\Program Files\Java\jdk1.6.0_10</p><p><b> 環(huán)境變量PATH</b></p><
103、p> 方法一:在c:\Autoexe.bat文件的底部或者最后以后一個path命令之后,輸入:SET PATH=%PATH%;D:\Program Files\Java\jdk1.6.0_10\bin</p><p> 方法二:在“系統(tǒng)屬性”對話框中 直接設置環(huán)境變量:PATH=……;D:\Program Files\Java\jdk1.6.0_10\bin; </p><p>
104、; 4.4 功能模塊的界面實現(xiàn)</p><p> 界面是軟件與用戶交互的最直接的層,界面的好壞決定用戶對軟件的第一印象。而且設計良好的界面能夠引導用戶自己完成相應的操作,起到向導的作用。同時界面如同人的面孔,具有吸引用戶的直接優(yōu)勢。設計合理的界面能給用戶帶來輕松愉悅的感受和成功的感覺,相反由于界面設計的失敗,讓用戶有挫敗感,再實用強大的功能都可能在用戶的畏懼與放棄中付諸東流。一個好的按鈕名稱應該是易懂的,用詞
105、準確的,屏棄模楞兩可的字眼,要與同一界面上的其它按鈕易于區(qū)分,能望文知意最好。理想的情況是用戶不用查閱幫助就能知道該界面的功能并進行相關的正確操作。通常界面設計都按Windows 界面的規(guī)范來設計,可以說:界面遵循規(guī)范化的程度越高,則易用性相應的就越好。</p><p> 本系統(tǒng)軟件界面有以下幾個功能:聯(lián)機對戰(zhàn)、輸入玩家姓名、創(chuàng)建房間、觀戰(zhàn)和退出等按鈕。點擊“開始游戲”按鈕,在界面中的展示如圖4-3,4-4,4
106、-5,4-6:</p><p><b> 圖4-3 聯(lián)機對戰(zhàn)</b></p><p> 開始游戲(聯(lián)機對戰(zhàn))</p><p> 圖4-4 玩家登錄注冊</p><p> 輸入玩家昵稱,同時判斷是否有已存在的玩家,若有重新輸入。</p><p><b> 圖4-5 游戲大廳<
107、;/b></p><p> 游戲大廳包括:轉觀戰(zhàn),創(chuàng)建房間,進入房間(同時可以處理一些消息)</p><p><b> 圖4-6 玩家對戰(zhàn)</b></p><p> 五子棋對戰(zhàn)界面包括:新開,悔棋,放棄,求和,退出,聊天框功能(同時處理一些消息)</p><p><b> 5 軟件的測試<
108、/b></p><p> 5.1 軟件測試的方法</p><p> 軟件測試就是利用測試工具按照測試方案和流程對產品進行功能和性能測試,甚至根據需要編寫不同的測試工具,設計和維護測試系統(tǒng),對測試方案可能出現(xiàn)的問題進行分析和評估。執(zhí)行測試用例后,需要跟蹤故障,以確保開發(fā)的產品符合需求。</p><p><b> 軟件測試的目的:</b&g
109、t;</p><p> ★ 測試并不僅僅是為了找出錯誤。通過分析錯誤產生的原因和錯誤的發(fā)生趨勢,可以幫助項目管理者發(fā)現(xiàn)當前軟件開發(fā)過程中的缺陷,以便改進。</p><p> ★ 這種分析能幫助測試人員設計出有針對性的測試方法,改善測試的效率。</p><p> ★ 沒有發(fā)現(xiàn)錯誤的測試也是有價值的。完整的測試是評定軟件質量的重要方法。</p>
110、<p><b> 軟件測試的方法:</b></p><p> 軟件測試可以分為黑盒測試和白盒測試。</p><p> 黑盒測試就是測試要在軟件的接口處進行。這種方法是把測試內容看做一個盒子,程序內部的邏輯結構和內部特性不被測試人員考慮,只依據程序的需求規(guī)格說明書來檢查程序的功能是否符合它的功能說明。因此黑盒測試又叫功能測試或數據驅動測試。黑盒測試主要
111、是為了發(fā)現(xiàn)以下4種錯誤:</p><p> ★ 是否有不正確或遺漏的功能。</p><p> ★ 在接口上,輸入是否能正確的接受。能否輸出正確的結果。</p><p> ★ 是否有數據結構錯誤或外部信息訪問錯誤。</p><p> ★ 是否有初始化和終止性的錯誤。</p><p> 白盒測試是細致檢查
112、軟件的過程性細節(jié)。此方法就是叫測試人員把軟件看成一個打開的盒子一樣,測試人員可以利用程序內部的邏輯結構,設計及相關信息選擇測試用例,測試程序所有邏輯路徑。測試不同點的程序狀態(tài)來確定所測試出來的是否和預測的狀態(tài)相同。白盒測試又被叫做結構測試或者邏輯驅動測試。白盒測試主要是相對進行的。</p><p><b> 如下程序模塊檢查:</b></p><p> ★ 對程
113、序模塊的所有獨立的執(zhí)行路徑至少測試一遍。</p><p> ★ 對所有的邏輯判定,取“真”與取“假”的兩種情況至少測一遍。</p><p> ★ 測試內部數據結構的有效性,等等。</p><p> 由以上的分析,本游戲采用的是黑盒測試的方法。</p><p> 具體測試結果如表5-1:</p><p>
114、表5-1 網絡客戶端功能測試</p><p> 用例測試結果:正確。</p><p><b> 6 總結語</b></p><p> 通過幾個月的對軟件系統(tǒng)的設計和實現(xiàn),一個能夠完成網絡對弈的五子棋游戲基本實現(xiàn)。全部的總結工作,具體概括如下:</p><p> 論文首先研究對比了網絡五子棋游戲的具體優(yōu)勢,分析
115、了C/S和B/S模式的各自的優(yōu)缺點。對應系統(tǒng)的具體要求,構建了基于C/S模式的網絡五子棋對戰(zhàn)的基本設計。</p><p> 采用了網絡編程中的一種,Socket編程,分析了Socket通信的基本原理及實現(xiàn)。</p><p> 完成了網絡五子棋對弈系統(tǒng)的總體的方案設計,以Java為編程語言基礎,以MyEclipse為五子棋游戲的開發(fā)工具,完成了系統(tǒng)各模塊的設計,其中包括服務器模塊、客戶端
116、模塊以及美化界面方面的設計。</p><p> 雖然網絡五子棋這款游戲實現(xiàn)了基本的設計,但是需要改進的地方還有很多,早這里我首先感謝一下我的指導老師孫晨霞老師,在程序設計和規(guī)劃上給了我很多實質性的建議,但是我個人認為需要改進的地方還有有以下幾點:</p><p> 游戲界面還是不夠美化,程序設計還是存在些許冗余,不能高效率的在個人PC上運行。</p><p>
117、 對游戲邏輯模塊進行優(yōu)化,進一步提高可擴展性,以適應將來新的需求和變化。</p><p><b> 參考文獻</b></p><p> [1] 耿祥義、張躍平:Java基礎教程(第2版),清華大學出版社,2007.05,P10-P12</p><p> [2] Harvey M.Deitel,P.J.Deitel:Java大學基礎教程,劉
118、曉莉,周璐,錢方,等譯,機械工業(yè)出版社,2006.01,P20-P25</p><p> [3] 吳春煌:科技論文寫作,中山大學出版社,2001.07,P15-P35</p><p> [4] Oaks, Scott:java Threads,Third Edition,O'Reilly Media Inc,2004.03, P12-P20</p><p&g
119、t; [5] 馮博、應群:面向對象的Java網絡編程。清華大學出版社,2004.11,P152-P155</p><p> [6] 孫晨霞、楊興運:Java程序設計。中國計劃出版社2007.8,P188-P191</p><p> [7]孫更新等:Java畢業(yè)設計指南與項目實踐,科學出版社,2008.03,P78-P88</p><p> [8] 單文仁:J
120、ava在我國的應用現(xiàn)狀和發(fā)展趨勢,科技成果縱橫,2007.02,P132-P155</p><p> [9] 孫衛(wèi)琴:JAVA面向對象編程,電子工業(yè)出版社,2006.07,P65-P69</p><p> [10] 朱福喜、黃昊著:Java項目開發(fā)與畢業(yè)設計指導,北京:清華大學出版社,2008.05,P54-P65</p><p> [11] 郭驊:Java網
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的“網絡版五子棋”游戲的設計和實現(xiàn)
- 基于Java的“網絡版五子棋”游戲的設計和實現(xiàn).doc
- java五子棋游戲畢業(yè)論文
- 基于java的五子棋游戲的設計——畢業(yè)論文
- 畢業(yè)論文---網絡五子棋游戲設計
- 基于java的五子棋游戲設計
- 五子棋游戲設計畢業(yè)論文
- 畢業(yè)論文——五子棋游戲設計
- 基于網絡和java語言的網絡五子棋游戲
- 五子棋游戲的設計與實現(xiàn)【畢業(yè)論文】
- 基于java的五子棋游戲的設計
- java五子棋畢業(yè)設計--java五子棋對弈程序的設計與實現(xiàn)
- 網絡五子棋的設計與實現(xiàn)-畢業(yè)論文
- 基于vc的五子棋游戲設計與實現(xiàn)【畢業(yè)論文】
- 基于java五子棋游戲開發(fā)
- 基于java的五子棋小游戲
- 基于android的五子棋游戲的設計畢業(yè)論文
- 基于java的五子棋游戲的設計(源代碼+論文)
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設計
- java五子棋畢業(yè)設計論文
評論
0/150
提交評論