请问精通设计模式的高手,webgame的基本模式有关问题
请教精通设计模式的高手,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就当是数据存储操作了.
继续讨论 设计模式.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



DJI hat noch keine Pläne zur Einführung einer neuen Action-Kamera bestätigt. Stattdessen scheint es, dass GoPro in diesem Jahr seinem Rivalen einen Schritt voraus sein wird, nachdem angekündigt wurde, dass es am 4. September zwei neue Action-Kameras vorstellen wird. Zum Vergleich: Diese werden voraussichtlich a

In Docker kann das Berechtigungsproblem des Mount-Verzeichnisses normalerweise durch die folgende Methode gelöst werden: Hinzufügen berechtigungsbezogener Optionen bei Verwendung des Parameters -v zur Angabe des Mount-Verzeichnisses. Sie können die Berechtigungen des gemounteten Verzeichnisses angeben, indem Sie nach dem gemounteten Verzeichnis Folgendes hinzufügen: ro oder :rw, was jeweils Lese- und Lese-/Schreibberechtigungen angibt. Beispiel: dockerrun-v/host/path:/container/path:roimage_name Definieren Sie die USER-Direktive in der Docker-Datei, um den Benutzer anzugeben, der im Container ausgeführt wird, um sicherzustellen, dass Vorgänge innerhalb des Containers den Berechtigungsanforderungen entsprechen. Zum Beispiel: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

Fast ein Jahr ist vergangen, seit DJI den Osmo Action 4 (aktuell 299 $ bei Amazon) herausgebracht hat. Seitdem konzentriert sich das Unternehmen auf seine anderen Geschäftsbereiche, darunter neue RS-Kamerakardanringe. Darüber hinaus wurden verschiedene Drohnen wie die Avata eingeführt

In einigen Fällen möchten wir einige asynchrone Vorgänge in Vuex ausführen, z. B. Netzwerkanforderungen, die asynchron sein müssen. Im Folgenden werde ich Ihnen den asynchronen Vorgang der Vuex-Statusverwaltung vorstellen Sei hilfreich für Freunde in Not!

Insta360 hat eine neue Action-Kamera herausgebracht, die zweite in diesem Jahr nach der Insta360

Definieren Sie einen Trigger, um zu bestimmen, wann ein Fenster (das durch einen Fensterzuordner gebildet wird) für die Verarbeitung durch eine Fensterfunktion bereit ist. Jeder WindowAssigner verfügt über einen Standardwert-Trigger. Wenn der Standardtrigger nicht Ihren Anforderungen entspricht, können Sie trigger(…) verwenden. Quellcode auslösen publicabstractclassTriggerimplementsSerializable{/**Solange ein Element in das aktuelle Fenster fällt, wird diese Methode aufgerufen*@paramelementDas empfangene Element*@paramtimestampDie Ankunftszeit des Elements.*@paramwindowDas Element gehört zu

1. Grundkonzept Ein Trigger ist eine spezielle Art einer gespeicherten Prozedur. Der Trigger wird durch ein Ereignis ausgelöst und ausgeführt. Der Trigger ähnelt einem js-Ereignis. Die Funktion besteht darin, die Daten vor dem Schreiben zu überprüfen oder zu konvertieren Die Datentabelle (um die Datensicherheit zu gewährleisten) Wenn ein Triggerfehler auftritt, wird das Ergebnis der Änderung widerrufen (Transaktionssicherheit). Einige Datenbankverwaltungssysteme können Trigger für die Datendefinitionssprache DDL verwenden, sogenannte DDL-Trigger, die das ersetzen können Änderungsanweisungen statt entsprechend bestimmten Umständen (MySQL unterstützt nicht) 2. Vor- und Nachteile von Triggern 2.1 Vorteile Trigger können kaskadierende Änderungen über verwandte Tabellen in der Datenbank erreichen (wenn sich die Daten in einer Tabelle ändern, können Trigger zum Implementieren von Vorgängen verwendet werden). auf anderen Tabellen ohne Wissen des Benutzers) Garantiert

GoPro hat jetzt sein jährliches Action-Kamera-Update vorgestellt. Anders als in den letzten Jahren hat sich das Unternehmen entschieden, zwei Modelle herauszubringen. Es ist jedoch nicht zu 360-Grad-Kameras zurückgekehrt, obwohl letztes Jahr um diese Zeit angekündigt wurde, dass es die Max wi ersetzen würde
