下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 网页游戏制作教程

网页游戏制作教程.doc

网页游戏制作教程

徐明直
2017-09-02 0人阅读 举报 0 0 暂无简介

简介:本文档为《网页游戏制作教程doc》,可适用于影视/动漫领域

网页游戏制作教程一、简单的程序框架。webgame程序构成:三大部分。第一是数据流程。第二是程序。第三是美术。其中数据流程包括了功能。也只有在功能中才能体现数据流程。数据流程相当的麻烦后面再讨论。比如最简单的卖买产品。要实现这个功能。那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强相应的双表是少不不了的。表的问题都简单了。关键是这个物品有什么用。这样物品的来源一大堆数据物品的走向又是一大堆数据。最后这些数据得绕成一个圈。绕圈是一件困难的事情。特别是功能和道具多了起来的时候。难度是的n次方。美术:UI。简洁漂亮的界面总会有好处。小图标。道具地图装备。一类至少个吧,大体上百把个是需要的。程序分个部分:服务器定时器。(C语言或自己设定服务器)定时循环执行某一段代码。而这段代码主要是根据数据库的数据进行更新。这个可以找个C语言程序员来做。对于C语言程序员来讲这个功能是相当的简单。当然具体的处理数据的判断和操作数据库需要你自己写。让C语言程序员给你段标准代码就行了。完全支持sql语句的。功能页面、功能函数。主要就是数据存取判断数据走向。ajax函数。(可选)某些需要伪即时的功能要用到。javascript函数。(可选)模拟客户端的数据计算。也就是webgame的与时间相关的数据。分为两部分。一部分是真实数据是由服务器端的定时器计算的。另一部分是只有初始值客户端显示用的。不需要即时同步仅仅需要模拟同步就行。数据库。一大堆基础数据表和详细数据表。基础数据表:比如等级到等级的用户的属性初始值。详细数据表:每个用户的具体属性。二、一个详细的例子。单纯的讨论数据流程是件痛苦的事情。讨论程序而不给代码也是比较痛苦。这里用的是phpmysql的。那就按一个超简单的webgame的方式来讨论。配上适当的代码。应该有所帮助。不足的地方也请大家指出对我个人也是帮助。我们不去考虑游戏的可玩性数值平衡等等问题。我们先只考虑一个简单例子的实现。那么一个webgame的基本内容需要些什么呢,数据库:玩家、地图、城市、建筑、武器、士兵。功能:登陆、升级、个人战斗、士兵之间的战斗、与城市的战斗、修建建筑、打造武器、买卖道具。(注意:每一个功能必然对应个或多个数据表。上面数据库中所列的只是基础中的基础。)首先是地图、城市、建筑。这里认为地图可以有多张城市在地图上建筑在城市内。地图表Map:MapID,X坐标,Y坐标,CityID(城市ID),描述。其中MapID是指地图的id。不是自动编号。一张地图就是一个MapID可以重复。城市表City:CityID,城市名字城市所有人城市等级城市资源描述。建筑表Build:IDCityID建筑名称建筑等级建筑功能。其中地图表确定城市的位置城市表确定城市的相关数据以及所有人建筑表内的多条信息属于某一个城市。建表后显示出来。一个for循环。把地图表整个取出来就ok。跟普通网站的新闻列表没太大区别。不同的是你需要取得X坐标和Y坐标定位。可以用tabel也可以用div。classMap地图类{var$MapIDfunctionMapbgcss($MapID){$this>MapID=$MapIDmysqlselectdb($dbname,$link)$sql=”select*frommapwhereMapID=’”$this>MapID”‘limit″$result=mysqlquery($sql,$link)echo“<styletype=””text””””css>”$rs=mysqlfetcharray($result)echo“#map{”echo“position:absolute”echo“width:”$rsX坐标”px”echo“height:”$rsY坐标”px”echo“zindex:”echo“left:pxtop:px}”}functionMapbg($MapID){$this>MapID=$MapID$sql=”select*frommapwhereMapID=’”$this>MapID”‘”$result=mysqlquery($sql,$link)while($rs=mysqlfetcharray($result)){echo“<divid=Layerbg”$rsX坐标””$rsY坐标”>”echo“<imgsrc=”$rsMapbg”border=title=”$rsID”><div>”}}}上面是一个很简单的地图类。代码可能不太正确意思是正确的。就是根据map表中的坐标生成了一组div层以及这一组层的css。你可以改为table的。你可以也把坐标放到一个字段里用数组的形式取。使用的时候用newmapmap(N)其中N是map表里的地图MapID城市内的建筑也类似。如果要显示出来的话。有了地图和城市后。涉及到的问题就是城市里资源的产生。这时候City表里需要有可供判断的时间和数量的字段。比如:产生资金量Money,产生资金花费的时间ActionTime,上次产生资金时间Moneytime。这两个字段的数值应该在Citybase表里出现。(即城市基础表不同等级不同类型城市的对应数值。这是给策划填数据用的建好表后就等策划去头痛吧。如果你身兼数职。。。)如何自动产生资源呢,我们可以在城市所有人改变的时候写入一个时间。或者在城市初始化的时候写入一个时间。$NowTime=date(’YmdH:i:s’)(说明:$开头是变量的意思。php里特有的。如果是asp的话可以写成。NowTime=Now())把$NowTime写入到Moneytime里。update(”UPDATECitySETMoneytime=’$NowTimeWHERECityID=’$CityID’LIMIT”)$CityID是你自己定义的。指某一个城市。如:$CityID=我们假定当前城市产生资金量为。即$Money=(具体的数值应该是由Citybase表里取出的。)假设间隔时间为$ActionTime,我们再假定是每小时执行一次。即$ActionTime=(具体的数值是根据你的初始化表里取得的。也可以根据城市等级或者用户等级取得。反正随便你自己怎么设定。)这时候有基础时间了。有基础资金产量了。有间隔时间了。让它循环执行起来就行了。上面说过服务端用C语言定时器。客户端用javascript。服务端资源定时器设定为分钟执行一次。那么我们的误差就是分钟。对网页游戏来说可以接受。(战斗的定时器得分钟吧。当然服务器够牛的话几秒钟都可以。)每次执行什么代码呢,首先得新建一个定时器任务的表。目的就是让定时器知道需要执行哪些程序和数据的更新。表内容比如:城市资源更新。当然这个表可要可不要。建立的好处是方便处理类似保护状态不产生资源之类的问题。服务端程序:获得当前服务器时间。获得当前需要更新城市。判断服务器时间与$Moneytime的时间差。(时间戳具体的时间戳网上资料满多的。)判断时间差是否大于$ActionTime。大于则更新资源。同时更新$Moneytime。小于则无操作。客户端程序:获得当前服务器时间。获得当前城市的$Money,$Moneytime,$ActionTime。使用javascript显示剩余时间的倒计时以及增加的资源量。客户端特殊情况触发:因为客户端显示的资源情况是伪同步所以当客户端使用该资源的时候。需要服务端将当前的实际资源更新属于定时器处理的时间也需要更新。即当客户端触发涉及资源的情况时立即更新当前资源。同时更新定时器中会用到的$Moneytime。这样才不会造成看的资源用不到或者定时器重复产生资源。总体来说。这部分程序都很简单。难点在C语言定时器的制作以及前台javascipt倒计时的写法上。C语言定时器找个C语言程序员超简单前台的javascipt网上有很多倒计时的代码找个来改改就能用。<SCRIPTLANGUAGE=”JavaScript”>varmaxtime=这里是你的时间差一个小时按秒计算自己调整!functionCountDown(){if(maxtime>=){minutes=Mathfloor(maxtime)seconds=Mathfloor(maxtime)msg=“你的文字说明”minutes”分”seconds”秒”动态显示剩余时间。documentall"timer"innerHTML=msgif(maxtime==)documentall"timer"innerHTML=’只剩秒~’–maxtime}else{clearInterval(timer)documentall"timer"innerHTML=’时间到’}}timer=setInterval(”CountDown()”,)<SCRIPT><divid=timer><div>这个是网上找的代码。稍微修改就可以用的。这里只是显示了倒计时。也可以改为显示资源的增加情况。C语言里操作mysql数据库。TODO:AddyourcontrolnotificationhandlercodehereboolbRes=mdbConnConnect(”数据库ip地址”,,“用户名”,“email=d!#ghj密码email“,“数据库名”)if(!bRes){AfxMessageBox(”connectfail”)return}stringstrSql=“select*fromcitylimit″所有显示或取值类的都用这段。中间的sql语句可以自己构造。ResultSet*rs=mdbConnExecuteQuery(strSql)while(rs>Next()){stringstr=rs>GetString(”username”)AfxMessageBox(strcstr())}*strSql=“updatecitysetmoney=moneywhereCityID=’xxx’”所有的增加、删除、更新都用这段中间的sql语句可以自己构造。bRes=mdbConnExecuteUpdate(strSql)if(!bRes){AfxMessageBox(”ExecuteUpdatefail”)}*mdbConnClose()定时器的主函数。voidCBeiLiDlg::Go(){while(true){AfxMessageBox(”go”)Sleep(*)毫秒。定时器刷新时间。}}相当的简单。当然。这里的C的代码不能直接用。只是一部分。地图、城市、基本上算是有了。接下来是城市里的建筑。上面讲的资源增加其实定位在建筑上更准确。不过建筑的分类和数值会复杂很多。那是策划考虑的问题。建筑上只讲一个前台的修建效果。当然这个效果是可有可无。你可以直接给个类似新闻列表的显示再加个倒计时就行。显示的效果就是点修建后。不刷新页面调入一张动画图片。并在时间到后自动转换为其他图片。<scriptlanguage=’javascript’>functionxiujian(){topabcdocumentgetElementById(’前台建筑位置所在图片的id’)src=’修建后建筑的图片地址’显示修建后的建筑图片。可以加上后台时间判断。其中abc是建筑所在层的id}functionxiujian(){setTimeout(’xiujian()’,)动画时间秒。这里也可以加入时间判断。当时间不到的完成的时候继续调用动画。}functiondonghua(){topabcdocumentgetElementById(’前台建筑位置所在图片的id’)src=’建筑动画所在的地址’显示修建动画。}donghua()xiujian()<script>后台部分把时间到增加资源的代码改为时间到增加或更新建筑就行了。又是增加N个表。。建筑基础表:产出类型图片等等。。建筑详细表:属于哪个城市可以在城市表里关联。关联的方式不同会对程序有很大的影响。各种关联方式都行但是一旦关联方式确定后最好别改动。现在建筑也有了。用类似的定时方式打工征兵等等都可以实现。战斗兵的参数:兵种数量攻击防御等等。战斗的临时表:谁的兵打谁出发时间战斗时间战斗结果。这里的几个字到是简单。实际的表会复杂一些。webgame中战斗的过程分两种一种是给出双方参数时间到就根据公式计算结果。一种是半即时或者即时的战斗可以边打边喝药边用技能的那种。第一种流程。点出兵。这时候兵的参数出发时间到达时间都记录进战斗临时表。定时器中处理战斗的部分判断时间是否到开打的时候。到开打的时间了则取得被攻击方的兵的参数。然后通过几个公式计算结果。处理结果比如谁的兵挂了多少战场掉落了多少钱城市被谁抢到了。一大堆判断以及updata。(这里的定时器处理和获得资源的定时器处理是很类似的。)最后把结果分别发给双方。(又涉及到一个短信息系统。)第二种流程。点攻击。马上就处理数据。打打npc好做。玩家之间对战也可以把被攻击的玩家当成npc来处理。两个人或两人以上即时战斗。需要用到ajax了。目前在技术上和理论上是没问题的还没实际写代码所以不好讲。很简单的公式两种战斗都可以用到:intval(sqrt($UserBAP)sqrt($UserADP))根号下攻击根号下防御=伤害。具体写的时候公式肯定会复杂不少不过这头痛的事还是交给策划去做吧。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/12

网页游戏制作教程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利