本文適合有 Java 基礎知識的人羣,跟着本文可以使用和快速搭建命令行鬥地主項目。java
本文做者:HelloGitHub-秦人git
HelloGitHub 推出的《講解開源項目》系列,今天給你們帶來一款命令行鬥地主開源項目—— ratelgithub
項目源碼地址:https://github.com/ainilili/ratel編程
鬥地主我想你們都會玩吧,今天分享一個 Java 命令行鬥地主的開源項目!項目是基於 Netty 實現,Netty 是一個高性能、異步事件驅動的 NIO 框架。下面就讓咱們一塊兒來把這個項目跑起來,而後看看它的代碼。json
項目目錄結構以下圖:bash
目錄說明:服務器
landlords-client
landlords-common
landlords-server
serverlist.json
:默認配置構建項目
git clone https://github.com/ainilili/ratel.git cd ratel mvn install package
框架
運行客戶端和服務端
java -jar landlords-server/target/landlords-server-1.1.0.jar -p 1024 java -jar landlords-client/target/landlords-client-1.1.0.jar -p 1024 -h 127.0.0.1
異步
客戶端、服務端都已啓動,咱們就能夠開始娛樂一下了。工具
進入遊戲有三個菜單:
運行效果以下:
注意
S
,大王爲X
。poker-> |10 |J |Q |K |A |2 |S |X | alias-> |T t 0|J j|Q q|K k|A a 1|2 |S s|X x|
以server
爲例:
初始化建立 2 個 EventLoopGroup
,其中 parentGroup
用於 Accetpt 鏈接創建事件並分發請求。childGroup
用於處理 I/O 讀寫事件和業務邏輯。
基於 ServerBootstrap
(服務端啓動引導類),配置 EventLoopGroup
、Channel
類型,鏈接參數、配置入站、出站事件 handler
綁定端口,開始工做
java -jar xxx.jar -p/port 1024
看到 Server
的入口方法可知,-p 1024
是經過入口 main
接參數的。-p
和 -port
都表示爲端口。
public static void main(String[] args) throws InterruptedException { if(args != null && args.length > 1) { if(args[0].equalsIgnoreCase("-p") || args[0].equalsIgnoreCase("-port")) { ServerContains.port = Integer.valueOf(args[1]); } } }
鬥地主的規則文件是:landlords-common/helper/PorkerHelper.java
distributePoker
方法是構建發牌的集合。撲克牌共 54 張,分紅 3 堆 17 張和一堆 3 張。
public static List<List<Poker>> distributePoker(){ Collections.shuffle(basePokers); List<List<Poker>> pokersList = new ArrayList<List<Poker>>(); List<Poker> pokers1 = new ArrayList<>(17); pokers1.addAll(basePokers.subList(0, 17)); List<Poker> pokers2 = new ArrayList<>(17); pokers2.addAll(basePokers.subList(17, 34)); List<Poker> pokers3 = new ArrayList<>(17); pokers3.addAll(basePokers.subList(34, 51)); List<Poker> pokers4 = new ArrayList<>(3); pokers4.addAll(basePokers.subList(51, 54)); pokersList.add(pokers1); pokersList.add(pokers2); pokersList.add(pokers3); pokersList.add(pokers4); for(List<Poker> pokers: pokersList) { sortPoker(pokers); } return pokersList; }
俗話說:興趣是學習的老師,當一我的對作一件事產生興趣時,慢慢地就開始喜歡這件事。編程也是同樣的。也許你以爲編程很枯燥,那是由於你以爲編程這件事讓你產生不了興趣。那麼如何讓咱們對編程產生興趣呢?那就回到本文的主旨,經過個人內容分享,讓更多的朋友感覺到開源項目的魅力,由而對編程產生興趣。
教程至此,你應該也能快速搭建鬥地主項目了。編程是否是也特別有意思呢?快邀請你的小夥伴一塊兒加入到命令行鬥地主的項目和樂趣中吧~
『講解開源項目系列』——讓對開源項目感興趣的人再也不畏懼、讓開源項目的發起者再也不孤單。跟着咱們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯繫咱們、加入咱們,讓更多人愛上開源、貢獻開源~