坑爹快速游戏开发系列-1

今天是双11,这个想不吐槽都不行,商家不会卖错。只有买家会买错。

来说说正题,自从前年年底加入游戏公司后,也算半个游戏开发者了,为何说半个,个人只负责后端开发没有前段效果,所以算半个。这里呢,只是忽然觉得许久没有整理思绪了。借CSDN整理下,(PS:其实是起太早没事干,本系列爱写则写,也许这辈子没有所谓的-2,也就是这名字坑爹游戏开发系列的来头。也许。。这篇都懒得写完,谁知道呢。。)

公司是个Flash页游开发,不算什么正儿八经的大公司,没有太多的条条框框,所以所有的玩意都可以随心所欲的开发,只要你能说服上级领导。比如想用什么新技术,什么新想法,只要你敢出方案,并且准备好一套演示。接着你就可以努力说服上级。接着就是你的showtime,不过,当没有人可以监督你时,并且你对项目的控制力度不够的话,多半要把项目进度坑掉。

前面这段估计看着比较无聊,写着也比较扯蛋,来切入正题吧。

先介绍下这边自主开发的服务端引擎特性:

1.C#开发,支持TCP/HTTP协议(自主应用层协议)

2.OOP思想,(所有对象都得跟着这个走)

3.自主同步协议

4.延迟保存

5.异步数据同步 

结构类似:

SC<->SM->->M->C->V

|                                              |

--------------------<------------------

服务器控制器-》控制模型=》同步到=》客户端模型

客户端控制器-》监听模型变化-》控制UI显示

那么前段命令如何操作?

V《-》SC

客户端界面-》发送命令到服务端控制器(直接发送?)

对的,类似一个单向通道的异步模型。

SC的返回,仅限于当前命令的状态。(比如UI loading,等待之类的控制)



简单的描述,就是服务端 建立一个根对象,比如一个东西叫场景,然后下面有个List<玩家> 代码类似这样:( 现敲伪代码,仅为示例)

public class GameWorld
{
     public List<Player> Players{get;set;}
}

服务端初始化后执行:

var gw = new GameWorld();//新建一个游戏世界
MyEngine.SetMaster(gw);//设置当前对象可同步
Host.OpenChannel(Channel.Tcp);//开启同步通道

客户端,建立一个相同的类,(目前客户端用Flash实现,我们通过一个同步工具,自动生成Flash类),不会写flash,这边也拿C# 伪代码示例:

        

var gw=new GameWorld();//new一个根对象
var channel= Remote.OpenChannel(Channel.Tcp);//设置同步通道
channel.SetCopy(gw);//同步当前数据
 ( 这尼玛有个蛋用,楼下砸鸡蛋了。。。淡定淡定。。咱继续)

       首先我们有了一个场景,然后我们有了一个玩家列表,然后我们就简单设计个小场景:

       服务端,每10秒钟,增加一个Player对象,Player 会定义一个Name,并且会说一句话。

public class Player
{
    public string Name{get;set;}
    public string Message{get;set;}
}

 然后在服务端建立一个Timer,里面Loop写着

       

int _index = 0;
public void Loop()
{
    _index++;
   var player=new Player(){
   Name="玩家" + _index,
   Messange="说了话"+ _index
   };
   gw.Players.Add(player);
   player.Message+="New";
}

      客户端则发现玩家增加时,打印一行:玩家xxx加入了游戏,消息xxxx!;

      发现玩家修改了消息时,打印一行:玩家xxx修改了消息xxxx;

      

//List自定义继承过,会发出 ADD,REMOVE事件 (sender = 增加的子对象)
gw.Player.PropertyChaged+=(sender,e){
   if(e=='ADD')
   {
      Console.WriteLine("玩家{0}进入了游戏,消息{1}",(sender as Player).Name,(sender as Player).Message);
      (sender as Plalyer).PropertyChaged+=(senderx,ex){
             if(ex.Name=="Message")
             {
                   Console.WriteLine("玩家{0}修改了消息{0}",(senderx as Player).Message);
             }
        }
    }
    else
            Console.WriteLine("玩家{0}离开了游戏,消息{1}",(sender as Player).Name,(sender as Player).Message);

};

     有点类似MVVM的味道么?


优点:

1.没有了一圈xx命令的定义和xxx消息的定义,没有所谓的send和rev。

2.完整的抽取了应用业务层

3.非常简单的框架,无侵入,没有太多的限制。

4.理论上可以拿单机开发,再改成C/S模式非常简单。

5.开发迅速

缺点:

1.采用通用协议,可能流量较大

2.必须提前约定对象结构,不然修改起来很蛋疼

3.刚开始可能不是很习惯


最后:

居然写完了,不知道有没人看。欢迎拍砖。

也许。。会将我们的线上游戏作为一个例子进行设计讲解。比较简单的消息。

也许。。就没有下文了。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值