# luoke **Repository Path**: Agoni_yff/luoke ## Basic Information - **Project Name**: luoke - **Description**: 基于java网络编程的控制台多p战斗小游戏 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-10-28 - **Last Updated**: 2024-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目大概思路如下: 1.项目分为两个模块,一个是服务端模块,一个是客户端模块 2.客户端模块主要负责 - 连接服务端,发送数据,接收数据 - 处理来自服务端的数据 - 对于控制台展示信息的操作 3.服务端模块主要负责 - 接收来自客户端的数据并处理 - 管理多个用户线程 - 负责业务逻辑处理和数据存储(主要) # 玩家对战思路如下: 1.通过选项进入玩家对战模式(PvP) 2.进入之后可以看见当前场景中在线所有玩家的名字 3.玩家之间可以通过输入名字来发起对战,待对方同意之后可以开始对战 4.对战开始时,屏幕显示你所有的宠物,然后你选择一个进行战斗(这里如果另外一个用户没有选择宠物,则线程wait) 5.对战时,控制台显示战斗信息: - 我方宠物名字,我方宠物血量,我方宠物mp值,我方宠物的技能列表 - 敌方宠物名字,敌方宠物血量,敌方宠物mp值 6,控制台输入对应的技能名字,进行技能释放 (先把对应宠物的技能返回给服务端,然后服务端进行计算后返回给客户端,展示在控制台上) - 宠物释放技能的同时,需要和宠物属性进行一个关联,经过计算之后的值扣减 7.当宠物死亡后,控制台通知玩家输赢,游戏结束 / 或者这里可以改成 -- 当出战宠物死亡时,另一名玩家wait -- 待死亡的一方把宠物切出来(当前宠物死亡后展示你背包中没有死亡的宠物,然后从控制台输入宠物名字切出宠物) -- 当背包中所有的宠物都死亡时,游戏结束,败北 -- 胜利的一方,控制台展示游戏胜利 8.在战斗的过程中,玩家还可以切出背包,其中,背包中有回蓝回血的道具可以使用(这里的道具是玩家通过游戏币购买的、或者通过迷宫打怪掉落的) # 总体设计思路 客户端和服务端分工: 客户端负责发起对战请求、选择宠物和技能、显示战斗信息和状态等。 服务端处理战斗逻辑,包括技能和道具效果、玩家状态更新、战斗结果等,确保战斗数据同步。 核心模块: 在线玩家管理:服务端负责记录当前在线的玩家以及玩家的在线状态。 对战请求:客户端发起 PvP 请求,服务端检查请求是否被接受。双方都进入等待状态,直到双方均同意。 宠物选择:进入对战后,客户端选择宠物出战,并等待对手的宠物选择。 战斗回合:玩家交替进行技能施放,服务端计算技能效果并返回双方状态。 道具使用:玩家可以在战斗中使用道具(如回复道具等),并更新状态。 游戏结束判定:检测宠物是否死亡,若玩家没有可用宠物则判定为失败。 # 回合制游戏的设计逻辑 -- 可以添加战斗表,使战斗的数据持久化,简化代码,每场战斗都有一个唯一标识 1.回合管理:需要有一个机制来管理当前轮到哪位玩家的回合 -- 这里使用了FutureManager类在这里作为每个玩家的 CompletableFuture 管理器,负责记录每个玩家的等待状态并在服务器完成回合后通知相应的玩家。 2.玩家输入与动作执行:玩家通过控制台输入指令(如释放技能),将动作发送到服务器。 3.回合的异步处理:服务器接收玩家动作后,完成当前回合,通知下一个玩家可以行动。 4.异步等待对手回合结束:玩家在每个回合结束后进入等待状态,直到接收到对手的动作结果或服务器的通知。 思路: - 战斗开始后,首先显示的是背包中所有的宠物,双方玩家选择首次出战的宠物 - 服务器进行比较宠物的敏捷度之后确定先手回合。 - ........ # 部署 #### 1.使用java1.8分别运行服务端和客户端 ###### ps 如果启动失败,请使用 java1.8版本。并将 idea 的编译器切换为java1.8,项目和模块都指定为 java1.8 #### 2.数据库部署: ###### 1.使用以下帮助文档完成mysql8的安装 -- https://www.cnblogs.com/tusens/p/18162502 ###### 2.连接数据库并创建名为"luoke"的数据库 ![img.png](img.png) ###### 3.在该数据库下执行luoke.sql相关脚本文件 ![img_1.png](img_1.png) #### 3.直接使用下面这两个账号进行登录测试 -- 账号yff 密码123 -- 账号qaz 密码123 ![img.png](img/img.png)