• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Java的國際象棋游戲系統(tǒng)設(shè)計與實現(xiàn)

    2018-11-19 10:58:58覃建運李春青
    軟件導(dǎo)刊 2018年11期
    關(guān)鍵詞:服務(wù)端人機聊天

    覃建運,李春青

    (廣西民族師范學(xué)院 數(shù)學(xué)與計算機科學(xué)學(xué)院,廣西 崇左 532200)

    0 引言

    國際象棋作為一款著名的棋牌類游戲,不僅擁有悠久的歷史和大規(guī)模玩家群體,還具有豐富的娛樂性、健腦性和交友性[1]。眾多玩家群體在此具有廣闊的交友空間,然而受地域限制,玩家以棋會友的夢想難以實現(xiàn)。隨著計算機技術(shù)的發(fā)展,棋牌類游戲得到了快速發(fā)展,不僅擁有更加豐富的娛樂性,還打破了地域限制,玩家能交到更多好友。

    Java作為一種面向?qū)ο笤O(shè)計的編程語言,因其可移植性、簡潔、安全等特點,成為世界上最受歡迎的編程語言之一,深受眾多編程人員喜愛[2-4]。本文在研究國際象棋規(guī)則基礎(chǔ)上,結(jié)合Java Socket編程技術(shù)[5]、Java Swing技術(shù)[6]和人機博弈算法[7-9]等,設(shè)計并實現(xiàn)一個具有人機博弈、在線博弈、殘局闖關(guān)和好友互動等功能的國際象棋博弈系統(tǒng)。

    1 總體設(shè)計

    1.1 網(wǎng)絡(luò)通信設(shè)計

    游戲網(wǎng)絡(luò)通訊部分采用C/S模式,并結(jié)合Java Socket技術(shù)實現(xiàn)客戶端與服務(wù)端之間的通信[10]。游戲需實現(xiàn)多用戶同時在線,因此服務(wù)端需具有多客戶端同時連接功能。首先在服務(wù)端建立ServerSocket類繼承Thread類,并創(chuàng)建ServerSocket對象SS,采用線程實現(xiàn)對客戶端連接請求的持續(xù)監(jiān)聽,即循環(huán)調(diào)用ServerSocket的accept()方法。當服務(wù)器接收到客戶端的連接請求時建立專線連接,建立連接后的兩個scoket將在一個單獨的線程上進行信息交互。

    1.2 界面設(shè)計

    游戲界面采用Java Swing技術(shù),分為登錄界面、用戶界面、游戲界面等。登錄界面為玩家提供登錄和注冊功能,用戶界面為玩家提供玩家互動和功能選擇模塊,玩家在用戶界面點擊功能選項進入相應(yīng)的功能模塊或游戲界面。

    1.3 數(shù)據(jù)庫設(shè)計

    用戶在與平臺進行交流過程中,需要運用數(shù)據(jù)庫進行語言傳遞,數(shù)據(jù)庫是數(shù)據(jù)存儲和數(shù)據(jù)分析的基礎(chǔ)。本文數(shù)據(jù)庫設(shè)計采用E-R圖[11]方式,將用戶需求、平臺內(nèi)容建設(shè)等相對抽象的概念轉(zhuǎn)化為相對具象的概念模式[12],再由E-R圖呈現(xiàn)。 在邏輯設(shè)計過程中,E-R圖在Java的要求下需要轉(zhuǎn)變?yōu)榫唧w的DBMS產(chǎn)品[13]支持數(shù)據(jù)模型,并根據(jù)設(shè)計的功能模塊分別形成符合模塊要求的基本表。在基本表中對模塊的不同功能設(shè)置不同字段,再借助數(shù)據(jù)類型使模塊功能完整。

    在SQL Server中建立ChessDB數(shù)據(jù)庫,并根據(jù)ER圖設(shè)計結(jié)果在ChessDB數(shù)據(jù)庫中建立UserInformation表、Friend表、Count表、Chess表等。為方便數(shù)據(jù)庫操作,本文新建了SQLDBO類,在SQLDBO類中運用JDBC技術(shù)實現(xiàn)服務(wù)端與服務(wù)器連接[14],在Operate類中實現(xiàn)對數(shù)據(jù)庫的增刪改查操作。服務(wù)端通過調(diào)用Operate類實現(xiàn)對數(shù)據(jù)庫的操作。 玩家在客戶端與數(shù)據(jù)庫服務(wù)器端的交互過程如圖1所示。

    圖1 客戶端與數(shù)據(jù)庫服務(wù)器端交互過程

    1.4 功能設(shè)計

    根據(jù)需求分析結(jié)果確定游戲系統(tǒng)功能,如圖2所示。

    圖2 系統(tǒng)功能

    關(guān)鍵模塊功能如下:

    (1)注冊功能為玩家提供便捷的游戲賬號注冊通道。注冊時玩家須填寫用戶名即玩家游戲昵稱和密碼,確認密碼后點擊“注冊”完成注冊;游戲玩家用戶名唯一,不能重復(fù)注冊,成功后不可更改。

    (2)登陸功能是網(wǎng)絡(luò)游戲必備的功能,該功能實現(xiàn)客戶端與服務(wù)端連接。玩家須正確輸入游戲賬號和密碼,客戶端將賬號信息發(fā)送至服務(wù)端,服務(wù)端將信息與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進行比對,驗證成功后方可登陸至游戲界面。

    (3)在線對戰(zhàn)分為普通模式和殘局模式。普通模式為完整棋盤,殘局模式由服務(wù)器為雙方玩家隨機抽取殘局棋盤,兩種模式均通過服務(wù)器為玩家隨機匹配對手,玩家下載模式后可進入匹配隊列服務(wù)器為其匹配相應(yīng)模式下的玩家,匹配成功后方可進行游戲。

    (4)人機對戰(zhàn)功能基于人機博弈算法Alpha_Beta[15]實現(xiàn),游戲玩家可通過搜索算法功能與計算機進行博弈,從而達到鍛煉棋技的目的。

    (5)闖關(guān)模式是人機對戰(zhàn)的特殊玩法,該功能通過將收錄的殘局棋譜設(shè)置成關(guān)卡形式供玩家選擇,不同關(guān)卡代表不同的殘局。在該模式下玩家將與計算機進行對戰(zhàn),在對戰(zhàn)中玩家獲勝后方能解鎖下一關(guān)卡。

    (6)玩家互動功能分為聊天、查找、挑戰(zhàn)和好友功能,其中聊天室功能[16]分為多人文字聊天、一對一文字聊天、一對一網(wǎng)絡(luò)語音聊天;查找功能為游戲玩家提供簡單的玩家搜索功能;挑戰(zhàn)功能模塊為玩家提供挑戰(zhàn)功能,通過該功能玩家能對任意在線空閑玩家發(fā)起挑戰(zhàn);好友功能擁有添加和刪除功能,方便玩家對好友進行管理。

    (7)我的棋譜功能模塊擁有棋譜上傳、下載、分享、刪除、查看功能,為游戲玩家提供簡單的棋譜管理功能。

    (8)排行榜模塊通過對游戲玩家的游戲數(shù)據(jù)進行統(tǒng)計,根據(jù)玩家的勝率排行。

    2 游戲?qū)崿F(xiàn)

    2.1 游戲開發(fā)和運行環(huán)境

    操作系統(tǒng):Windows 7 64-bit,內(nèi)存:4 GB RAM;開發(fā)工具:eclipse + jdk1.8+mysql2005;存儲空間: 1GB 可用空間;環(huán)境需求:jdk1.8+mysql2005。

    2.2 游戲主要算法

    2.2.1 著法實現(xiàn)

    著法實現(xiàn)原理:根據(jù)當前點擊棋子的坐標和棋子類型,通過當前棋子的行棋規(guī)則生成一個可行路徑數(shù)組,該數(shù)組保存當前棋子所在位置的所有合法著法[17]。著法主要代碼如下:

    getMovePos(String selectPiece, int[] startPos, Board board){

    switch(selectPiece.charAt(1)){//判斷當前點擊的棋子類型

    case 'b':

    return 當前棋子可行路徑

    default:

    return 空數(shù)組;

    }

    }

    2.2.2 Alpha_Beta搜索算法實現(xiàn)

    Alpha_Beta搜索算法原理:首先判斷葉子節(jié)點是否為0或是否有玩家獲勝,如果是則通過局面評估函數(shù)[18]返回估值,否則生成所有合法著法,遍歷所有著法并逐個執(zhí)行。遞歸調(diào)用alphabetaSearch,最后保留最大值,撤銷執(zhí)行著法并剪枝。在搜索算法中需要傳遞兩個值alpha和beta,其中alpha表示搜索到的最好值,beta表示對于對方來說最壞的值,通過判斷這兩個值的關(guān)系結(jié)束搜索,從而達到剪枝目的[19]。Alpha_Beta搜索算法實現(xiàn)主要代碼如下:

    int alphabetaSearch(int depth, int alpha, int beta,boolean flag){

    if (depth == 0||board.isWin()!='N')// board.isWin()//判斷輸贏N表示沒有玩家獲勝

    return new BoardEvaluation(board, board.player).eval();//返回估值

    ArrayList moves = this.getMovesModel(flag);//生成所有著法

    for (Node node : moves) {//遍歷所有著法

    UpdatePiece(node);//移動棋子

    if (flag) {

    alpha=Math.max(alpha,alphabetaSearch(depth - 1, alpha, beta, false));//遞歸調(diào)用

    }else{

    beta= Math.min(beta, alphabetaSearch(depth - 1, alpha, beta, true)); //遞歸調(diào)用

    }

    Black();//撤銷移動棋子

    if (beta <= alpha) {//剪枝

    break;

    }

    }

    }

    2.2.3 人機博弈算法實現(xiàn)

    人機博弈算法原理:人機博弈算法是人機對戰(zhàn)的靈魂,因此人機博弈算法的實現(xiàn)是人機對戰(zhàn)玩法的重要組成部分。要實現(xiàn)人機博弈算法首先要實現(xiàn)棋子的著法,其次需要設(shè)置一個局面評估函數(shù)BoardEvaluation實現(xiàn)對棋局的評價,最后使用Alpha_Beta搜索算法搜索出最優(yōu)著法[20]。人機博弈算法流程如圖3所示。

    圖3 人際博弈算法流程

    2.2.4 語音聊天功能實現(xiàn)

    語音聊天功能實現(xiàn)原理:語音聊天需要實現(xiàn)聊天雙方一對一專線連接,該功能模塊涉及到語音信息的實時采集、傳輸和播放,因此新建語音捕捉類CaptureSound和語音播放類PlaySound。語音捕捉類CaptureSound實現(xiàn)Runnable接口,通過run方法實現(xiàn)麥克風(fēng)信息的實時采集和發(fā)送;語音播放類PlaySound實現(xiàn)Runnable接口,通過run方法實時接收語音信息并解析播放語音信息[21]。語音聊天功能實現(xiàn)代碼如下:

    AudioFormat format =new AudioFormat(8000,16,2,true,true);//設(shè)置音頻格式

    byte[] data = new byte[1024];

    //語音捕捉及其發(fā)送

    DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);

    BufferedOutputStream OutputStream=new BufferedOutputStream(SC. getOutputStream());//封裝

    TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);

    line.open(format, line.getBufferSize());

    line.start();

    int num=line.read(data, 0, 1024);//將語音流寫入byte數(shù)組

    OutputStream.write(data, 0, num);//將數(shù)組寫入網(wǎng)絡(luò)流

    //語音接收及其播放

    InputStream=new BufferedInputStream(new AudioInputStream(SC.getInputStream(),

    format,2147483647));

    DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);

    line = (SourceDataLine) AudioSystem.getLine(info);

    line.open(format, bufSize);

    line.start();

    int num = InputStream.read(data); //將解碼后的音頻流寫入byte數(shù)組

    line.write(data, 0,num);//播放音頻

    2.3 游戲系統(tǒng)運行測試

    游戲客戶端與服務(wù)端均在Window系統(tǒng)上對游戲基本功能、各功能模塊運行狀況進行測試,結(jié)果顯示游戲運行狀況良好、基本功能完善、各功能模塊運行正常。

    3 結(jié)語

    本文國際象棋系統(tǒng)采用Java技術(shù)、SQL2005數(shù)據(jù)庫實現(xiàn)。完成的主要功能有人機博弈、在線博弈、闖關(guān)模式、玩家互動、殘局模式、棋盤的查看、分享和保存、文字聊天和語音聊天、多人聊天、排行榜、登錄和注冊等,為國際象棋玩家提供了一個具有豐富娛樂性和交友性的對戰(zhàn)平臺。游戲的實時語音聊天使玩家能在游戲中與對方進行語音對話,為游戲增添了趣味。但本國際象棋游戲還存在界面不夠美觀、消息提醒功能不夠完善、玩家無法及時獲取聊天信息等問題,后續(xù)需實現(xiàn)消息盒子功能,對人機博弈算法進行深入研究及完善。

    猜你喜歡
    服務(wù)端人機聊天
    人機“翻譯員”
    從內(nèi)到外,看懂無人機
    南都周刊(2021年3期)2021-04-22 16:43:49
    云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
    新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
    在Windows Server 2008上創(chuàng)建應(yīng)用
    我就是不想跟你聊天了
    意林(2017年9期)2017-06-06 10:26:12
    敞開門聊天
    “人機大戰(zhàn)”人類智慧遭遇強敵
    海外星云(2016年7期)2016-12-01 04:17:50
    未來深空探測中的人機聯(lián)合探測
    太空探索(2016年5期)2016-07-12 15:17:58
    “鴿子”玩升級 黑你沒商量
    太康县| 长顺县| 吴堡县| 五家渠市| 中山市| 六枝特区| 灵川县| 山阳县| 建始县| 玉门市| 霍城县| 伽师县| 沅陵县| 饶阳县| 卢龙县| 吉水县| 榕江县| 灌阳县| 吴川市| 桃园市| 射洪县| 安陆市| 三穗县| 信阳市| 东光县| 建水县| 安化县| 确山县| 额济纳旗| 遵义县| 木兰县| 忻城县| 交口县| 海南省| 中超| 龙海市| 黄冈市| 绥化市| 兴宁市| 贵州省| 工布江达县|