亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        覃建運,李春青

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

        0 引言

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

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

        1 總體設計

        1.1 網(wǎng)絡通信設計

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

        1.2 界面設計

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

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

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

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

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

        1.4 功能設計

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

        圖2 系統(tǒng)功能

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

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

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

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

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

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

        (6)玩家互動功能分為聊天、查找、挑戰(zhàn)和好友功能,其中聊天室功能[16]分為多人文字聊天、一對一文字聊天、一對一網(wǎng)絡語音聊天;查找功能為游戲玩家提供簡單的玩家搜索功能;挑戰(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ù)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ā)送;語音播放類PlaySound實現(xiàn)Runnable接口,通過run方法實時接收語音信息并解析播放語音信息[21]。語音聊天功能實現(xiàn)代碼如下:

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

        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)絡流

        //語音接收及其播放

        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)運行測試

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

        3 結(jié)語

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

        猜你喜歡
        服務端人機聊天
        人機“翻譯員”
        從內(nèi)到外,看懂無人機
        南都周刊(2021年3期)2021-04-22 16:43:49
        云存儲中基于相似性的客戶-服務端雙端數(shù)據(jù)去重方法
        新時期《移動Web服務端開發(fā)》課程教學改革的研究
        消費導刊(2018年8期)2018-05-25 13:19:48
        在Windows Server 2008上創(chuà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
        “鴿子”玩升級 黑你沒商量
        久久久精品人妻一区二区三区四区 | 日韩av天堂一区二区三区在线| 蜜桃视频在线观看免费亚洲| 艳妇臀荡乳欲伦69调教视频| 国产在线精品观看一区二区三区| 男人的天堂一区二av| 国产精品久久久久久一区二区三区| 国产a国产片国产| 国产成人精品日本亚洲11| 韩国精品一区二区三区无码视频 | 中文字幕人成乱码中文乱码| 亚洲国产精品天堂久久久| 真实夫妻露脸爱视频九色网| 狠狠躁日日躁夜夜躁2020| 中文字幕乱码免费视频| 精品日韩欧美| 亚洲二区精品婷婷久久精品| 女同精品一区二区久久| 欧美亚洲国产一区二区三区 | 久久99精品久久久久久野外 | 真人作爱免费视频| 亚洲欧美另类精品久久久| 韩国美女主播国产三级| 免费一区二区在线观看视频在线 | 极品嫩模高潮叫床| 77777亚洲午夜久久多人| 国产三级黄色的在线观看 | 中文字日产幕码三区国产| 国产精品无码v在线观看| 永久免费无码av在线网站| 久久久亚洲欧洲日产国码是AV| 久久亚洲精品一区二区三区| 手机在线免费观看av不卡网站| 国产精品久久国产精麻豆99网站| 免费中文熟妇在线影片| 中文不卡视频| 亚洲第一页在线免费观看| 国产三级精品视频2021| 日本熟妇人妻xxxx| 国产亚洲av无码专区a∨麻豆| 欧美性爱一区二区三区无a|