为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

网页游戏制作教程

2017-09-02 11页 doc 28KB 128阅读

用户头像

is_842972

暂无简介

举报
网页游戏制作教程网页游戏制作教程 一、简单的程序框架。 webgame程序构成: 三大部分。 第一是数据流程。第二是程序。第三是美术。 其中,数据流程包括了功能。也只有在功能中才能体现数据流程。 数据流程相当的麻烦,后面再讨论。 比如最简单的卖买产品。 要实现这个功能。 那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强, 相应的双表是少不不了的。 表的问题都简单了。关键是这个物品有什么用。这样物品的来源,一大堆 数据,物品的走向,又是一大堆数据。 最后,这些数据得绕成一个圈。 绕圈是一件困难的事情。特别是...
网页游戏制作教程
网页游戏制作教程 一、简单的程序框架。 webgame程序构成: 三大部分。 第一是数据流程。第二是程序。第三是美术。 其中,数据流程包括了功能。也只有在功能中才能体现数据流程。 数据流程相当的麻烦,后面再讨论。 比如最简单的卖买产品。 要实现这个功能。 那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强, 相应的双表是少不不了的。 表的问题都简单了。关键是这个物品有什么用。这样物品的来源,一大堆 数据,物品的走向,又是一大堆数据。 最后,这些数据得绕成一个圈。 绕圈是一件困难的事情。特别是功能和道具多了起来的时候。难度是2的 n次方。 美术: UI。简洁漂亮的界面总会有好处。 小图标。道具,地图,装备。一类至少10个吧?大体上百把个是需要的。 程序分5个部分: 服务器定时器。(C语言或自己设定服务器)定时循环执行某一段代码。而这段代码主要是根据数据库的数据进行更新。这个可以找个C语言程序员来做。对于C语言程序员来讲,这个功能是相当的简单。当然,具体的处理数据的判断和操作数据库,需要你自己写。让C语言程序员给你段代码就行了。完全支持sql语句的。 功能页面、功能函数。主要就是数据存取,判断,数据走向。 ajax函数。(可选)某些需要伪即时的功能要用到。 javascript函数。(可选)模拟客户端的数据计算。也就是webgame的与时间相关的数据。分为两部分。一部分是真实数据,是由服务器端的定时器计算的。另一部分是只有初始值,客户端显示用的。不需要即时同步,仅仅需要模拟同步就行。 数据库。一大堆基础数据表和详细数据表。基础数据表:比如等级1到等级100的用户的属性初始值。详细数据表:每个用户的具体属性。 二、一个详细的例子。 单纯的讨论数据流程是件痛苦的事情。 讨论程序而不给代码也是比较痛苦。 这里用的是php+mysql的。 那就按一个超简单的webgame的方式来讨论。配上适当的代码。应该有所帮助。不足的地方也请大家指出,对我个人也是帮助。 我们不去考虑游戏的可玩性,数值平衡等等问题。我们先只考虑一个简单例子的实现。 那么一个webgame的基本内容需要些什么呢? 数据库:玩家、地图、城市、建筑、武器、士兵。 功能:登陆、升级、个人战斗、士兵之间的战斗、与城市的战斗、修建建筑、打造武器、买卖道具。 (注意:每一个功能,必然对应1个或多个数据表。上面数据库中所列的只是基础中的基础。) 首先是地图、城市、建筑。 这里认为,地图可以有多张,城市在地图上,建筑在城市内。 地图表 Map:Map_ID,X坐标,Y坐标,City_ID(城市ID),描述。 其中Map_ID是指地图的id。不是自动编号。一张地图就是一个Map_ID,可以重复。 城市表 City:City_ID,城市名字,城市所有人,城市等级,城市资源,描述。 建筑表 Build:ID,City_ID,建筑名称,建筑等级,建筑功能。 其中,地图表确定城市的位置,城市表确定城市的相关数据以及所有人,建筑表内的多条信息属于某一个城市。 建表后,显示出来。 一个for循环。把地图表整个取出来就ok。 跟普通网站的新闻列表没太大区别。不同的是,你需要取得X坐标和Y坐标定位。可以用tabel也可以用div。 class Map//地图类 { var$Map_ID; function Map_bg_css($Map_ID){ -Map_ID=$Map_ID; $this mysql_select_db($db_name,$link); $sql="select*from map where Map_ID='".$this-Map_ID."'limit 1″; $result=mysql_query($sql,$link); echo"style type="."text"."/"."css"; $rs=mysql_fetch_array($result); echo"#map{"; echo"position:absolute;"; echo"width:".$rs[X坐标]."px;"; echo"height:".$rs[Y坐标]."px;"; echo"z-index:0;"; echo"left:0px;top:0px;}"; } function Map_bg($Map_ID){ $this-Map_ID=$Map_ID; $sql="select*from map where Map_ID='".$this-Map_ID."'"; $result=mysql_query($sql,$link); while($rs=mysql_fetch_array($result)) { ]."_".$rs[Y坐标].""; echo"div id=Layer_bg_".$rs[X坐标 echo"img src=".$rs[Map_bg]."border=0 title=".$rs[ID]."/div"; } } } 上面是一个很简单的地图类。代码可能不太正确,意思是正确的。就是根 据map表中的坐标,生成了一组div层,以及这一组层的css。 你可以改为table的。你可以也把坐标放到一个字段里,用数组的形式取。 使用的时候,用 new map; map(N); 其中N是map表里的地图Map_ID. 城市内的建筑也类似。如果要显示出来的话。 有了地图和城市后。 涉及到的问题就是城市里资源的产生。 这时候,City表里需要有可供判断的时间和数量的字段。 比如:产生资金量Money,产生资金花费的时间Action_Time,上次产生资金时间Money_time。 这两个字段的数值应该在City_base表里出现。(即城市基础表,不同等级,不同类型城市的对应数值。这是给策划填数据用的,建好表后就等策划去头痛吧。如果你身兼数职。) 如何自动产生资源呢? 我们可以在城市所有人改变的时候,写入一个时间。或者在城市初始化的时候写入一个时间。 $Now_Time=date('Y-m-d H:i:s'); (说明:$开头是变量的意思。php里特有的。如果是asp的话可以写成。Now_Time=Now()) 把$Now_Time写入到Money_time里。 update("UPDATE City SET Money_time='$Now_Time WHERE City_ID='$City_ID'LIMIT 1;"); $City_ID是你自己定义的。指某一个城市。如:$City_ID=1; 我们假定当前城市产生资金量为100。即$Money=100;(具体的数值,应该是由City_base表里取出的。) 假设间隔时间为$Action_Time,我们再假定是每小时执行一次。即$Action_Time=3600;(具体的数值,是根据你的初始化表里取得的。也可以根据城市等级或者用户等级取得。反正随便你自己怎么设定。) 这时候,有基础时间了。有基础资金产量了。有间隔时间了。 让它循环执行起来就行了。 上面说过,服务端用C语言定时器。客户端用javascript。 服务端,资源定时器设定为5分钟执行一次。那么我们的误差就是5分钟。对网页游戏来说,可以接受。(战斗的定时器得1分钟吧。当然服务器够牛的话,几秒钟都可以。) 每次执行什么代码呢? 首先得新建一个定时器任务的表。目的就是让定时器知道需要执行哪些程序和数据的更新。表内容比如:城市资源更新。当然,这个表可要可不要。建立的好处是方便处理类似保护状态不产生资源之类的问题。 服务端程序: 获得当前服务器时间。 获得当前需要更新城市。 时间戳,具体的时间戳网上资判断服务器时间与$Money_time的时间差。( 料满多的。) 判断时间差是否大于$Action_Time。 大于,则更新资源。同时更新$Money_time。 小于,则无操作。 客户端程序: 获得当前服务器时间。 获得当前城市的$Money,$Money_time,$Action_Time。 使用javascript显示剩余时间的倒计时,以及增加的资源量。 客户端特殊情况触发: 因为客户端显示的资源情况是伪同步,所以当客户端使用该资源的时候。需要服务端将当前的实际资源更新,属于定时器处理的时间也需要更新。 即,当客户端触发涉及资源的情况时,立即更新当前资源。同时更新定时器中会用到的$Money_time。这样才不会造成,看的资源用不到,或者定时器重复产生资源。 总体来说。这部分程序都很简单。难点在C语言定时器的制作,以及前台javascipt倒计时的写法上。 C语言定时器,找个C语言程序员,超简单;前台的javascipt,网上有很多倒计时的代码,找个来改改就能用。 SCRIPT LANGUAGE="JavaScript" var maxtime=这里是你的时间差///一个小时,按秒计算,自己调整~ function CountDown(){ if(maxtime=0){ minutes=Math.floor(maxtime/60); seconds=Math.floor(maxtime`); msg="你的文字说明"+minutes+"分"+seconds+"秒";//动态显示剩余时间。 document.all["timer"].innerHTML=msg; //if(maxtime==3)document.all["timer"].innerHTML='只剩3秒~'; – maxtime; } else{ clearInterval(timer); document.all["timer"].innerHTML='时间到'; } } timer=setInterval("CountDown()",1000); /SCRIPT div id=timer/div 这个是网上找的代码。稍微修改就可以用的。这里只是显示了倒计时。也可以改为显示资源的增加情况。 C语言里操作mysql数据库。 //TODO:Add your control notification handler code here bool bRes=m_dbConn.Connect("数据库ip地址",3306,"用户名","[email=d203~@#ghj]密码[/email]","数据库名"); if(~bRes) { AfxMessageBox("connect fail"); return; } string strSql="select*from city limit 1″;//所有显示或取值类的都用这段。中间的sql语句可以自己构造。 ResultSet*rs=m_dbConn.ExecuteQuery(strSql); while(rs-Next()) { string str=rs-GetString("username"); AfxMessageBox(str.c_str()); } m_dbConn.Close(); 定时器的主函数。 void CBeiLiDlg:Go() { while(true) { //AfxMessageBox("go"); Sleep(5*1000);//毫秒。定时器刷新时间。 } } //相当的简单.。 当然。这里的C的代码不能直接用。只是一部分。 地图、城市、基本上算是有了。 接下来是城市里的建筑。 上面讲的资源增加,其实定位在建筑上更准确。不过建筑的分类和数值会 复杂很多。那是策划考虑的问题。 建筑上,只讲一个前台的修建效果。 当然,这个效果是可有可无。你可以直接给个类似新闻列表的显示,再加个倒计时就行。 显示的效果就是,点修建后。不刷新页面,调入一张动画图片。并在时间到后自动转换为其他图片。 script language='javascript' function xiujian() { top.abc.document.getElementById_x('前台建筑位置所在图片的id').src='修建后建筑的图片地址'; //显示修建后的建筑图片。可以加上后台时间判断。其中abc,是建筑所 , 在层的id } function xiujian1() { setTimeout('xiujian()',5000);//动画时间5秒。这里也可以加入时间判断。当时间不到的完成的时候,继续调用动画。 } function donghua() { top.abc.document.getElementById_x('前台建筑位置所在图片的id').src='建筑动画所在的地址';//显示修建动画。 } donghua(); xiujian1(); /script 后台部分,把时间到增加资源的代码改为时间到增加或更新建筑就行了。又是增加N个表。 建筑基础表:产出,类型,图片等等。 建筑详细表:属于哪个城市,可以在城市表里关联。关联的方式不同会对程序有很大的影响。各种关联方式都行,但是一旦关联方式确定后,最好别改动。 现在建筑也有了。用类似的定时方式,打工,征兵等等都可以实现。 战斗, 兵的参数:兵种,数量,攻击,防御等等。 战斗的临时表:谁的兵,打谁,出发时间,战斗时间,战斗结果。 这里的几个字到是简单。实际的表会复杂一些。 webgame中,战斗的过程分两种, 一种是给出双方参数,时间到,就根据公式计算结果。 一种是半即时或者即时的战斗,可以边打边喝药边用技能的那种。 第一种流程。 点出兵。这时候,兵的参数,出发时间,到达时间,都记录进战斗临时表。 定时器中,处理战斗的部分,判断时间是否到开打的时候。到开打的时间了,则取得被攻击方的兵的参数。然后通过几个公式计算结果。处理结果,比 如谁的兵挂了多少,战场掉落了多少钱,城市被谁抢到了。一大堆判断以及updata。(这里的定时器处理和获得资源的定时器处理是很类似的。) 最后把结果分别发给双方。(又涉及到一个短信息系统。) 第二种流程。 点攻击。马上就处理数据。打打npc好做。玩家之间对战,也可以把被攻击的玩家当成npc来处理。 两个人或两人以上即时战斗。需要用到ajax了。目前在技术上和理论上是没问题的,还没实际写代码,所以不好讲。 很简单的公式,两种战斗都可以用到: intval(sqrt($User_B_AP)-sqrt($User_A_DP)); 根号下攻击-根号下防御=伤害。
/
本文档为【网页游戏制作教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索