升级 游戏耐玩的秘诀
技术与开发
模仿程序:开心农场
模仿进度:第四期
本期要点:完善游戏
开发平台:ASP+Access
升级系统设计思路
无论多好的游戏,总会有玩腻的一天,这个结果是无法改变的,但是我们可以延长这个过程,这就需要给玩家一个长期目标,让游戏变得更具有挑战性,同时也让游戏更具有耐玩性。
不同的SNS游戏有不同的方法,例如在抢车位中,玩家可以攒钱买车,于是拥有不同的车成为了玩家的目标,玩家会为这个目标不停地努力着——这就是一个很好的提升游戏的耐玩性的例子。
而在开心农场中,升级系统担当了这个重任——玩家每当对自己的农作物做出一个动作时,就会增加经验值,而经验值达到一定数量的时候(按级别增长),玩家的等级就会提升,当等级提升了后,玩家就可以拥有更多的田地,可以购买更多种类的农作物。
升级系统并不复杂,最主要的就是设计升级公式,例如将最大等级设定为5级,而玩家的初始等级为1级,1级所需要升级的经验值为100,而每次玩家做动作时所获得的经验值为5,于是我们可以这样设计升级公式:升级所需的经验=(玩家等级-1)×80+100,每次升级后经验清零(图1)。

升级系统关键代码
在动作页面添加相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
'当玩家做动作时
sql="select * from [User] where id="&玩家的ID '读取玩家信息,并生成记录集
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,3,3
rs("exp")= rs("exp") + 5
if rs("exp")>= (rs("level")-1)*80+100 and rs("level")<5 then '如果玩家的经验值足够升级,并且等级低于5级
rs("exp")=0
rs("level")= rs("level")+1
sql="select * from [Field]" '生成土地的记录集
Set Fd=Server.CreateObject("ADODB.Recordset")
Fd.open sql,conn,3,3
Fd.addnew '给玩家一块新的土地
Fd("belong")=玩家ID
Fd("areanum")=rs("level")+5
Fd.update
小知识:狗狗系统设计方法
在开心农场中,有一个可爱的护卫——狗狗。狗狗可以帮助玩家守护他们的农田,每当有人心怀不轨想偷菜时,狗狗便会挺身而出,吓跑那些非法闯入者,并让那些非法闯入者在逃跑中损失一些金币。狗狗也有不同的等级,等级越高也就越贵。
狗狗系统的原理是随机事件的产生。Randomize '重新产生随机数 Ran '类型为常数,可以随机产生一个在0~1之间的随机小数,Ran语句可以给一个变量赋值,如A=ran。如果玩家想设定一个随机事件的概率的话,就用If ran>0.6 then '如果随机数字大于0.6,上面这段语句就反映出了一个概率为0.4的随机事件。
游戏的优化
要想SNS游戏流畅地运行,需要进行特别的优化处理,提高执行效率,主要从以下方面入手。
1.服务器
服务器是影响SNS游戏运行的最大因素,如果游戏是采用图2所示的方法运行的话(主流方式),那SNS网站服务器只起到一个中介的作用。因此,你要选择一台与SNS网站服务器连接速度比较快的服务器,不然用户的网速再快也没用。

2.数据库
影响数据库执行效率的是查询记录,记录越多查询的速度越慢,所以推荐定期清理无用的数据。如果你的目标是开发大型的SNS游戏的话,则推荐将Access数据库换为SQL 2000以上版本或MySQL数据库,它们在查询大量记录时要比Access优秀得多。
3.程序代码
程序优化主要遵守以下几个原则:尽量不要过多地使用循环语句;一个页面不宜显示过多的动态内容,可以分为几个页面;尽量不要一次打开过多的记录集,记录集用完后记住关掉;一次显示过多的记录要记住分页。 (广东 李斯达)
总结
经过四期的讲解,SNS游戏设计就完成了。由于可以开发SNS游戏的语言比较多,我们无法一一给出代码,不过原理却是相通的,在理解了本系列后,相信你会开发出用其他语言编写的SNS游戏。今后,如果大家对SNS游戏开发有相关的疑问,可以与小编联系,联系邮箱pcw-chendx@vip.sina.com。
小编救急
在讲解手机编程时,小编建立了很多开发QQ群,有许多读者朋友在里面交流,其中谈论得较多的是开发途中碰到的各种问题。为此,小编特意开辟了一个救急板块,无论你开发哪种程序,无论你碰到什么问题,我们都可以给你提供帮助。来信请发到pcw-chendx@vip.sina.com。
关键词:返回顶部
读者来信:网页页面很长时,需要立即返回网页顶部,像淘宝那样的,这个如何实现?
小编:返回顶部代码一般使用链接锚点,即在链接后面加上#top,点击后便能立即返回页面顶部,例如<a href=" #top">返回顶部。如果想使用淘宝的返回顶部效果,需要写一段代码,判断页面当前位置,从而控制返回顶部按钮显示与否,详细代码参考淘宝网站。
关键词:图片大小自适应
读者来信:网页中显示图片,有时图片太宽会将页面撑开,图片能否自动适应网页,即图片太大时,会自动缩小至设置宽度,且图片不变形?
小编:实现图片自适应大小可以使用JavaScript,也可以使用CSS,推荐用CSS来控制。在<style></style>中添加如下代码:img {max-width:650px; width: expression(this.width > 650 && this.width > this.height ? 650px : 'auto';); max-height:1650px; height: expresion(this.height > 1650 ? 1650px : 'auto';); }图片宽度小于650px,按实际大小显示,超过650px,自动按比例缩小至650px,从而不影响页面效果。
关键词:外挂
开发QQ群:看了第37期开心农场外挂的文章,我有一个疑问,会不会出现做好了外挂以后,运行外挂时,鼠标点不准导致外挂失效的情况?如果出现了,该怎么办?
小编:这个可以放心,如果录制动作的时候没有点歪的话,运行时也不会点歪的,除非你改变了系统屏幕分辨率。
关键词:WAP文字行距
开发QQ群:我设计了一个WAP网站,页面中有很多文字,我采用宽度自适应的方式解决了文字显示的问题,不过却出现了一个问题,手机里显示的文字感觉很紧,需要设置间距。在Web中用line-height设置行距,但在WAP里却没有用,我应该怎么办?
小编:是你的代码位置不对,应该是将代码写在
中,这样手机便能自动解析行距。需要注意的是,不同的手机,显示效果会不一样,要有针对性地进行调试。关键词:一次性网页链接
读者来信:我想实现一个功能,制作一个网页链接,点击链接一次后就不能再点击,比如变成纯文本或者不再存在链接。
小编:这个效果有点意思,可以这样实现:设置链接点击之后,将链接的href属性删除,这样链接就不能再被点击了。因为失去了href属性,浏览器将会以纯文本的方式显示,代码如下:<a href="#" onclick="var link = this;setTimeout(function(){link.removeAttribute('href');link.onclick=link=null;}, 0);return true;" target="_blank">链接只能点一次哟</a>。
关键词:QQ主页换肤
读者来信:QQ主页提供了多种页面显示效果,点击不同颜色图标,会将主页配色全部改变,如何实现这种效果?
小编:网页换肤是通过JavaScript代码调用不同的CSS文件来实现的。各种不同颜色的小图标是一个个链接,网站提供有不同的配色CSS文件,点击后通过JavaScript调用并写入Cookies,实现下次访问能够显示同一皮肤。
关键词:组合键回复
读者来信:QQ聊天时,快速回复可以按“Ctrl+Enter”组合键,有一些论坛发帖时也可以按“Ctrl+Enter”组合键快速回帖,如何实现这种功能?
小编:网页中是利用JavaScript判断是否同时按下了“Ctrl+Enter”组合键,如果是则提交表单。另外Enter键的ASCⅡ是13,参考代码如下:
<script language=javascript>
ie = (document.all)? true:false
if (ie){ function ctlent(eventobject){if(event.ctrlKey && window.event.keyCode==13){this.document.form1.submit();}}
}
关键词:实时更新时间
开发QQ群:我需要制作一个在线考试网站,考生在线考试时,页面顶部能实时自动更新时间提醒考生,这个功能如何设计?
小编:实时更新时间,其实是调用本地系统的时间,然后利用JavaScript中的setInterval函数不断刷新,参考代码如下:
<div id="viewTime"></div>
<script type="text/javascript">
setInterval("document.getElementById(\"viewTime\").innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);
</script>