斗地主命令版本php,命令行版的斗地主你玩过没?

本文适合有 Java 基础知识的人群,跟着本文可使用和快速搭建命令行斗地主项目。

792f365a58af768e12ea3b8597430aaf.png

本文作者:HelloGitHub-秦人

HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款命令行斗地主开源项目—— ratel

一、项目简介

斗地主我想大家都会玩吧,今天分享一个 Java 命令行斗地主的开源项目!项目是基于 Netty 实现,Netty 是一个高性能、异步事件驱动的 NIO 框架。下面就让我们一起来把这个项目跑起来,然后看看它的代码。

二、项目结构

项目目录结构如下图:

fb72b1072353d45a15afeb9c18faa07d.png

目录说明:

客户端:landlords-client

event:客户端事件包

handle:客户端事件处理包

SimpleClient:客户端启动程序

基础包:landlords-common

channel:管道工具包

entity:实体类目录

enums:枚举类型目录

exception:异常处理目录

handler:业务处理,包含消息转码工具类

helper:工具类包,包括时间工具类等

print:打印工具包目录,包括格式化输出的工具类

robot:机器人出牌目录,人机对战时使用

transfer:类型转换工具包目录

utils:基础工具类,包括集合、正则等工具类

服务端:landlords-server

event:服务端端事件包

handler:客户端事件处理包

robot:机器人出牌目录,人机对战时使用

timer:定时任务目录,计算房间存活时间。

SimpleServer:服务端启动程序

服务器配置 serverlist.json:默认配置

三、实战操作

3.1 运行项目

构建项目

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

复制代码

客户端运行效果

cd6266e024afb2c7c7443d0c95bdc389.png

服务端运行效果

3d4598346770ad598fcf79c9728f8526.png

3.2 开始斗地主

客户端、服务端都已启动,我们就可以开始娱乐一下了。

进入游戏有三个菜单:

真人模式(PvP):需要三个人加入房间,才可以开始。

人机模式(PvE):一个人加入,其他两个人是机器。

设置(Setting):可以设置卡牌的显示样式。

运行效果如下:

86211bb70bfaeb32328a3e2b51174a50.gif

注意

小王是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|

复制代码

四、工作原理

4.1 Netty 工作原理

01db64bb87ce7e5d8516dfe001f1d709.png

以server为例:

初始化创建 2 个 EventLoopGroup,其中 parentGroup 用于 Accetpt 连接建立事件并分发请求。childGroup 用于处理 I/O 读写事件和业务逻辑。

基于 ServerBootstrap (服务端启动引导类),配置 EventLoopGroup、Channel 类型,连接参数、配置入站、出站事件 handler

绑定端口,开始工作

4.2 命令行运行

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]);

}

}

复制代码

4.3 斗地主规则

斗地主的规则文件是:landlords-common/helper/PorkerHelper.java

distributePoker 方法是构建发牌的集合。扑克牌共 54 张,分成 3 堆 17 张和一堆 3 张。

public static List> distributePoker(){

Collections.shuffle(basePokers);

List> pokersList = new ArrayList>();

List pokers1 = new ArrayList<>(17);

pokers1.addAll(basePokers.subList(0, 17));

List pokers2 = new ArrayList<>(17);

pokers2.addAll(basePokers.subList(17, 34));

List pokers3 = new ArrayList<>(17);

pokers3.addAll(basePokers.subList(34, 51));

List pokers4 = new ArrayList<>(3);

pokers4.addAll(basePokers.subList(51, 54));

pokersList.add(pokers1);

pokersList.add(pokers2);

pokersList.add(pokers3);

pokersList.add(pokers4);

for(List pokers: pokersList) {

sortPoker(pokers);

}

return pokersList;

}

复制代码

五、最后

俗话说:兴趣是学习的老师,当一个人对做一件事产生兴趣时,慢慢地就开始喜欢这件事。编程也是一样的。也许你觉得编程很枯燥,那是因为你觉得编程这件事让你产生不了兴趣。那么如何让我们对编程产生兴趣呢?那就回到本文的主旨,通过我的内容分享,让更多的朋友感受到开源项目的魅力,由而对编程产生兴趣。

教程至此,你应该也能快速搭建斗地主项目了。编程是不是也特别有意思呢?快邀请你的小伙伴一起加入到命令行斗地主的项目和乐趣中吧~

六、参考资料

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值