首页 后端开发 php教程 请问精通设计模式的高手,webgame的基本模式有关问题

请问精通设计模式的高手,webgame的基本模式有关问题

Jun 13, 2016 pm 01:46 PM
action trigger user

请教精通设计模式的高手,webgame的基本模式问题。
开发一个简单的网页游戏。所有对程序和对功能的要求,假定我们都能实现。现在的问题是对设计模式的选型和处理。

以下是我的初期设定:

基础分析:

一个虚拟玩家。 我的系统必须能提供UI,提供操作按钮。提供玩家属性、方法。

一个虚拟世界。 我的系统必须能构造一个比较完善的虚拟世界。有地图、城市、建筑、商店、住宅、物品、数值(资金、经验值、声望值、技能点)
  、背包、装备等等。这一切基于php+mysql+javascript实现。

玩家交互。 我的系统要拥有玩家互相交互的功能。可以执行各种交互操作。短信息,邀请战斗,控制战斗,多人战斗,共同完成任务。等等。

玩家与虚拟世界交互。 我的系统要拥有玩家能够进行操作的功能。可以执行各种功能操作。
出生,学习,移动,工作,商业(买卖,交换(含物品与资金、物品),自定义任务。),交流,战斗(一系列功能),
做任务(一系列功能加上时间和奖励的集合)。物品处理。资金处理。

定义:

我个人将以上内容定义为:
User(玩家操作的部分) Trigger(执行事件时需要先通过触发,虚类) Action(如移动,工作等都是事件,虚类) AbstractItem(地图、城市、道具等,都属于虚拟物品,虚类)

方法:
User: display() doAction() 
User仅仅只真实用户的操作。

Trigger:display()doAction()needTime()beginTime()endTime()
Trigger提供时间控制,Trigger的派生类,有立刻执行,倒计时执行,玩家交互执行。

Action:display()doAction()begin()Process()end()
Action提供事件的开始,过程,结束,Action的派生类,有移动,工作,战斗等等。

AbstractItem:display()get()lose()use()
AbstractItem构造了整个游戏中所有的虚拟物品。AbstractItem的派生类,如地图、城市等等,包括角色本身。


模式:
个人想法是User只是作为驱动。Trigger提供给User驱动的事件,并且控制Action的执行时间。AbstractItem提供所有Action相关的对应的对象。

这时候,User与Trigger好象是bridge模式,Action与AbstractItem也好象是brideg模式。Trigger与Action又象是Abstractfactory模式。

另外,需要有任务功能。个人认为任务就是一系列的Trigger组合。包括前续、后续等等。个人认为需要一个Task类,但不知道放Action里好,还是放Trigger里好,又或者是独立出来。

同时,由于是webgame,即时或半即时交互,通过ajax模拟。已经有专门的定时器(认为程序运行环境有这项功能)功能。
显示部分呢是web页面即UI包。可能需要语言包,和任务对话包。里面用到的图片也想做成图片包,当然图片包可能属于UI包。

问题:

1、最高层模式是什么模式或者选什么模式比较合理?
2、目前我自己认为的模式是否比较合理或者有更好的优化办法?
3、Task如何加入?
4、ajax与Trigger与定时器如何结合更好?(因为ajax属于纯功能了,但是Trigger又会用到。最关键的是一个是js,一个是php...)
5、UI包(可能会有多套UI)、语言包(可能需要多语种)、对话包等,如何合理的加入到游戏里?(数据库?填表?ini?)

请高手不吝赐教!不需要代码,只给思路即可。当然,有例子和代码更好。


------解决方案--------------------
没做过,ajax估计做不了
ajax是单项通信,连续请求量很大,看过用http长连接的



至于其他,你还是按面向对象思想来设计吧

对象 事件 属性 方法

------解决方案--------------------
说实话,我没看明白你的内容
和我对WEBGAME的想法不一样

还有,为什么一定要用设计模式呢?
我只引用一句话, 当您手中拿着一把锤子时,所有事物看上去都像钉子
------解决方案--------------------
我不否认模式的作用
只是,我认为要在理解模式下才去用,而不是死抠着用模式。。
------解决方案--------------------
个人觉得对话包作为action里比较好,作为atcion的属性或方法
action作为一个动作,触发时就给出或输出相关对话信息,这是系统级
用户级的直接输出就行了
------解决方案--------------------
关注...
------解决方案--------------------
学习,关注
------解决方案--------------------
服务端只需要保存各种对象状态即可.


其它的,就是JS架构的事.
别把MVC框架的那一套用过来. webgame 最重要的是执行效率,而不是开发效率....
------解决方案--------------------
MVC 只是我举的个例子.

对于webgame 

JS 就当是内存了.
PHP就当是硬盘了.

AJAX就当是数据存储操作了.

继续讨论 设计模式.

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DJI Osmo Action 5 Pro:发布日期已定,零售商透露发布价格可能会低于 GoPro Hero 13 Black DJI Osmo Action 5 Pro:发布日期已定,零售商透露发布价格可能会低于 GoPro Hero 13 Black Sep 04, 2024 am 06:51 AM

大疆尚未确认推出新运动相机的计划。相反,GoPro 今年似乎会领先于竞争对手,并透露将于 9 月 4 日推出两款新的运动相机。

docker挂载目录权限问题怎么解决 docker挂载目录权限问题怎么解决 Feb 29, 2024 am 10:04 AM

在Docker中,挂载目录的权限问题通常可以通过以下方法解决:使用-v参数指定挂载目录时添加权限相关的选项。可以通过在挂载的目录后面添加:ro或:rw来指定挂载目录的权限,分别表示只读和读写权限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定义USER指令来指定容器中运行的用户,以确保容器内部的操作符合权限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

新款 DJI Osmo 运动相机预计将于 2024 年夏季发布,与最近发布的 GoPro 和 Insta360 相媲美 新款 DJI Osmo 运动相机预计将于 2024 年夏季发布,与最近发布的 GoPro 和 Insta360 相媲美 Jul 01, 2024 am 09:49 AM

自 DJI 发布 Osmo Action 4(亚马逊售价 299 美元)以来已经过去了近一年。从那时起,该公司开始专注于其他部门,包括新型 RS 相机万向节。最重要的是,它还推出了各种无人机,例如 Avata

Insta360 Go 3S:新款便携式 4K 运动相机发布,重量仅为 39 克,支持 Apple Find My Insta360 Go 3S:新款便携式 4K 运动相机发布,重量仅为 39 克,支持 Apple Find My Jun 14, 2024 pm 06:05 PM

Insta360 发布了一款新的运动相机,这是继 Insta360X4(亚马逊售价 499.99 美元)之后的第二款运动相机。不出所料,该公司推出了 Go3S,它是 Go3 的升级版,增加了 4K 视频录制功能。

Vuex状态管理之Action异步操作详解 Vuex状态管理之Action异步操作详解 Aug 10, 2022 pm 03:29 PM

某些情况,我们希望在Vuex中进行一些异步操作, 比如网络请求, 必然是异步的,这个时候怎么处理呢?下面就给大家介绍Vuex状态管理之Action异步操作,希望对需要的朋友有所帮助!

GoPro 发布新款 Hero 13 Black 运动相机,配备新镜头模组以及好奇的 GoPro Hero GoPro 发布新款 Hero 13 Black 运动相机,配备新镜头模组以及好奇的 GoPro Hero Sep 05, 2024 am 06:45 AM

GoPro 现在推出了年度运动相机更新。与近年来不同的是,该公司决定发布两款车型。然而,它并没有回归 360 度相机,尽管去年这个时候就曾戏称它将取代 Max wi

MySQL数据库触发器trigger怎么使用 MySQL数据库触发器trigger怎么使用 May 28, 2023 pm 05:31 PM

一、基本概念触发器是一种特殊类型的存储过程,触发器通过事件进行触发而被执行触发器trigger和js事件类似1、作用写入数据表前,强制检验或转换数据(保证数据安全)触发器发生错误时,异动的结果会被撤销(事务安全)部分数据库管理系统可以针对数据定义语言DDL使用触发器,称为DDL触发器可以依照特定的情况,替换异动的指令insteadof(mysql不支持)2、触发器的优缺点2.1、优点触发器可通过数据库中的相关表实现级联更改(如果一张表的数据改变,可以利用触发器实现对其他表的操作,用户不知道)保证

Java Flink窗口触发器Trigger怎么使用 Java Flink窗口触发器Trigger怎么使用 May 03, 2023 pm 01:10 PM

定义Trigger确定窗口(由窗口分配器形成)何时准备好由窗口函数处理。每个WindowAssigner都带有一个默认值Trigger。如果默认触发器不符合您的需求,您可以使用trigger(…)。Trigger源码publicabstractclassTriggerimplementsSerializable{/**只要有元素落⼊到当前窗⼝,就会调⽤该⽅法*@paramelement收到的元素*@paramtimestamp元素抵达时间.*@paramwindow元素所属

See all articles