首页 新闻 会员 周边 捐助

网页游戏探讨(一)——资源自动增长

0
悬赏园豆:20 [已关闭问题]
<FONT face=Verdana>网页游戏(WebGame)顾名思义就是基于Web浏览器的网络在线多人游戏,说白点其实就是用浏览器来玩的游戏,它不用下载客户端,任何地方任何时间任何一台能上网的电脑就可以快乐的游戏。<BR><BR></FONT>不知道大家玩过网页游戏没有,如果没有向大家推荐两款<BR>OGame:<A href="http://www.ogame.com.cn/"><FONT color=#810081>http://www.ogame.com.cn</FONT></A><BR>武林三国:<A href="http://www.50sg.com/"><FONT color=#810081>http://www.50sg.com</FONT></A><BR><BR>这些网页游戏都有个特点:资源自动增长,比如:建造了1级伐木场,你的木材资源就会按照速率u(20木材/每小时)自动增长,即使你不在线。<BR>这就是我想和大家一起讨论的问题,这个自动增长是如何实现的?<BR><BR>我想了两种解决方案:<BR>1. 每隔一定时间在数据库中Update木材总量,总量=总量+u。<BR>2.每隔一定时间在数据库中Insert一条记录,该记录值就是u,总量就是所有值的总和。<BR><BR>如果这里有Webgame开发高手,请告知一二,与大家一起探讨,不胜感激。
问题补充: 玩家在离线的情况下,也必须保持资源不断增长,遭遇到另外的玩家来最大限度抢资源的时候,必须能抢到保持不断增长下的所有资源。
Evernory的主页 Evernory | 初学一级 | 园豆:180
提问于:2008-06-23 14:55
< >
分享
其他回答(4)
0
我觉得是查看的时候用时间计算出来的。 如果服务器老是刷新资源,负荷也大吧。
zeus2 | 园豆:92 (初学一级) | 2008-06-23 15:04
0
我提供第三种方案,在每次退出游戏时记录你的当前木材总量,在你下次登入时计算你上次登出到本次登录的时间差乘以木材随时间的增长率,加上木材量基数就是你的本次登录进来是的木材量,此时往数据库存一次;此次登出时再往数据库存一次。这样可以做到占用数据库资源最少,还可以实现功能 在用户在线期间,可能会每隔较长时间往数据库中更新一次。或者放到cookie中。
玉开 | 园豆:8822 (大侠五级) | 2008-06-23 15:07
0
我支持查询的时候才根据时间去计算并且更新数据库中资源,否则定时刷新用户一多,对服务器的负荷确实比较大。
b4n73 | 园豆:190 (初学一级) | 2008-06-23 17:15
0
楼主给了两种方法是在玩家在线时使用的,就看你准备把这方面的计算压力是给数据库服务器还是给应用程序服务器了。 如果是给数据库服务器,楼主的方法可行。 如果是给应用程序服务器那么就需要在页面上有个计时器,每隔一段时间刷新页面数据,并更新数据库。 其他网友的方案给的是离线状态方案,就是退出时计算更新并记录一次相关数据库,再次登录时计算更新并记录一次相关数据,在玩家游戏过程中如果需要查看这些数据时也要计算更新并记录一次相关数据! 对楼主补充问题的回答: 既然你的网络游戏要求如此,那么仍然可以按照上述方法去做呀。依照你说的打个比方: 第一种情况:设A玩家(状态在线)和B玩家(状态离线) 设A玩家准备或是偶然遇见想抢B玩家的资源 解决方法:当A玩家准备或是偶遇时就根据时间差计算双方的资源,并显示给A玩家,同时更新双方的资源信息数据库中的数据。 说明:没有必要时时刻刻更新B玩家的资源数据,非常耗资源,送你一句话数据到用时才计算结果保证最新准确数据,没有用到这部分数据时,你计算了也没有用处,没人浏览或查看,而且还白白占用资源。 第二种情况:设A玩家(状态在线)和B玩家(状态在线) 设A玩家准备或是偶然遇见想抢B玩家的资源 解决方法:与第一种情况相同,当双方遇见需要显示双方的资源情况时就根据各自的时间差来计算出资源数量。 附:这里所用时间当然不要用客户端时间了,日期不统一的,所以要用服务器端的时间,而且仿制篡改日期增加资源。
刚刚 | 园豆:3151 (老鸟四级) | 2008-06-23 21:19
0
把时间统一了 尽量使用服务器时间 然后,记入一个 建立的时间,其他的就可以计算了
G yc {Son of VB.NET} | 园豆:2006 (老鸟四级) | 2008-06-25 13:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册