龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

开发网页游戏系列之简单程序应用(3)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
附魔功能: 道具A。(基础道具)+道具B。(基础道具) =道具C。(唯一道具) 也就是唯一道具是在附魔功能执行的时候生成。以背包举例。没附魔前。 背包内

附魔功能:
道具A。(基础道具)+道具B。(基础道具) =道具C。(唯一道具)
也就是唯一道具是在附魔功能执行的时候生成。以背包举例。没附魔前。
背包内道具A。id为1。
背包内道具B。id为2。
当执行附魔功能后。道具A,道具B的id都置0(横表),或者删除了(纵表)。生成一个唯一数。temp_id。(md5生成就行了。)生成一个唯一道具。这时候,根据temp_id,让A的背包再次获得唯一道具的id。道具,比较完善的解决了。 

以下部分均涉及到一些商业问题,所以只能给思路,及很少的代码。

 


 

4、记时器

处理等待xx时间后,执行xx的问题。php自带一个sleep()函数。等待时间也可以控制。
但是显然,不管从运用还是效率上讲。都不足以支持游戏计时的。思路很简单。将需要倒计时的事件的所有参数,以及开始时间、结束时间。都存储到一个表里。前台用javascript倒计时,时间到后,通过ajax调用时间到后的处理程序。后台每隔一定时间,自动执行一次调用时间到后的处理程序。

至少需要三个php页面。
一个用来写存取定时的内容。
一个处理前台时间到时,结束操作。
一个处理后台定时刷新,判断时间到了就执行结束,时间未到不作处理。

miracle:计时器是不同的计时器对应不同的事件,还是可以多个事件都调用同一个计时器,如果一个玩家他调用了一个计时器计时一个建筑建设多长时间,在之中又调用了这个计时器用来计时另一个建筑建设多长时间,这样行不行的?会不会有冲突?

键盘上的烟灰:

多个事件对应1个计时器。

你可以在timer里增加一个字段。比如叫做actiontype(事件类型)
每个用户可以同时处理多件事。只是每个事情都有固定编号。

比如你的用户允许同时做5件事情。那么actiontype里直接编号为1-5。调用计时器的时候,根据不同的编号,你就知道这是用户的第某个“线程”。

miracle
如果是不同的用户,调用同一个计时器是不会发生冲突的吧

键盘上的烟灰:
当然不会。你看。userid可以用来确定某一个用户。actiontype可以用来确定是第几个线程。

5、事件控制
结合记时器,处理开始(),过程(),结束()

 1 interface Action
 2 {
 3     function doAction();
 4     function beginAction();
 5     function processAction();
 6     function endAction();
 7 }
 8 //简单事件工厂
 9 class ActionFactory
10 {
11     public function getAction($what)
12    {
13       $ActionName = $what;
14       return new $ActionName;
15    }
16 }
17 
18 //比如移动
19 class Move implements Action
20 {
21 function doAction()
22     {
23   具体执行函数
24       什么时候该这行哪一个过程。都在这里判断。
25 }
26     function beginAction()
27     {
28     事件开始时候执行。
29     这里可以把数据存到记时器里。以后就从记时器里取数据了。
30 }
31     function processAction()
32     {
33     从记时器里取数据。
34     事件执行的过程。比如用户刷新页面的时候。如果仍然在倒计时。那么就是调用这里了。
35 }
36     function endAction()
37     {
38     从记时器里取数据。
39     事件结束的过程。
40     记时到后,完成事件。
41 }
42 }
43 
44 //第一次调用的时候。
45 $Action = new ActionFactory();
46 $InstanceAction = $Action->getAction("Move");
47 $InstanceAction->set ($parameter);
48 $InstanceAction->doAction();
49 
50 //以后调用的时候。
51 $Action = new ActionFactory();
52 $InstanceAction = $Action->getAction("Move");
53 //这时候,事件的参数或数据都从记时器里取得。
54 $InstanceAction->doAction();

 

6、战斗
即时和半即时的回合战斗(两人或多人即时回合制战斗)比较繁琐。

至少包含:
前台:

自动接收邀请信息。Ajax
显示战斗过程。Ajax
回合倒计时间。javascript

后台:
发送邀请,接受,拒绝,超时。一个表。战斗数据。一个表。保存双方或多方的数据,包括回合时间,第几回合等。
战斗控制。一系列函数。处理玩家的操作,将操作存到战斗数据表里。时间到后执行操作。 

出兵后,直接返回战报。

写在事件里就行了。

1 function endAction()

3     {
4        从记时器里取数据。

6     生成回合,生成战报。

8 }


精彩图集

赞助商链接