作者:Yahle曾用网名:Dogvane原载:http://www.cnblogs.com/yahle版权所有。转载时必须以链接形式注明作者和原始出处。 1 事件系统事件系统是整个WebGame系统里一个核心的组成部分,我们用它来控制的进程,让游戏世界里能够24小时运转。1.1 事件的概念事件是指游戏里玩家的某个(系列)活动,它可以分为瞬时活动和非瞬时活动。瞬时活动顾名思义就是在玩家发出指令的瞬间就能完成的活动。像RPG游戏里,玩家从NPC里购买一瓶药水,在玩家发出这个指令后,玩家的金钱减少,并获得药水,这一切都在玩家发出指令后瞬间完成(当然实际逻辑上处理还需要几个ms处理时间)。而非瞬时活动则是在玩家发出某个指令后一段事件才会被执行。例如RPG里玩家鼠标点击地图上某个地方,游戏角色则会自动行走到刚才点击处。这个移动过程就是一个非瞬时过程,它有了一个移动的过程,这个过程需要消耗一定的时间(玩家能感知的事件)非瞬时系列活动是指一位或者多位玩家通过一系列的瞬时\非瞬时活动完成一个动作(功能)。例如wow里面的拍卖场,有1位玩家提供道具,同服务器里的其他玩家对该道具进行竞拍。在WebGame里,玩家的很多操作其实是非瞬时部分事件是村庄资源减少(前提投资),非瞬时事件是建筑物建设,这个动作(同能)的结果是建筑物等级上升。又比如《Travian》里的攻击,瞬时事件是当前村庄的士兵减少(派出部队),非瞬时事件是减少的士兵移动到需要攻击的村庄(行军过程),动作结束是,两个村庄的部队开打了(战斗)。1.2 触发器(事件队列)前面说了瞬时事件和非瞬时事件的概念,当WebGame在24小时运转的时候,系统会产生大量的非瞬时事件,这些非瞬时事件不会在玩家点击页面时执行,而是需要等一段时间后才会执行,因此在游戏里把这些非瞬时事件拿出来,按事件的执行时间进行排序,组成一个事件队列。再通过一个触发器,在事件设定的执行时间到达的那时执行相对应的事件。这里面就涉及到两个内容:• 非瞬时的事件队列• 事件触发器1.2.1 事件队列数据库除了用于存储外,其查询功能也非常强大,直接拿来做事件队列很合适。事件队列里通常保存事件涉及的对象(村庄),结束时间、事件类型以及事件相关参数等。下表为我们系统里使用的事件表: ID int VillageCode int TargetVillageCode int Type int EndTime DateTime EventObject ntext 保存时将这些对象做xml序列化保存到EventObject字段里。当然如果为了效率还可以存储二进制序列化后的对象,这样在序列化以及反序列化时能节省大部分时间。1.2.2 触发器Asp.netAsp.net的处理在触发器上的处理就比较简单了。在服务器程序启动的时候,就执行一个线程,定时(1s)从数据库里取结束时间<当前事件的事件进行处理。 1 /// <summary> 2 /// 事件处理线程 3 /// 每间隔1s处理一次到时间了的事件 4 /// </summary> 5 static void EventThread() 6 { 7 DateTime lastTime = DateTime.Now; 8 while (Run) 9 {10 try11 {12 Event.SystemEvent.DoEvent(lastTime);13 }14 catch (Exception ex)15 {16 Common.Logging.Error(ex.ToString());17 }1819 long def = DateTime.Now.Ticks - lastTime.Ticks;20 lastTime = DateTime.Now;2122 if (def < 10000000)23 {24 // 线程休息,并等待下一次时间间隔25 int ms = (int)(10000000 - def) / 10000;26 if (ms > 0)27 System.Threading.Thread.Sleep(ms);28 }29 }30 }31 1 /// <summary> 2 /// 系统事件 3 /// 主要作用是执行处理事件的过程 4 /// </summary> 5 public class SystemEvent 6 { 7 public static void DoEvent(DateTime time) 8 { 9 List<Event> evs = Event.GetEvents(time);10 foreach (Event e in evs)11 {12 try13 {14 IEvent ie = e.Object;15 if (ie != null)16 {17 ie.Parent = e;18 ie.DoEvent();19 }20 }21 catch (Exception ex)22 {23 Common.Logging.Error(ex.ToString(), e.EventObject);24 }25 try26 {27 e.Delete(); // 从数据库里删除信息28 }29 catch (Exception ex)30 {31 Common.Logging.Error(ex.ToString());32 }33 }34 }35 }36 phpPHP没用过,不过好像不能在PHP页面里无法创建线程,用纯PHP服务端来实现触发器估计有点难度。但是可以做成一个PHP的应用程序,由应用程序来实现触发器。1.3 游戏资源的24小时自动增长游戏资源的24小时自动增长,这是一个有趣的话题,很多刚开始设计WebGame的朋友都会在这个问题上卡一下。每个人对于如何实现这个功能都有自己的独到见解,我在这里就不能给出一个唯一的答案,这里给的解决方案只是自己正在做的WebGame用到的方案。首先,我们否定了每个时间间隔(10分钟)就执行更新村庄资源的设计,这即不准确,同时也很消耗服务器资源。所以,我们的系统就只有在用户执行事件(瞬时的和非瞬时)的时候才将新的资源信息写入数据库。平时显示资源的时候用 (当前时间 - 上一次更新事件)*资源每小时产量+上一次更新产量公式计算出当前资源并显示在页面上。也就是说,每次页面更新时重新计算资源,但只只要用户没有做任何修改资源的动作(事件),就不会把重新计算后的资源写回数据库。《Travian》在前台界面上看到资源不断的上涨其实是利用JavaScript实现的小效果。
作者:Yahle曾用网名:Dogvane原载:http://www.cnblogs.com/yahle版权所有。转载时必须以链接形式注明作者和原始出处。 1 事件系统事件系统是整个WebGame系统里一个核心的组成部分,我们用它来控制的进程,让游戏世界里能够24小时运转。1.1 事件的概念事件是指游戏里玩家的某个(系列)活动,它可以分为瞬时活动和非瞬时活动。瞬时活动顾名思义就是在玩家发出指令的瞬间就能完成的活动。像RPG游戏里,玩家从NPC里购买一瓶药水,在玩家发出这个指令后,玩家的金钱减少,并获得药水,这一切都在玩家发出指令后瞬间完成(当然实际逻辑上处理还需要几个ms处理时间)。而非瞬时活动则是在玩家发出某个指令后一段事件才会被执行。例如RPG里玩家鼠标点击地图上某个地方,游戏角色则会自动行走到刚才点击处。这个移动过程就是一个非瞬时过程,它有了一个移动的过程,这个过程需要消耗一定的时间(玩家能感知的事件)非瞬时系列活动是指一位或者多位玩家通过一系列的瞬时\非瞬时活动完成一个动作(功能)。例如wow里面的拍卖场,有1位玩家提供道具,同服务器里的其他玩家对该道具进行竞拍。在WebGame里,玩家的很多操作其实是非瞬时部分事件是村庄资源减少(前提投资),非瞬时事件是建筑物建设,这个动作(同能)的结果是建筑物等级上升。又比如《Travian》里的攻击,瞬时事件是当前村庄的士兵减少(派出部队),非瞬时事件是减少的士兵移动到需要攻击的村庄(行军过程),动作结束是,两个村庄的部队开打了(战斗)。1.2 触发器(事件队列)前面说了瞬时事件和非瞬时事件的概念,当WebGame在24小时运转的时候,系统会产生大量的非瞬时事件,这些非瞬时事件不会在玩家点击页面时执行,而是需要等一段时间后才会执行,因此在游戏里把这些非瞬时事件拿出来,按事件的执行时间进行排序,组成一个事件队列。再通过一个触发器,在事件设定的执行时间到达的那时执行相对应的事件。这里面就涉及到两个内容:• 非瞬时的事件队列• 事件触发器1.2.1 事件队列数据库除了用于存储外,其查询功能也非常强大,直接拿来做事件队列很合适。事件队列里通常保存事件涉及的对象(村庄),结束时间、事件类型以及事件相关参数等。下表为我们系统里使用的事件表: ID int VillageCode int TargetVillageCode int Type int EndTime DateTime EventObject ntext
ID
int
VillageCode
TargetVillageCode
Type
EndTime
DateTime
EventObject
ntext
保存时将这些对象做xml序列化保存到EventObject字段里。当然如果为了效率还可以存储二进制序列化后的对象,这样在序列化以及反序列化时能节省大部分时间。1.2.2 触发器Asp.netAsp.net的处理在触发器上的处理就比较简单了。在服务器程序启动的时候,就执行一个线程,定时(1s)从数据库里取结束时间<当前事件的事件进行处理。
phpPHP没用过,不过好像不能在PHP页面里无法创建线程,用纯PHP服务端来实现触发器估计有点难度。但是可以做成一个PHP的应用程序,由应用程序来实现触发器。1.3 游戏资源的24小时自动增长游戏资源的24小时自动增长,这是一个有趣的话题,很多刚开始设计WebGame的朋友都会在这个问题上卡一下。每个人对于如何实现这个功能都有自己的独到见解,我在这里就不能给出一个唯一的答案,这里给的解决方案只是自己正在做的WebGame用到的方案。首先,我们否定了每个时间间隔(10分钟)就执行更新村庄资源的设计,这即不准确,同时也很消耗服务器资源。所以,我们的系统就只有在用户执行事件(瞬时的和非瞬时)的时候才将新的资源信息写入数据库。平时显示资源的时候用 (当前时间 - 上一次更新事件)*资源每小时产量+上一次更新产量公式计算出当前资源并显示在页面上。也就是说,每次页面更新时重新计算资源,但只只要用户没有做任何修改资源的动作(事件),就不会把重新计算后的资源写回数据库。《Travian》在前台界面上看到资源不断的上涨其实是利用JavaScript实现的小效果。
您还没有登录,请您登录后再发表评论
“天下盛境”是一款横版卷轴动作类网页游戏,而“棋牌OnWeb”则是一款模仿QQ游戏的棋牌游戏平台,这些项目成功地证明了Python在Webgame开发中的应用价值。 ### Python库与项目结构 文档还涉及了Python项目中库的...
【标题】"FLASH WEBGAME古装小游戏源码"所涉及的知识点主要集中在Web游戏开发领域,特别是使用Adobe Flash技术创建的在线游戏。Flash Webgame是一种基于Adobe Flash平台开发的网络小游戏,它在过去曾广泛应用于网页...
【标题】:“侠域WebGame源码下载”指的是获取并研究一款名为“侠域”的Web...总之,“侠域WebGame源码下载”提供了一个宝贵的学习资源,无论是对初学者还是有经验的开发者,都能从中学习到Web游戏开发的全方位知识。
在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,尤其在构建Webgame(网页游戏)方面具有显著优势。"一套完整的php webgame源码"提供了一个完整的PHP游戏开发实例,对于初学者来说,这是一个宝贵的资源,可以...
游戏网站智能管理系统是一款基于.NET 2.0框架开发的Web应用程序,主要针对网络游戏或电子娱乐类网站进行管理和运营。此系统旨在提供高效、便捷的后台管理功能,帮助网站管理员优化运营流程,提升用户体验,实现数据...
Webgame大致可以分为Social Game(社交游戏)和Web Game,后者更侧重游戏本身而非社交互动。 2007年至2011年间,中国网页游戏市场规模呈现快速增长态势。据iResearch的数据,2009年是市场增长的关键期,市场规模和...
### Webgame游戏策划知识点 #### 一、网页在线游戏概述 网页在线游戏作为一种无需安装客户端的游戏形式,具有明显的优缺点: - **优点**: - 用户门槛低:几乎任何能够联网的计算机都能运行,便于玩家迅速加入...
总的来说,通过对Travian 4.0源码的深度学习,不仅可以了解一款大型网络策略游戏的开发流程,还能掌握PHP编程、Web开发、数据库设计、游戏设计等多个领域的知识。这对于提升个人技能、理解游戏开发背后的复杂逻辑...
Osori-WebGame引擎针对这类游戏进行了优化,提供了一套完整的塔防游戏框架,包括地图编辑器、单位路径规划、敌我单位行为控制、资源管理、升级系统等核心模块。开发者可以根据需求,快速构建并定制自己的塔防游戏...
总的来说,"黑夜传说Webgame"的源码涵盖了Web开发的众多核心技术,包括前端与后端开发、网络编程、游戏逻辑设计、性能优化以及安全防护。对于想要深入理解和学习Webgame开发的人来说,这是一个宝贵的资源,通过研究...
通过分析源代码,我们可以学习到如何实现复杂的游戏循环、事件驱动以及状态机的设计,这对于任何想要开发策略类游戏的开发者都是宝贵的经验。 3. **前端技术** 前端部分展示了如何使用JavaScript(可能包括jQuery...
接下来,我们将探讨React Web游戏开发中的一些关键知识点: 1. **React组件**:React的核心是组件化,游戏的每个部分,如游戏板、角色、得分面板等,都可以被封装为独立的React组件,便于复用和维护。 2. **状态...
相关推荐
“天下盛境”是一款横版卷轴动作类网页游戏,而“棋牌OnWeb”则是一款模仿QQ游戏的棋牌游戏平台,这些项目成功地证明了Python在Webgame开发中的应用价值。 ### Python库与项目结构 文档还涉及了Python项目中库的...
【标题】"FLASH WEBGAME古装小游戏源码"所涉及的知识点主要集中在Web游戏开发领域,特别是使用Adobe Flash技术创建的在线游戏。Flash Webgame是一种基于Adobe Flash平台开发的网络小游戏,它在过去曾广泛应用于网页...
【标题】:“侠域WebGame源码下载”指的是获取并研究一款名为“侠域”的Web...总之,“侠域WebGame源码下载”提供了一个宝贵的学习资源,无论是对初学者还是有经验的开发者,都能从中学习到Web游戏开发的全方位知识。
在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,尤其在构建Webgame(网页游戏)方面具有显著优势。"一套完整的php webgame源码"提供了一个完整的PHP游戏开发实例,对于初学者来说,这是一个宝贵的资源,可以...
游戏网站智能管理系统是一款基于.NET 2.0框架开发的Web应用程序,主要针对网络游戏或电子娱乐类网站进行管理和运营。此系统旨在提供高效、便捷的后台管理功能,帮助网站管理员优化运营流程,提升用户体验,实现数据...
Webgame大致可以分为Social Game(社交游戏)和Web Game,后者更侧重游戏本身而非社交互动。 2007年至2011年间,中国网页游戏市场规模呈现快速增长态势。据iResearch的数据,2009年是市场增长的关键期,市场规模和...
### Webgame游戏策划知识点 #### 一、网页在线游戏概述 网页在线游戏作为一种无需安装客户端的游戏形式,具有明显的优缺点: - **优点**: - 用户门槛低:几乎任何能够联网的计算机都能运行,便于玩家迅速加入...
总的来说,通过对Travian 4.0源码的深度学习,不仅可以了解一款大型网络策略游戏的开发流程,还能掌握PHP编程、Web开发、数据库设计、游戏设计等多个领域的知识。这对于提升个人技能、理解游戏开发背后的复杂逻辑...
Osori-WebGame引擎针对这类游戏进行了优化,提供了一套完整的塔防游戏框架,包括地图编辑器、单位路径规划、敌我单位行为控制、资源管理、升级系统等核心模块。开发者可以根据需求,快速构建并定制自己的塔防游戏...
总的来说,"黑夜传说Webgame"的源码涵盖了Web开发的众多核心技术,包括前端与后端开发、网络编程、游戏逻辑设计、性能优化以及安全防护。对于想要深入理解和学习Webgame开发的人来说,这是一个宝贵的资源,通过研究...
通过分析源代码,我们可以学习到如何实现复杂的游戏循环、事件驱动以及状态机的设计,这对于任何想要开发策略类游戏的开发者都是宝贵的经验。 3. **前端技术** 前端部分展示了如何使用JavaScript(可能包括jQuery...
接下来,我们将探讨React Web游戏开发中的一些关键知识点: 1. **React组件**:React的核心是组件化,游戏的每个部分,如游戏板、角色、得分面板等,都可以被封装为独立的React组件,便于复用和维护。 2. **状态...