Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luozero-world/arithcard
算数卡牌对战游戏,CS模式
https://github.com/luozero-world/arithcard
javafx netty
Last synced: 5 days ago
JSON representation
算数卡牌对战游戏,CS模式
- Host: GitHub
- URL: https://github.com/luozero-world/arithcard
- Owner: LuoZero-World
- Created: 2023-10-11T12:41:53.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2023-12-14T13:19:46.000Z (11 months ago)
- Last Synced: 2023-12-15T12:43:31.875Z (11 months ago)
- Topics: javafx, netty
- Language: Java
- Homepage:
- Size: 1.22 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ArithCard
### 项目背景
大三协议设计原理,课程设计作业
Netty+JavaFX
### 项目介绍
> 自定义了一套卡牌对战规则,规则如下:
- **牌型**
数字牌:`1`、`2`、`3`…`13`,每张牌各**六张**运算牌:`+`**八张**,`-`**四张**;`*`**八张**,`/`、`%`**两张**;`&`、`|`、`^`**三张**;`<<`、`>>`**两张**
- **玩法**
凑24点:将手牌分为数字牌(1-13),和运算牌,利用现有牌进行运算获得新的点数(超过24自动取余),当得到24点时便可以**攻击/防御。**
pvp:回合制游戏,每轮结束后对玩家状态进行运算,决定玩家扣除的血量;另外设置伤害制造器,固定回合对玩家造成部分伤害;直至一方玩家血量为0,游戏结束。> 自定义协议
![image](https://github.com/LuoZero-World/ArithCard/assets/99077678/ef2f01ea-261a-4120-91c4-cbbe9332d1ff)
还有勉勉强强的卡牌UI,在`src/main/img`路径下就可以看到
### 部署
**服务端**
先把服务端拉起来:启动类路径:`com.llq.server.CardServer`
默认服务器IP:127.0.0.1 端口18000
然后拉客户端
**客户端**
启动类路径:`com.llq.client.CardClientStartUp`
目前**只能登陆**,不能注册,其中账号信息以`Map`形式存储于内存中,其在项目中的位置`com.llq.server.service.UserService`
客户端登录,进入游戏大厅:可创建对局,或加入现有对局(用JavaFX写的界面就这么样了,美化界面太搞了...orz)
### 亮点
以下功能均为本人自认为还不错的实现,学生视角~
- **断线保护**当有玩家断线时,服务器识别并为之分配一个机器人线程接管断线玩家继续对局;若双方都断线则游戏结束
- **多线程**
UI线程和Netty监听线程隔离管理
- **网络间传递任务**
通常网络间的任务传递使用`Runnable`实现,但我在项目中采用`获取-反射执行`的方式,每个消息都有`executeIt`方法,里面表示获取该消息后应该执行的操作
具体细节见`com.llq.message.MessageService`中的`execMessage方法`- **消息有序**
虽然传输层使用了TCP,但因为Netty多线程的原因,应用层发送的消息仍然可能乱序
所以我直接将需要发送的消息收集为`List`,然后一起发送- **策略模式**
序列化有两种策略可以选择:Java原生序列化和Json序列化(Gson)
- **单例模式**
`enum`实现单例
### 未来计划
1. 实时显示剩余牌数量
2. 加入后端,springboot+mysql+MybatisPlus
3. 完善出牌机器人的策略
4. 观战功能### 联系
QQ:1276602269