多人即时战斗游戏服务端系列[3]--日志类及Config类以及Excel生成类

这里说一些辅助类的设计及介绍.

依然上类图先:

首先是日志类和Config,这个库以及Config库取自暗黑3的民间模拟器mooege, 当时看了写的简短小巧就直接拿过来用了.

后来虽然发现一些问题,进行简单修改和优化之后,在项目中进行使用了.

首先是日志类,看了下类图也就没几行,简单的就是一些输出层级,带有可外部加载的扩展方法,ExtensionLogTarget,通过反射加载,然后进行一些扩展目标的输出.

修改部分的话,比较简单,原先日志是同步输出,这样会导致卡掉一些时间比较敏感的运算,这边采用了独立线程和队列模式,异步写出,问题就是当心写入数据太多,吃大量内存问题.

Config采用Nini库进行Ini文件读写,这个也没什么好说的.

这边比较简单的扩展就是,允许进行继承.

比如类似这样配置

[ConfigA]
Fps=60
MaxHp=100
[ConifgB]
Fps=30
BHP = 100

ConfigB继承于ConfigA,共享2个配置Fps,MaxHp,ConfigB多一个配置BHP,

但是ConfigB中的Fps值=30,用于控制多个模式和扩展,用起来还是比较方便的.

关于Excel使用,一般策划都比较喜欢用Excel,一般情况下都会采用Excel导出成XML后.手工匹配进行信息字段处理.

这里采用VS插件模式,直接把Excel考入程序库,类似这样

生成之类代码,类似这样

//Code Gen By FileGenLoaderDomain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=febbd3066b495fa3
//Start Run:
//CodeBase file:///D:/Windows/Microsoft.Net/assembly/GAC_MSIL/FileGenLoaderDomain/v4.0_1.0.0.0__febbd3066b495fa3/FileGenLoaderDomain.exe
//wszInputFilePath:E:\TankApp\TankApp\Config\得分难度.xlsx
//wszDefaultNamespace:TankApp.Config
//BasePath:D:\Windows\Microsoft.Net\assembly\GAC_MSIL\FileGenLoaderDomain\v4.0_1.0.0.0__febbd3066b495fa3

//Code Gen By ExcelCodeBuilder...

using System;
using CsvCodeGen;

namespace TankApp.Config
{

    [Serializable]
    public partial class 得分难度
    {
		[Config(Index = 0, IsKey = true)]
		public Double 分值 { get;set; }
		[Config(Index = 1)]
		public Double 得分难度分 { get;set; }
		[Config(Index = 2)]
		public String 说明 { get;set; }

public void Parse(Double 分值,Double 得分难度分,String 说明)
{
   this.分值 = 分值;
this.得分难度分 = 得分难度分;
this.说明 = 说明;

}

    }

    public partial class ConfigList : CsvCodeGen.CfsConfig
    {

             [ConfigAutoParse(File = "得分难度.xlsx", ParseType = "CsvCodeGen.ExcelParse")]
             public static Config<Double, 得分难度> 得分难度 = new Config<Double, 得分难度>();

    }
}

//User Plug:CsvCodeGen.dll Type:CsvCodeGen.ExcelCodeBuilder

VS支持中文字段,用起来还是比较爽的,如果不支持中文,我们需要一些翻译,或者要求他们提供英文表格.

比较麻烦的地方,改了字段之后,都要重新拷贝编译一遍.

时间: 2024-10-10 01:05:15

多人即时战斗游戏服务端系列[3]--日志类及Config类以及Excel生成类的相关文章

多人即时战斗游戏服务端系列--90坦克Online网络版详解

前言: 一直想写一个关于这个项目的系列,当前此游戏目前处于下架过程中(运营不善,虽然本人还是挺喜欢这个游戏的). 距离开发已经一年多了.趁着还没忘光,就在此整理并共享出来. 能写多少算多少..弃坑勿怪... 先上一发服务器架构图: 考虑到当时项目的考量,以及后面用户群的表现.其实这个架构有点复杂了.以至于有点浪费. 首先,我们进行几个名词解释. 1.数据差异引擎:是使用一套数据协议和对象监听,保持多个不同位置(客户端/服务端或服务/服务端)之间的多个数据对象一致,一个主节点多个副节点同步的引擎,

多人即时战斗游戏服务端系列[2]--90坦克Online游戏对象介绍以及渲染机制

先上类图,略大,点击此处放大: 1.先说下方接口 1.1 场景物品接口 ISceneObject : OpLog.IOpItem, IStackPoolObject 全部场景对象的基本接口,包含类型定义,通用渲染接口,所在场景,子对象树,尺寸,坐标等.. 1.2  游戏场景接口 IScene : ISceneObject 继承于基本场景接口,拥有加入对象,对象列表,获取相邻对象,等其它逻辑. 1.3  Buff基类 IBuff buff表现,拥有持续时间,加入/删除/移动/开火/渲染/被击中时触

为什么多数游戏服务端是用 C++ 来写

早年开发游戏必须用C++,这没得说,2000-2004年,java还没有nio,其他动态语言不抗重负,只能C/C++能开发出完整可用的游戏服务端.直到2005年,韩国的游戏很多都还是纯C++写服务端,金山之前也开发过很多纯粹C++的游戏服务端,后来大家都切了. 现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang.我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性

网页游戏服务端-人物移动广播优化

[本文转自网络http://janeky.iteye.com/blog/1614175] 这段时间在处理服务端人物移动广播遇到了问题,记录一下. 1.问题 现在的页游都朝着客户端的方向靠齐了,大地图,千人同屏.因此,也给页游的服务端开发带来了不少的挑战.假设一个场景地图是8000*8000大小,同时有1000人在.1秒钟内,每个玩家移动一次.按照最原始的做法,就是给同一个场景的用户广播消息.简单计算一下广播量:1000*1000=1000000的广播量,有点恐怖. 2.方案 优化的目标肯定是减少

开源unity3d、cocos2dx分布式游戏服务端引擎

一款开源的支持多人同时在线实时游戏的服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与 (Unity3D.OGRE.Cocos2d.HTML5,等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,将精力真正集中到游戏开 发层面上来,快速的打造各种网络游戏. Homepage http://www.kbengine.org Releases so

游戏服务端架构 介绍

游戏服务端架构 介绍 端游.手游服务端常用的架构是什么样的? http://www.zhihu.com/question/29779732 根据知乎问答文章整理而成. 作者:韦易笑 谢邀,手游页游和端游的服务端本质上没区别,区别的是游戏类型. 类型1:卡牌.跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: 登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当

非常强的一款开源的分布式游戏服务端引擎(kbengine)

一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏. (经常被问到承载上限,kbengine底层架构被设计为多进程分布式动态负载均衡方案,理论上只需要不断扩展硬

游戏服务端pomelo完整安装配置过程

游戏服务端pomelo安装配置 一.安装环境 debian 7.0 amd64 二.安装需要的组件 1.安装nodejs 注:debian下nodejs没有相应的apt包,所以无法用apt-get安装,只能通过nodejs的源码包安装, 这里有比较全的其他系统环境下安装nodejs的方式https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager a.安装所需的组件,python g++ #apt-get i

游戏服务端pomelo安装配置

一.安装环境 Linux Ubantu 二.安装需要的组件 1.安装nodejs 注:debian下nodejs没有相应的apt包,所以无法用apt-get安装,只能通过nodejs的源码包安装, 这里有比较全的其他系统环境下安装nodejs的方式https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager a.安装所需的组件,python g++ #apt-get install python g++ ma