当前位置: 首页 > news >正文

玉林市网站开发公司电话个人网站 费用

玉林市网站开发公司电话,个人网站 费用,dw软件怎么用怎么做网页,点击图片预览 wordpress导航#xff1a;从零开始手写mmo游戏从框架到爆炸#xff08;零#xff09;—— 导航-CSDN博客 到现在#xff0c;我们切实需要一个客户端来完整的进行英雄选择#xff0c;选择地图#xff0c;打怪等等功能。所以我们需要把之前极为简陋的客户端改造一下。 首先… 导航从零开始手写mmo游戏从框架到爆炸零—— 导航-CSDN博客          到现在我们切实需要一个客户端来完整的进行英雄选择选择地图打怪等等功能。所以我们需要把之前极为简陋的客户端改造一下。 首先再common模块中增加打印颜色的工具类ConsoleColors package com.loveprogrammer.utils;/**** version 1.0.0* description:* author: eric* date: 2024-02-18 09:41**/ public class ConsoleColors {// Resetpublic static final String RESET \033[0m; // Text Reset// Regular Colorspublic static final String BLACK \033[0;30m; // BLACKpublic static final String RED \033[0;31m; // REDpublic static final String GREEN \033[0;32m; // GREENpublic static final String YELLOW \033[0;33m; // YELLOWpublic static final String BLUE \033[0;34m; // BLUEpublic static final String PURPLE \033[0;35m; // PURPLEpublic static final String CYAN \033[0;36m; // CYANpublic static final String WHITE \033[0;37m; // WHITE// Boldpublic static final String BLACK_BOLD \033[1;30m; // BLACKpublic static final String RED_BOLD \033[1;31m; // REDpublic static final String GREEN_BOLD \033[1;32m; // GREENpublic static final String YELLOW_BOLD \033[1;33m; // YELLOWpublic static final String BLUE_BOLD \033[1;34m; // BLUEpublic static final String PURPLE_BOLD \033[1;35m; // PURPLEpublic static final String CYAN_BOLD \033[1;36m; // CYANpublic static final String WHITE_BOLD \033[1;37m; // WHITE// Underlinepublic static final String BLACK_UNDERLINED \033[4;30m; // BLACKpublic static final String RED_UNDERLINED \033[4;31m; // REDpublic static final String GREEN_UNDERLINED \033[4;32m; // GREENpublic static final String YELLOW_UNDERLINED \033[4;33m; // YELLOWpublic static final String BLUE_UNDERLINED \033[4;34m; // BLUEpublic static final String PURPLE_UNDERLINED \033[4;35m; // PURPLEpublic static final String CYAN_UNDERLINED \033[4;36m; // CYANpublic static final String WHITE_UNDERLINED \033[4;37m; // WHITE// Backgroundpublic static final String BLACK_BACKGROUND \033[40m; // BLACKpublic static final String RED_BACKGROUND \033[41m; // REDpublic static final String GREEN_BACKGROUND \033[42m; // GREENpublic static final String YELLOW_BACKGROUND \033[43m; // YELLOWpublic static final String BLUE_BACKGROUND \033[44m; // BLUEpublic static final String PURPLE_BACKGROUND \033[45m; // PURPLEpublic static final String CYAN_BACKGROUND \033[46m; // CYANpublic static final String WHITE_BACKGROUND \033[47m; // WHITE// High Intensitypublic static final String BLACK_BRIGHT \033[0;90m; // BLACKpublic static final String RED_BRIGHT \033[0;91m; // REDpublic static final String GREEN_BRIGHT \033[0;92m; // GREENpublic static final String YELLOW_BRIGHT \033[0;93m; // YELLOWpublic static final String BLUE_BRIGHT \033[0;94m; // BLUEpublic static final String PURPLE_BRIGHT \033[0;95m; // PURPLEpublic static final String CYAN_BRIGHT \033[0;96m; // CYANpublic static final String WHITE_BRIGHT \033[0;97m; // WHITE// Bold High Intensitypublic static final String BLACK_BOLD_BRIGHT \033[1;90m; // BLACKpublic static final String RED_BOLD_BRIGHT \033[1;91m; // REDpublic static final String GREEN_BOLD_BRIGHT \033[1;92m; // GREENpublic static final String YELLOW_BOLD_BRIGHT \033[1;93m;// YELLOWpublic static final String BLUE_BOLD_BRIGHT \033[1;94m; // BLUEpublic static final String PURPLE_BOLD_BRIGHT \033[1;95m;// PURPLEpublic static final String CYAN_BOLD_BRIGHT \033[1;96m; // CYANpublic static final String WHITE_BOLD_BRIGHT \033[1;97m; // WHITE// High Intensity backgroundspublic static final String BLACK_BACKGROUND_BRIGHT \033[0;100m;// BLACKpublic static final String RED_BACKGROUND_BRIGHT \033[0;101m;// REDpublic static final String GREEN_BACKGROUND_BRIGHT \033[0;102m;// GREENpublic static final String YELLOW_BACKGROUND_BRIGHT \033[0;103m;// YELLOWpublic static final String BLUE_BACKGROUND_BRIGHT \033[0;104m;// BLUEpublic static final String PURPLE_BACKGROUND_BRIGHT \033[0;105m; // PURPLEpublic static final String CYAN_BACKGROUND_BRIGHT \033[0;106m; // CYANpublic static final String WHITE_BACKGROUND_BRIGHT \033[0;107m; // WHITEpublic static void main(String[] args) {System.out.println(ConsoleColors.RED_BOLD_BRIGHT 肩甲);System.out.println(ConsoleColors.RED_BOLD 肩甲);} }增加统一打印工具类ConsolePrint package com.loveprogrammer.console;import com.alibaba.fastjson2.util.DateUtils;import java.util.Date;/*** version 1.0.0* description: 输出类* author: eric* date: 2024-02-18 16:55**/ public class ConsolePrint {private static final String space \t\t\t\t\t\t\t\t;public static void publishMessage(String content,int position) {String format DateUtils.format(new Date(),DateUtils.DateTimeFormatPattern.DATE_TIME_FORMAT_19_DASH.pattern);String threadName Thread.currentThread().getName();if(position 0) {System.out.print(content);}else if(position 1) {System.out.println(content);}else {System.out.println(space content);}}public static void publishMessage(String content) {System.out.println(content);}public static void publishMessagePrint(String content,String placeholder) {System.out.print(content placeholder);} }修改command模块的结构把tag根据不同的topic拆分到不同的类中方便维护。 之前的客户端就是简单的nettyclient但是现在客户端也要解析topic和tag所以我们根据server来改造客户端。大致结构如下 客户端的监听类- NetworkClientListener package com.loveprogrammer.network;import com.alibaba.fastjson2.JSON; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.loveprogrammer.command.anotation.TagListener; import com.loveprogrammer.command.client.ClientMenuTag; import com.loveprogrammer.command.client.ClientTopic; import com.loveprogrammer.handler.HandlerFactory; import com.loveprogrammer.listener.INetworkEventListener; import com.loveprogrammer.pojo.StringMessage; import io.netty.channel.ChannelHandlerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.lang.reflect.Method; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class NetworkClientListener implements INetworkEventListener {protected static final Logger logger LoggerFactory.getLogger(NetworkClientListener.class);private NetworkClientListener(){}private static final NetworkClientListener instance new NetworkClientListener();public static NetworkClientListener getInstance(){return instance;}private final ThreadPoolExecutor executor new ThreadPoolExecutor(2,2,0L,TimeUnit.SECONDS,new LinkedBlockingQueue(1024),new ThreadFactoryBuilder().setNameFormat(worker-pool-%d).build(),new ThreadPoolExecutor.CallerRunsPolicy());/**** 同客户端转发* param ctx* param topic* param tag* param msg*/public void forward(ChannelHandlerContext ctx, int topic, int tag, String msg) {StringMessage data new StringMessage();data.setTopicId(topic);data.setTagId(tag);data.setBody(msg);channelRead(ctx,data);}Overridepublic void onConnected(ChannelHandlerContext ctx) {}Overridepublic void onDisconnected(ChannelHandlerContext ctx) {}Overridepublic void onExceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {}Overridepublic void channelRead(ChannelHandlerContext ctx, StringMessage msg) {int topicId msg.getTopicId();int tagId msg.getTagId();Object handler HandlerFactory.handlerMap.get(topicId);if (handler null) {logger.warn(未获取到指定的消息监听对象topicId {}, topicId);return;}String bodyValue msg.getBody();executor.execute(() - {try {Class? handlerClass handler.getClass();// 找到tag 遍历methodsMethod[] methods handlerClass.getMethods();for (Method method : methods) {TagListener mqListener method.getAnnotation(TagListener.class);if (tagId mqListener.tag()) {Class? aClass mqListener.messageClass();String name aClass.getName();// 先处理基本类型if (java.lang.String.equals(name)) {method.invoke(handler, ctx, bodyValue);} else if (java.lang.Long.equals(name)) {Long object Long.parseLong(bodyValue);method.invoke(handler, ctx, object);} else if (java.lang.Integer.equals(name)) {Integer object Integer.parseInt(bodyValue);method.invoke(handler, ctx, object);} else if (java.lang.Short.equals(name)) {Short object Short.parseShort(bodyValue);method.invoke(handler, ctx, object);} else if (java.lang.Byte.equals(name)) {Byte object Byte.parseByte(bodyValue);method.invoke(handler, ctx, object);} else if (java.lang.Double.equals(name)) {Double object Double.parseDouble(bodyValue);method.invoke(handler, ctx, object);} else if (java.lang.Float.equals(name)) {Float object Float.parseFloat(bodyValue);method.invoke(handler, ctx, object);}// 转对象类型else {Object object JSON.parseObject(bodyValue, aClass);method.invoke(handler, ctx, object);}break;}}} catch (Exception e) {logger.error(发生异常, e);// 转发到首页forward(ctx, ClientTopic.TOPIC_MENU, ClientMenuTag.TAG_MENU_PORTAL, msg.getBody());}});} }客户端菜单监听- MenuHandler package com.loveprogrammer.handler.support;import com.loveprogrammer.command.IHandler; import com.loveprogrammer.command.anotation.TagListener; import com.loveprogrammer.command.anotation.TopicListener; import com.loveprogrammer.command.client.ClientTopic; import com.loveprogrammer.command.client.ClientMenuTag; import com.loveprogrammer.console.ConsolePrint; import com.loveprogrammer.network.NetworkClientListener; import com.loveprogrammer.utils.ScannerInput; import io.netty.channel.ChannelHandlerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** ClassName MenuHandler* Description TODO* Author admin* Date 2024/2/18 17:37* Version 1.0*/ TopicListener(topic ClientTopic.TOPIC_MENU) public class MenuHandler implements IHandler {public static final Logger log LoggerFactory.getLogger(MenuHandler.class);TagListener(tag ClientMenuTag.TAG_MENU_PORTAL,messageClass String.class)public void portalMenu(ChannelHandlerContext ctx, String msg){// 展示首页数据ConsolePrint.publishMessage(请选择您要进行的操作);ConsolePrint.publishMessage(【1.打怪】 【2.装备】 【3.战兽】);ConsolePrint.publishMessage(【4.冒险者工会】 【5.副本】 【6.工会】 );ConsolePrint.publishMessage(【8.配置】 【9.退出】);ConsolePrint.publishMessage(请选择);int choose ScannerInput.inputInt(1, 9, 9);while (choose ! 9) {switch (choose) {case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:default:ConsolePrint.publishMessage(暂未开放敬请期待, 1);break;}ConsolePrint.publishMessage(请选择您要进行的操作);ConsolePrint.publishMessage(【1.打怪】 【2.装备】 【3.战兽】);ConsolePrint.publishMessage(【4.冒险者工会】 【5.副本】 【6.工会】 );ConsolePrint.publishMessage(【8.配置】 【9.退出】);ConsolePrint.publishMessage(请选择);choose ScannerInput.inputInt(1, 9, 9);}// 这里不退出而是返回首页做一个重定向NetworkClientListener.getInstance().forward(ctx,ClientTopic.TOPIC_MENU, ClientMenuTag.TAG_MENU_PORTAL,msg);} }剩余的改动这里就不一一赘述了大家可以根据代码来看下调整的地方。本章对结构调整的有点大会单独新增一个tag方便大家对比。 客户端运行后效果如下 10:06:15.602 [nioEventLoopGroup-2-1] [INFO ] com.loveprogrammer.handler.HandlerFactory:32 --- 初始化消息监听器成功 com.loveprogrammer.handler.support.MenuHandler 请选择您要进行的操作 【1.打怪】 【2.装备】 【3.战兽】 【4.冒险者工会】 【5.副本】 【6.工会】 【8.配置】 【9.退出】 请选择 1 暂未开放敬请期待 请选择您要进行的操作 【1.打怪】 【2.装备】 【3.战兽】 【4.冒险者工会】 【5.副本】 【6.工会】 【8.配置】 【9.退出】 请选择 全部源码详见 gitee : eternity-online: 多人在线mmo游戏 - Gitee.com 分支step-09 请各位帅哥靓女帮忙去gitee上点个星星谢谢
http://www.pierceye.com/news/899275/

相关文章:

  • 我想自己在网站上发文章 怎样做免费观看高清正能量直播下载
  • 做网站万网长春建站模板展示
  • 广州专业建网站公司福州网站制作
  • 西安烽盈网站建设郑州营销网站托管
  • 诸几建设银行网站怎么维护好网站
  • 深圳市国外网站建设简单html5网页设计
  • 网站制作公司西南城乡建设部网站首页
  • 网站名和域名能一样吗企业网站建设硬件
  • 德州做网站公司怎么开网店淘宝
  • 苏州做网站优化的电商定制开发
  • 广西庆海建设发展有限公司网站昆山有做网站的公司吗
  • 前端课程网站wordpress 微博登陆
  • asp怎么做网站适配开发公司安置房项目工程推进大会
  • 学做网站可以赚钱吗怎么批量修改wordpress文章内容
  • 写作网站vir上海博大园林建设发展有限公司网站
  • wordpress video gallery网站代码优化怎么做
  • 厦门网站设计品牌企业互联网门户网站建设
  • 做名片模板网站中文响应式网站
  • 用tornado做网站石家庄 外贸网站建设公司
  • 档案网站建设网页wordpress keyshot
  • 鞍山制作网站哪家好建设银行员工网站
  • 手机怎么提升网站流量品牌型网站成功案例图片
  • 网站视频主持人制作网站开发 质量管理
  • 网站的外链建设计划石家庄市城乡建设部网站
  • 电子商务网站规划与建设论文电子商务营销方法
  • 宁波做网站费用电子商城开发网站开发
  • 太原市住房和城乡建设部网站免费的logo在线设计
  • 做it的在哪个网站找工作wordpress 幻燈片 插件
  • 湘潭做网站 i磐石网络博学网站建设公司
  • 揭阳市建设发展总公司网站自己做的视频网站如何赚钱