本文適合有 Java 基礎知識的人羣,跟着本文可以使用和快速搭建命令行鬥地主項目。java
本文做者:HelloGitHub-秦人git
HelloGitHub 推出的《講解開源項目》系列,今天給你們帶來一款命令行鬥地主開源項目—— ratelgithub
項目源碼地址:github.com/ainilili/ra…編程
鬥地主我想你們都會玩吧,今天分享一個 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;
}
複製代碼
俗話說:興趣是學習的老師,當一我的對作一件事產生興趣時,慢慢地就開始喜歡這件事。編程也是同樣的。也許你以爲編程很枯燥,那是由於你以爲編程這件事讓你產生不了興趣。那麼如何讓咱們對編程產生興趣呢?那就回到本文的主旨,經過個人內容分享,讓更多的朋友感覺到開源項目的魅力,由而對編程產生興趣。
教程至此,你應該也能快速搭建鬥地主項目了。編程是否是也特別有意思呢?快邀請你的小夥伴一塊兒加入到命令行鬥地主的項目和樂趣中吧~
『講解開源項目系列』——讓對開源項目感興趣的人再也不畏懼、讓開源項目的發起者再也不孤單。跟着咱們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯繫咱們、加入咱們,讓更多人愛上開源、貢獻開源~