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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











DJI는 아직 새로운 액션 카메라 출시 계획을 확정하지 않았습니다. 대신 GoPro는 9월 4일에 두 개의 새로운 액션 카메라를 출시할 것이라고 예고하면서 올해 경쟁사보다 앞서 나갈 것으로 보입니다.

Docker에서 탑재 디렉터리의 권한 문제는 일반적으로 탑재 디렉터리를 지정하기 위해 -v 매개 변수를 사용할 때 권한 관련 옵션을 추가하는 방법으로 해결됩니다. 마운트된 디렉토리 뒤에 ro 또는 :rw를 추가하여 마운트된 디렉토리의 권한을 지정할 수 있습니다. 이는 각각 읽기 전용 및 읽기-쓰기 권한을 나타냅니다. 예: dockerrun-v/host/path:/container/path:roimage_name 컨테이너 내부 작업이 권한 요구 사항을 준수하는지 확인하기 위해 컨테이너에서 실행 중인 사용자를 지정하려면 Dockerfile에서 USER 지시어를 정의하세요. 예: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

DJI가 Osmo Action 4(Amazon에서 현재 $299)를 출시한 지 거의 1년이 지났습니다. 그 이후로 회사는 새로운 RS 카메라 짐벌을 포함한 다른 부서에 집중해 왔습니다. 이 외에도 아바타 등 다양한 드론을 선보였습니다.

어떤 경우에는 네트워크 요청과 같은 비동기 작업을 Vuex에서 수행하고 싶은데, 이 상황을 어떻게 처리해야 할까요? 아래에서는 Vuex 상태 관리의 비동기 작업을 소개하겠습니다. 도움이 필요한 친구를 도와주세요!

Insta360은 Insta360X4(Amazon에서 현재 $499.99)에 이어 올해 두 번째로 새로운 액션 카메라를 출시했습니다. 예상대로 회사는 4K 비디오 녹화 기능을 추가하는 업그레이드된 Go3S를 출시했습니다.구체적으로는 Inst

창(창 할당자에 의해 형성됨)이 창 함수에 의해 처리될 준비가 되는 시기를 결정하는 트리거를 정의합니다. 각 WindowAssigner에는 기본값인 Trigger가 함께 제공됩니다. 기본 트리거가 요구 사항에 맞지 않으면 Trigger(…)를 사용할 수 있습니다. 트리거 소스 코드 publicabstractclassTriggerimplementsSerialized{/**요소가 현재 창에 속하는 한 이 메서드는 호출됩니다*@paramelement요소 수신됨*@paramtimestamp요소 도착 시간*@paramwindow요소는 다음에 속합니다.

1. 기본 개념 트리거는 이벤트에 의해 트리거되고 실행되는 특수한 유형입니다. 1. 데이터를 쓰기 전에 강제로 확인하거나 변환하는 기능입니다. 데이터 테이블(데이터 보안 보장) 트리거 오류가 발생하면 변경 결과가 취소됩니다(트랜잭션 안전). 일부 데이터베이스 관리 시스템은 DDL 트리거라고 하는 데이터 정의 언어 DDL용 트리거를 사용할 수 있습니다. 특정 상황에 따라 명령 변경 (mysql은 지원하지 않음) 2. 트리거의 장점 및 단점 2.1.장점 트리거는 데이터베이스의 관련 테이블을 통해 계단식 변경을 수행할 수 있습니다. (한 테이블의 데이터가 변경되면 트리거를 사용하여 작업을 구현할 수 있습니다.) 사용자 모르게 다른 테이블에 있음) 보장

GoPro는 이제 연간 액션 카메라 교체를 도입했습니다. 최근 몇 년과 달리 회사는 두 가지 모델을 출시하기로 결정했다. 하지만 작년 이맘때쯤 Max wi를 대체할 것이라는 예고에도 불구하고 360도 카메라로 돌아오지 않았습니다.
