命令行版的鬥地主你玩過沒?

本文適合有 Java 基礎知識的人群,跟著本文可使用和快速搭建命令行鬥地主項目。

命令行版的鬥地主你玩過沒?

本文作者:HelloGitHub-秦人

HelloGitHub 推出的《講解開源項目》系列,今天給大家帶來一款命令行鬥地主開源項目—— ratel

項目源碼地址:

https://github.com/ainilili/ratel

一、項目簡介

鬥地主我想大家都會玩吧,今天分享一個 Java 命令行鬥地主的開源項目!項目是基於 Netty 實現,Netty 是一個高性能、異步事件驅動的 NIO 框架。下面就讓我們一起來把這個項目跑起來,然後看看它的代碼。

二、項目結構

項目目錄結構如下圖:

命令行版的鬥地主你玩過沒?

目錄說明:

1. 客戶端:landlords-client

  • ent:客戶端事件包
  • handle:客戶端事件處理包
  • SimpleClient:客戶端啟動程序

2. 基礎包:landlords-common

  • annel:管道工具包
  • entity:實體類目錄
  • enums:枚舉類型目錄
  • exception:異常處理目錄
  • handler:業務處理,包含消息轉碼工具類
  • helper:工具類包,包括時間工具類等
  • print:打印工具包目錄,包括格式化輸出的工具類
  • robot:機器人出牌目錄,人機對戰時使用
  • transfer:類型轉換工具包目錄
  • utils:基礎工具類,包括集合、正則等工具類

3. 服務端:landlords-server

  • event:服務端端事件包
  • handler:客戶端事件處理包
  • robot:機器人出牌目錄,人機對戰時使用
  • timer:定時任務目錄,計算房間存活時間。
  • SimpleServer:服務端啟動程序

4. 配置 serverlist.json:默認配置

三、實戰操作

3.1 運行項目

  1. 構建項目
命令行版的鬥地主你玩過沒?

2. 運行客戶端和服務端

命令行版的鬥地主你玩過沒?

  • 客戶端運行效果
命令行版的鬥地主你玩過沒?

  • 服務端運行效果
命令行版的鬥地主你玩過沒?

3.2 開始鬥地主

客戶端、服務端都已啟動,我們就可以開始娛樂一下了。

進入遊戲有三個菜單:

  • 真人模式(PvP):需要三個人加入房間,才可以開始。
  • 人機模式(PvE):一個人加入,其他兩個人是機器。
  • 設置(Setting):可以設置卡牌的顯示樣式。

運行效果如下:

命令行版的鬥地主你玩過沒?

注意

  1. 小王是S,大王為X。
  2. 牌的別名
命令行版的鬥地主你玩過沒?

四、工作原理

4.1 Netty 工作原理

命令行版的鬥地主你玩過沒?

以server為例:

  1. 初始化創建 2 個 EventLoopGroup,其中 parentGroup 用於 Accetpt 連接建立事件並分發請求。childGroup 用於處理 I/O 讀寫事件和業務邏輯。
  2. 基於 ServerBootstrap (服務端啟動引導類),配置 EventLoopGroup、Channel 類型,連接參數、配置入站、出站事件 handler
  3. 綁定端口,開始工作

4.2 命令行運行

命令行版的鬥地主你玩過沒?

看到 Server 的入口方法可知,-p 1024 是通過入口 main 接參數的。-p 和 -port 都表示為端口。

命令行版的鬥地主你玩過沒?

4.3 鬥地主規則

鬥地主的規則文件是:landlords-common/helper/PorkerHelper.java

distributePoker 方法是構建發牌的集合。撲克牌共 54 張,分成 3 堆 17 張和一堆 3 張。

命令行版的鬥地主你玩過沒?

五、最後

俗話說:興趣是學習的老師,當一個人對做一件事產生興趣時,慢慢地就開始喜歡這件事。編程也是一樣的。也許你覺得編程很枯燥,那是因為你覺得編程這件事讓你產生不了興趣。那麼如何讓我們對編程產生興趣呢?那就回到本文的主旨,通過我的內容分享,讓更多的朋友感受到開源項目的魅力,由而對編程產生興趣。

教程至此,你應該也能快速搭建鬥地主項目了。編程是不是也特別有意思呢?快邀請你的小夥伴一起加入到命令行鬥地主的項目和樂趣中吧~

  • Netty原理框架
  • Netty 入門初體驗

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟著我們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~


分享到:


相關文章: