书签 分享 收藏 举报 版权申诉 / 29

类型网页游戏开发七武器.docx

  • 文档编号:8159962
  • 上传时间:2023-01-29
  • 格式:DOCX
  • 页数:29
  • 大小:28.29KB
";

}

//$mapx=$mapx+200;

$mapy=$mapy+200;

              

}

$mapy=$mapy1;

$mapx=$mapx+200;

          

}

图片的命名怎么处理呢?

用firework打开一张完整的背景图,用切图导出的功能。

将图片切割成多个小方块后同时导出。

这时候,再加上具体的城池什么的。

这个就自由发挥了。

如果是修房子游戏,地图是自动生成的,就相当于没背景这个概念。

全部数据库里调就行,记得加缓存。

城市

城市需要显示在地图上,

城市作为玩家角色所处位置的参数之一。

城市作为NPC所处位置的参数之一。

城市作为场所的承载地。

City:

id

城市名name

城市类型type

城市图标image

城市坐标x

城市坐标y

其他参数。

总体上说,城市本身就是简单的一个表、一些数据。

关键的问题是

1)如何简单的处理多种类型的城市(或者就是地图上的某个石头、水池什么的)

2)如何简单的处理玩家角色在同一个城市中的位置转换。

第一个问题,

首先给City表增加一个字段type。

代表是什么城市类型。

比如

主城

关卡

大城

小城

等等。

这时候,会遇到另一个问题。

如何知道某个类型的城市,有些什么内部场景和内部建筑呢?

比如

主城A有

城外

内城

商店

拍卖行

主城C有

城外

内城

商店

(没有拍卖行)

类型都是“主城”

但是目前的表里,并没有对城池拥有场景的描述。

因此增加1个字段sence

主城A

sence字段的内容就是1|1|1|1

主城B

sence字段的内容就是1|1|1|0

很简单吧。

也就是城市内的场景通过一个0101表获得。

0就没有对应的场景。

1就有对应的场景。

至于对应的场景和01的位置,可以自行确定。

那么,针对场景来说,可能还会有一个变化。

比如主城A的城外的背景图是chengwai_A.jpg

主城B的城外的背景图是chengwai_B.jpg

也就是说同类型的城市,同样的场景。

但是背景有差异。

多个文件?

根据编号读不同的图?

那么最好的办法,还是把重担丢给填表的策划。

差异化的地方,毕竟不会太多(美术资源有限),所以可以考虑把同类型城市,但是有差异的场景背景图;放到一个字段里。

还是sence字段。

主城A

sence字段的内容就是chengwai_A.jpg|1|1|1

主城B

sence字段的内容就是chengwai_B.jpg|1|1|0

伪代码如下:

if($sence[0]==1)

{

//获得默认背景。

}

elseif($sence[0]==0)

{

//没有这个场景,进入处理错误流程。

}

else

{

//有数据,又不为0或1。

那么就说明是一张有差异的背景图片。

//获得有差异的背景图。

$sence[0]

}

第二个问题,

假设世界结构是这样的

大地图->城市->场景->建筑

那么,玩家表里需要增加三个字段。

cityid玩家所在城市id

sence玩家所在场景编号(或名称)

build玩家所在建筑编号(或名称)

好了。

玩家点城市里的对应按钮。

更新玩家表里的3个字段。

确定好了?

当然没有。

这时候,数据库会相当繁忙的。

因为玩家切换场景是比较频繁的操作。

如果用前台脚本来处理玩家所在位置,那么一些功能,比如声望不够,不能进入内城,就不太好实现了。

假设玩家在城市间移动,是需要一定时间的(10秒到几千秒)

那么,可以认为cityid的变化是不太快的。

数据库能轻松胜任。

而sence和build的变化是相当频繁的。

问题就集中在如何高效率的处理sence和build的转换。

还是很简单。

用session存储sence和build

同时,当玩家在场景发生某个事件时,再更新数据表。

这样处理效率很高。

不过会出现一个小bug。

就是玩家如果没有执行任何事件,刷新或者重登陆的时候,会出现在城市的默认位置。

(一般不会有玩家在意的。

一年多了,都没人提这个)

简单交互部分(与npc战斗、与玩家战斗、军团战斗)

首先,需要有一个清晰的概念。

战斗的流程是什么?

1)获得攻击方A的数据。

2)获得被攻击方B的数据。

3)根据战斗公式以及回合流程。

反馈战斗结果、战斗过程。

4)根据反馈的数据,更新对应数据。

攻击方A,被攻击方B。

可能是任何对象。

即,可能是玩家角色、武将、宠物、NPC等等。

(注:

军团战斗,可以分开,也可以合并到一起。

因为算法和流程可能会有比较大的不同。

战斗的算法公式也可能根据双方对象的不同而不同。

简单的说分为3个部分。

1、战斗对象(根据类型不同,二获得不同的对象)

2、战斗流程(一个虚类,输入战斗对象,获得结果及需要的数据)

3、算法(即战斗公式,属于战斗流程中的一部分)

伪代码如下:

1、战斗对象。

classFight($id,$type)

{

switch($type)

{

case“角色”:

returngetUserInfo($id);

break;

case“武将”:

returngetWJInfo($id);

break;

          

case“NPC”:

returngetNPC($id);

break;

}

}

2、战斗流程。

classFightProcess

{

public

$A;

public

$B;

public

$type;

//获得初始数据。

即获得两个Fight对象。

functionsetFight($A,$B,$type)

{

$this->A=$A;

$this->B=$B;

$this->type=$type;

//这里的$type是声明A、B分别是什么对象。

也可以不用。

因为A、B自己也会申明自己的类型。

}

functionbeginFight()

{

//开始战斗。

一般有一个循环。

}

    

functionendFight()

{

//结束战斗。

获得胜负数据。

回合数据。

对应的消息发送。

}

}

3、执行的时候。

$A=newFight($id,$type);

$B=newFight($id,$type);

          

$type=xxx;

          

$Fight=newFightProcess();

$Fight->setFight($A,$B,$type);

$Fight->doBegin();

$Fight->doEnd();

军团战斗的时候。

只是A、B对象的初始化不同。

以及beginFight()

和endFight()有不同。

其他功能(拍卖、闯关、国战、屠龙)

这类功能相对简单。

没太多说的。

主要就是服务器需要有一个定时执行。

每1分钟执行一次。

需要一个表来记录列表信息。

有人误会是每个玩家都需要定时执行。

实际上是服务器在固定时间内只需要执行一次。

因为每个玩家的信息都会进入到需要执行的列表中。

执行的是列表。

例如拍卖:

A卖出itemiditmenum个。

到期时间是endtime。

竞标人

jingbiao

B卖出itemid_Bitemnum_B个。

到期时间是endtime_B。

竞标人jingbiao

他们的数据都存在表sale里。

假设某一时刻。

A、B都到期了。

其中A有人竞标。

竞标人C

服务器执行的函数类似:

functiondoSale()

{

//获得所有sale里到期的数据。

//循环所有数据。

(一般不会超过100条。

不同担心负载)

//判断是否有人竞标。

(即jingbiao是否有数据)

//有则执行竞标人获得物品。

A获得资金、消息。

//无则A获得物品。

消息。

}网页游戏开发七武器(四、数据同步)

网页游戏的数据同步,涉及到

1)soap

2)socket

Soap

这是一小段与后台通讯的soap代码。

$login_url="http:

//xxx.xxxxx.xxx/xxx.asmx?

WSDL";

$client=newSoapClient($login_url);

$ip=get_client_ip();//这是一个自定义的获得客户端ip的函数。

$param=array("ID"=>$id,"Key"=>$key,"IP"=>$ip);

$result=$client->__soapCall('Key',

array('param'=>$param));

$result=$result->KeyResult;

__soapCall

KeyResult

都是服务端提供的标准接口。

能看出什么来吗?

这一段其实是facebook的登录接口代码。

关键部分就只有这么多。

Socket

这是一小段php前台发送socket包的代码。

$serverArea后台服务ip

$city需要发送的城市id

$forceName需要发送的势力名称(或公会名称)

$nicknam玩家昵称

$type自定义的类型

$content发送的内容。

整个代码就是构造一个符合后台要求的数据包格式。

chr

(1)代表1个空字符。

每段数据包的大小是370个字节。

其中每1个段表示不同的数据。

没有数据的地方都用空字符填满了。

functiongetChat($serverArea,$city,$forceName,$nickname,$type,$content)

{

$len=strlen($serverArea);

if($len<50)

{

$len_add=50-$len;

for($i=0;$i<$len_add;$i++)

{

$serverArea=$serverArea.chr

(1);

}

}

$len=strlen($city);

if($len<20)

{

$len_add=20-$len;

for($i=0;$i<$len_add;$i++)

{

$city=$city.chr

(1);

}

}

$len=strlen($forceName);

if($len<20)

{

$len_add=20-$len;

for($i=0;$i<$len_add;$i++)

{

$forceName=$forceName.chr

(1);

}

}

$len=strlen($nickname);

if($len<20)

{

$len_add=20-$len;

for($i=0;$i<$len_add;$i++)

{

$nickname=$nickname.chr

(1);

}

}

$len=strlen($type);

if($len<10)

{

$len_add=10-$len;

for($i=0;$i<$len_add;$i++)

{

$type=$type.chr

(1);

}

}

$len=strlen($content);

if($len<230)

{

$len_add=230-$len;

for($i=0;$i<$len_add;$i++)

{

$content=$content.chr

(1);

}

}

$buf=$serverArea.$city.$forceName.$nickname.$type.$target.$content;

$len=strlen($buf);

if($len<370)

{

$len_add=370-$len;

for($i=0;$i<$len_add;$i++)

{

$buf=$buf.chr

(1);

}

}

    

return$buf;

}

配合上

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
网页 游戏 开发 武器
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:网页游戏开发七武器.docx
链接地址:https://www.bdocx.com/doc/8159962.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开