Elixir游戏服设计二】的更多相关文章

搞一个例子,而没有实际的目标,做起来真是烦人.几次三番都想放弃. 后来想想,即使最后完成不了完整的服务器,把需要的知识点搞搞,摸熟悉也是好的. 这里没有完整的项目目录,主要是对需要的指点进行整理.要完整写个教材的话,话费我太多时间,恐怕我继续不下去. 先搞个建模吧.玩家数据目前如下 defmodule Player do @behavior Access defdelegate [fetch(t, key), get_and_update(t, key, list)], to: Map defs…
在<Elixir游戏服设计一>里提到,按照系统功能划分成app要保证原子性很难, 现在想想也没那么难.保证原子性,无非就是需要某个单点去完成操作.那么选择玩家进程去做原子性工作就可以了. 比如要重置某个任务,需要花费金币和背包里某个物品,那么大概的逻辑是这样的.在玩家进程里 def reset_task(task_id) do {need_gold, need_item} = Task.reset_need with :ok = gold_enough(need_gold) #使用玩家进程的数…
在Erlang游戏服设计总结http://www.cnblogs.com/rubyist/p/5530575.html里, 我提到我想要的游戏服设计方法,希望以应用做为基础构建块.最近我在学习elixir,它有很多 方便的语法糖以及很好用的库,能够解决我在游戏中开发中碰到的很多繁琐工作.因此我决定用它来做 练手,并期望下个项目中使用它. 游戏服的设计通常涉及如下东东: 协议制定 客户端接入 各种功能 我将以一个简单的打牌游戏来当做elixir练手,希望我能够坚持写完它.我只会想到哪写到哪. 该游…
抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我没法改变.在我开始这个系列时,我也常常陷入这些细节而不知所措,感觉不把所有设施搞完备没法写代码. 但其实,这些和游戏服的逻辑关系不大.游戏服的本质就玩家建模.玩法等,有了这些就已经足够跑逻辑,跑测试了: 至于其他则属于外围的.较独立的东西,属于可以稍后考虑的.至于进程注册查找机制,由于它是分布式系统…
玩家进程用gen_server来建模,我不直接使用 use GenServer, 而是使用exactor,该库可以去掉反锁的接口定义. 我们新建一个 player_server_manager app吧, 使用 mix new player_server_manager --sup, 会给我们增加sup.然后在mix.exs里增加exactor的依赖如下: defp deps do [{:exactor, "~> 2.2"}] end 跑 mix deps.get,成功了依赖就准…
有了玩家模型,我们试试让玩家进程跑起来. 需要搞个PlayerSupervisor来负责启动和监控玩家进程. defmodule PlayerSupervisor do use Supervisor def start_link(_opts) do Supervisor.start_link(__MODULE__, :ok, name: __MODULE__) end def init(:ok) do Supervisor.init([PlayerServer], strategy: :simp…
写着写着就废球了,感觉空对空,实在没什么意思. 另外很快就要搞新项目,决定新项目就直接上elixir了.目前该做的准备工作已经探索了一些了. 以下的东西是写给同事参考的,感兴趣的可以看看,提建议更好. 游戏大体分为如下服务器 . 网关服务器(必须) . 游戏服务器(必须) . 后台管理服务器(一般必须) . 数据存储服务器(必须) . 支付服务器(安桌或者第三方回调的话,必须) Elixir umbrella 项目目录结构可大概如下 . 游戏数据模型(包括简单的获取更新逻辑) . 通讯协议 ht…
上回说用Registry 做本地注册(跨服可以用syn,只是稍微麻烦点,需要模拟global注册机制,写个封装模块). 修改game_server 项目的mix.exs, 增加应用启动 def application do [ extra_applications: [:logger], mod: {GameServer, []} ] end 修改game_server.ex 实现,如下应用的监控树监管PlayerRegistry进程和PlayerSupervisor.这里可以考虑 :one_f…
上章说到我们要引入syn https://github.com/ostinelli/syn/ 看过文档,它并没有直接提供{via, Module, Name} 相关的方法.我们需要封装一下. Name暂时可以用id,如果有需要再调整 以后有回调需求的话,刚好也可以做在那个模块里. 在player_server_manager项目里增加{:syn, "1.4.0"} 运行命令获取依赖 修改application 方法,增加依赖 def application do [applicatio…
上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://github.com/rubyist1982/simple 上. model 应用新增 simple_poker.ex , 代码不多,做了点简单注释,可以贴下 defmodule SimplePoker do @cards for i <- 1..4, j<- 1..13, do: {i, j} @…
删除model.ex 创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了. 选择 map 代表数据,是为了扩展数据结构,方便增加功能.struct也是可以的. add_num 和 cost_num 存粹是为了简化代码 一系列的get/set 是为了操作玩家数据用的(也可以减少代码吧) defmodule Player do def init do %{ id: 0, # 唯一标识 name: "", # 昵称 gold: 0, # 金币 } end def g…
反正是写到哪算哪. 创建umbrella项目 mix new simple_game --umbrella 创建model项目 cd simple_game\apps mix new model 创建 game_server 项目 同样在apps目录下 mix new game_server 最后项目结构如下 我尝试把它发布出去,结果 https://github.com/rubyist1982/simple.git 和我预期的不一样,我初始应该以项目做仓库好点.…
接上章,我新建了个app做包含Table模型, TableServer等.Table桌子的代码暂时如下, 有一些状态还没用上 defmodule Table do @state_accept 0 #准备接入玩家 @state_ready 1 #开局准备? defdelegate [fetch(t, key), get_and_update(t, key, list)], to: Map defstruct [:config, :seats, :state] def new(config) do…
这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法系统 好友系统 聊天系统 商城 转盘 以及其他 我经历过的项目不多,只有2个.在这2个项目中我看到系统建模都采用如下一锅端的方式: 即玩家进程加载了所有玩家数据,处理所有可能的系统: 整个游戏服通常只有玩家进程.公会进程.玩法进程以及一些公共进程. 整个游戏服里你看到的都是进程,看不到应用. 通常玩…
以前的Elixir游戏服设计系列种种原因没有完成. 后来虽然用Elixir + riak 完成了一个麻将的初始版本,可惜公司也挂了. 现在到新公司,比较空闲,想着像完成一个心愿一样,还是重启下吧(希望不要又烂尾), 改头换面叫简单Elixir游戏服务器系列. 一些说明 0. 没怎么写过博客,也懒得去研究了,说到哪算哪吧,为了自己愉快.所以排版,链接方面可能不好. 1. 游戏是那个简单的“抓木虱”,回头重新整理下介绍 2. 不会涉及到存储 3. 会用elixir 1.5 去完成(因为喜欢新玩意)…
游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状态)管理. UI框架设计主要目的,就是尽可能的完成一些与具体游戏功能逻辑无关的一些底层事务性的功能实现.这些功能最好是自动或者是半自动的实现,无须客户程序(调用框架的程序)再去过多处理与关心. 对于以上功能,笔者定义了UI框架的相关四个核心类: BaseUIForms    基础UI窗体脚本(父类,…
目录 <ATD> 游戏模型 <ATD> 游戏逻辑 <ATD> UI/HUD/特效/音乐 结语 前篇:Unity<ATD>塔防RPG类3D游戏架构设计(一) - KillerAery - 博客园 <ATD> 游戏模型 <ATD>策划案部分摘取: 分析了策划案后,显而易见里面划分了这4种游戏模型: 英雄,怪物,陷阱,塔 最初想到的是使用继承的方式来实现这些游戏模型(如图): 然而考虑到现在的英雄/怪物/陷阱/塔类型已经足够太多了,而且以后…
视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d-x技术研讨会在北京剧院举行,人人网游戏开发工程师李成进行了主题为<基于cocos2d-x的游戏框架设计>的演讲. 以下为实录 主持人: 大家在Cocos2d的社区里都会进行像今天这样的技术解决方案分享,但是都非常零散.接下来我们欢迎人人网游戏工程师里成,他演讲的题目是"基于Cocos2…
Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 一.切图工具类 我们九宫格嘛,肯定要一个切图的工具,把一个图片给切成九张,那具体是怎么实现呢?我们先写一个bean来存储一切的状态 ImagePiece package com.lgl.ninegame.utils; import android.graphics.Bitmap; /** * * C…
游戏服务器设计之聊天室示例 简介 h2engine引擎建群以后,有热心网友向我反馈,想尝试h2engine但是没有服务器开发经验觉得无从入手,希望我能提供一个简单明了的示例.由于前一段时间工作实在忙碌,一直没有抽出时间好好写一下,后来抽空写了出来,自己从小白开发者的角度重新审视了一遍h2engine,自己也收获匪浅,也优化了部分h2engine的架构,使其更易使用.以前的例子都是c++加脚本的例子,这次写一个纯c++的例子. 开发服务器程序一般有如下几个基本操作: 启动程序,监听网络端口,初始化…
课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验箱(HonyaS5PC100): windows操作系统. 实践内容 Windows环境下ARM集成开发环境的搭建与使用: 安装软件到模拟器: 连接ARM实验箱与PC机: 将工程代码在ARM实验箱上实现: 给程序增加新的功能. 实践步骤 Windows环境下ARM集成开发环境的搭建与使用 安装JDK…
好吧好吧,又谈到这个问题了,其实早就想写这个博客了,犹豫了好久.在设计游戏的时候我本人是很排斥什么游戏架构设计,mvc什么的,我只想马上动手就把自己的游戏玩法最快的用代码敲出来,还不会出无法挽回的错误,那么下面的步骤可以帮助你构建一个简单的游戏模式架构. 一.首先是数据存储类,如GameManager,UIManager,SoundManager等这些类,这些类是不销毁的,由于这些类为物体组件,用普通的单例模式容易出现实例化的冲突,因此可以首先加载一个数据场景,间隔一段时间后加载第二个正式场景,…
课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的欢迎.本次游戏的程序设计包含,java swing组件的合理运用,还有图像的变动达到一个动态的动画效果,线程的运用,游戏的异常处理,等方面的知识.培养学生运用所学知识的基础理论.基本知识和基本技能,分析解决实际问题能力的一个重要环节.它与课堂教学环节彼此配合,相辅相成,在某种程度上是课堂学习的继续.…
一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时候自己没想到这么全,但大概想法都是一致的,摘录下来再学习一下. 1.网络游戏程序员须知 UDP vs TCP 作者:rellikt@gmail.com 首发链接:http://blog.csdn.net/rellikt/archive/2010/08/21/5829020.aspx 这篇教程让我们就…
目录 <ATD> 游戏简介 <ATD> 整体结构 <ATD> 游戏机制 Buff机制 Skill机制(技能机制) 仇恨机制 <ATD> 游戏模型 策划案部分摘取 继承实现游戏模型 组合实现游戏模型 组合实现设计结构 结语 <ATD> 游戏简介 游戏类型:塔防+RPG的3D游戏 游戏要素:3D 塔防 英雄 建筑树 搭配 主体玩法:游戏里将会有一波波怪物进攻基地.玩家可以建造塔来防御敌人,同时也可以控制单独的个体英雄角色来攻击敌人. 游戏模式: 第三…
FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时候自己没想到这么全,但大概想法都是一致的,摘录下来再学习一下. 1.网络游戏程序员须知 UDP vs TCP 作者:rellikt@gmail.com 首发链接:http://blog.…
php开发面试题---游戏面向对象设计与分析实例 一.总结 一句话总结: 不要光空想,多看几个实例就知道自己的游戏该怎么设计了 根据实例去理解面向对象编程的的六大原则 1.英雄种类分别有:战士.法师.牧师.刺客等,那么对应的英雄类如何设计? 英雄基类,战士.法师.牧师.刺客分别是这个类的子类 2.购买道具方法和出售道具方法为什么在道具类中而不在玩家类中? 只能道具才知道自己能卖出多少钱:每个对象的数据只能由自己来访问和处理,如果其他对象想修改某个对象里的状态(数据),则只能调用其提供的publi…
JavaScript 高级框架设计 (二) 上一篇,JavaScript高级框架设计(一)我们 实现了对tag标签的选择 下来我们实现对id的选择,即id选择器. 我们将上一篇的get命名为getTag(),然后再编写一个getId(),和getClass() 然后在总的get方法中调用,这样做的好处就是模块化,便于维护. 我所有的代码都会托管到github上. 01.js var getId = function (id, result) { result = result || []; //…
近期公司X游戏项目,提了一个游戏VM资源的需求,是 64GB RAM + 30Core CPU 的VM规格,而一个VM部署10个游戏服.而我们云平台推荐的VM规格为 4 Core CPU + 4GB RAM 那么对于游戏服来说这是个需求不合理在什么地方呢 会带来哪里优势和劣势呢 ?本文尝试分析一下: 优势: 对用户来说: 1. 资源管理简单,需要更少量的服务器 2. 单个进程可以使用更多的 CPU和RAM资源 劣势: 1. 10个游戏服运行在一个VM上,如果这个VM发生故障会影响到所有的游戏服,…
1.OutOfMemoryError:Java heap space 过程:服务器上面的mysql突然异常重启,导致了程序启动的时候报错 问题1:OutOfMemoryError:Java heap space 解决过程:1.查看mysql的错误日志根据错误日志,修复相关的表,修改相关的参数设置.修复表使用的是repair table命令. 重启程序,依然报错:问题1. 2.更改mysql的缓冲池大小由于服务器上面开了多个区服,可能导致的程序运行的时候,分配的内存不足.更改innodb-buff…