当前位置: 首页 > Web前端 > HTML

网页游戏开发入门

时间:2023-04-03 01:12:17 HTML

网页游戏开发入门教程1(webgame+design)1.一个简单的程序框架。网页游戏程序由三部分组成。首先是数据流。二是程序。三是艺术。其中,数据流包括函数。数据流只能体现在功能上。数据流程比较繁琐,后面再说。比如最简单的买卖产品。来实现这个功能。然后你需要有一个产品基本表,一个产品明细表,一个商店表和一个背包表。如果扩展性更强,相应的双表是必不可少的。表题很简单。关键是这东西有什么用。这样item的来源就是一大堆数据,item的流向就是另外一大堆数据。最后,数据还得绕个圈子来。绕圈子是一件很难的事情。尤其是当功能和道具比较多的时候。难度是2的n次方。兜兜转转之前,如果你对设计模式比较精通的话。然后可以简化过程。难度从2的n次方变为1,虚类只有三个:controller、eventfactory、abstractpropsfactory;加上定时器,任务编辑器,这两个通用类。也就是说,可以构建健壮且高度可扩展的网页游戏。控制器几乎相当于网页游戏中的页面。它可以使用任何模板技术轻松处理。事件工厂是一个抽象类,所有的事件,如工作、战斗、移动等,都是由事件工厂产生的。并且接口相同,方便控制器控制。工厂模式。抽象道具工厂是一个抽象类,所有的道具,比如城市,地图,装备等等,都是由抽象道具工厂生产出来的。和界面一样,工厂模式,事件和道具的结合是一种桥接模式。艺术:用户界面。干净漂亮的界面总能带来回报。小图标。道具、地图、设备。一节课至少10个吧?大约需要数百个。该程序分为5个部分:服务器定时器。(C语言或自己设置服务器)定时循环执行某段代码。而这段代码主要是根据数据库中的数据进行更新。这可以由C语言程序员完成。对于C语言程序员来说,这个函数相当简单。当然需要自己写判断具体的数据处理和操作数据库。请C语言程序员给你一个标准的代码就可以了。完全支持sql语句。对于php,可以配置corn来实现。但不管是什么操作系统,最短的配置时间都是1分钟。所以,如果要处理每1秒刷新一次的情况。还需要专门的定时器程序来处理,或者定时执行的php需要包含sleep()。当然,即使有即时交互,服务器端也可以忽略。只处理交互双方的客户端。js和ajax实现。功能页面,功能功能。主要是数据的访问、判断、数据的方向。使用抽象类会更容易。但是子类的爆炸是少不了的。阿贾克斯功能。(可选)由某些需要伪立即的函数使用。让游戏看起来更酷。用它。javascript函数。(可选)模拟客户端数据计算。即webgame的时间相关数据。分为两部分。其中一部分是真实数据,由服务器端的定时器计算。另一部分只是初始值,由客户端显示。不需要实时同步,只需要模拟同步。这里还包括一些不错的UI效果。毕竟是游戏。数据库。很多基本数据表和详细数据表。基础数据表:例如1级到100级用户的属性初始值。详细数据表:每个用户的具体属性。在数据库上,尝试对其进行优化。如果可以在结构上使用1个字节,请不要使用2个字节。第二,详细的例子。简单地讨论数据流是一件痛苦的事情。讨论程序不给代码也比较痛苦。这里使用的是php+mysql。此外,此示例不使用类。如果时间充裕,今年年底我会提供一个简单的网页游戏代码和即时交互的核心类来说明使用设计模式的好处。然后以一个超简单的网页游戏的方式来讨论。使用适当的代码。应该有帮助。不足之处请指出,对我个人也有帮助。我们不考虑游戏的可玩性、数值平衡等问题。让我们首先考虑一个简单示例的实现。那么网页游戏的基本内容是什么?数据库:玩家、地图、城市、建筑、武器、士兵。功能:登陆、升级、单兵对战、士兵对战、城市对战、建造建筑、打造武器、买卖道具。(注:每个功能必须对应一个或多个数据表,上面列出的数据库只是基础中的基础。)首先是地图、城市、建筑。这里认为可以有多个地图,城市在地图上,建筑物在城市中。地图表Map:Map_ID,X坐标,Y坐标,City_ID(城市ID),描述。其中Map_ID指的是地图的id。不是自动编号。一张地图就是一个Map_ID,可以重复。城市表City:City_ID、城市名称、城市所有者、城市级别、城市资源、描述。建筑表Build:ID、City_ID、建筑名称、建筑等级、建筑功能。其中,地图表决定了城市的位置,城市表决定了城市的相关数据和所有者,建筑??表中的多条信息属于某个城市。创建表后,将显示它。一个for循环。把整张地图拿出来就ok了。与普通网站的新闻列表没有太大区别。不同的是需要获取X和Y坐标进行定位。您可以使用制表符或分区。1类地图//地图类2{3var$Map_ID;4函数Map_bg_css($Map_ID){56$this->Map_ID=$Map_ID;78mysql_select_db($db_name,$link);9$sql="select*frommapwhereMap_ID='".$this->Map_ID."'limit1";10$result=mysql_query($sql,$链接);11echo"";12$rs=mysql_fetch_array($result);1314echo"#map{";15echo"position:absolute;";16echo"width:".$rs[X坐标]."px;";17echo"height:".$rs[Y坐标]."px;";18echo"z-index:0;";19echo"left:0px;top:0px;}";2021}2223functionMap_bg($Map_ID){2425$this->Map_ID=$Map_ID;2627$sql="select*frommapwhereMap_ID='".$this->Map_ID."'";28$结果=mysql_query($sql,$link);29while($rs=mysql_fetch_array($result))30{31echo"";32echo"

";3334}3536}37}38上面是一个非常简单的地图类。代码可能不太正确,意思是正确的。根据地图表格中的坐标,生成一组div层和这组层的css。您可以更改为表。您还可以将坐标放在一个字段中并将它们作为数组获取。使用的时候,使用newmap;map(N);其中N是映射表中的映射Map_ID。城里的建筑大同小异。如果要显示的话。关于地图,我现在使用它的方式更简单。使用坐标确定需要哪些地图,然后直接显示。当然没有碰撞什么的,因为暂时不需要。至于人物走路什么的,不在本文讨论范围之内。随着地图和城市。涉及到的问题是城市资源的生成。这时候City表就需要有可以判断时间和数量的字段。例如:产生资金的金额Money,产生资金所花费的时间Action_Time,最后一次产生资金的时间Money_time。这两个字段的值应该会出现在City_base表中。(也就是城市基础表,不同级别不同类型城市对应的值。这个是用来填规划的数据的,建表之后,等规划就头疼了。如果你有多个角色...)如何自动生成资源毛呢布?我们可以写一个城市里每个人都改变的时代。或者写一个城市初始化的时间。$Now_Time=date('Y-m-dH:i:s');(说明:$开头的意思是一个变量,在php中是唯一的,如果是asp可以写成.Now_Time=Now())把$Now_Time写到里面的Money_time。update("UPDATECitySETMoney_time='$Now_TimeWHERECity_ID='$City_ID'LIMIT1;");$City_ID由您定义。指某一个城市。例如:$City_ID=1;我们假设当前城市产生的资金量为100。即$Money=100;(具体取值要从City_base表中获取。)假设间隔为$Action_Time,我们假设每小时执行一次。即$Action_Time=3600;(具体值根据你的初始化表获取,也可以根据城市级别或者用户级别获取,反正你自己设置即可)这时候就有一个基本时间了。有一个基本的资本输出。有间隔。让它循环运行。上面提到,服务器端使用的是C语言的定时器。客户端使用javascript。在服务器端,资源计时器设置为每5分钟执行一次。那么我们的错误是5分钟。对于网页游戏,这是可以接受的。(battletimer应该是1分钟,当然如果服务器够好,几秒也可以。)当然你也可以完全用php写,然后配置php的corn。我现在做的程序是直接用php写的。包括任何长时间定时器类,专门用来控制抽象事件。C的定时器暂时没用。每次执行什么代码?首先新建一个定时任务表。目的是让定时器知道需要执行哪些程序和数据更新。表格内容如:城市资源更新。当然,这款手表是可选的。建立的好处是方便处理保护状态不生成资源等问题。服务器程序:获取当前服务器时间。获取当前需要更新的城市。确定服务器时间和$Money_time之间的时差。(时间戳,具体时间戳网上资料全。)判断时间差是否大于$Action_Time。如果大于,则更新资源。同时更新$Money_time。如果小于,则不采取任何措施。客户端程序:获取当前服务器时间。获取当前城市的$Money、$Money_time、$Action_Time。使用javascript显示剩余时间的倒计时,以及添加的资源量。由客户端的特殊情况触发:由于客户端显示的资源情况是伪同步的,当客户端使用资源时。服务器需要更新当前的实际资源,属于定时器处理的时间也需要更新。即当客户端触发涉及资源的情况时,立即更新当前资源。同时更新定时器中使用的$Money_time。这样就不会导致看到资源没有被使用,或者定时器重复产生资源。一般来说。这部分程序非常简单。难点在于C语言定时器的制作和前台javascipt倒计时的写法。C语言定时器,找C语言程序员超级容易;前台的javascipt,网上有很多倒计时代码,你可以找一个修改一下使用。11920
21这是网上找的代码。稍作修改即可使用。这里只显示倒计时。您也可以改为显示资源的增加。用C语言操作mysql数据库。1//TODO:在此处添加您的控件通知处理程序代码2boolbRes=m_dbConn.Connect("databaseipaddress",3306,"username","password","databasename");3if(!bRes)4{5AfxMessageBox("连接失败");6返回;7}89stringstrSql="select*fromcitylimit1";//该段用于所有显示或取值类型。中间的sql语句可以自己构造。10结果集*rs=m_dbConn.ExecuteQuery(strSql);11while(rs->Next())12{13stringstr=rs->GetString("username");14AfxMessageBox(str.c_str());15}16/*17strSql="updatecitysetmoney=money+100whereCity_ID='xxx'";//所有的增删改查都用到这一段,中间的SQL语句可以自己构造。1819bRes=m_dbConn.ExecuteUpdate(strSql);20if(!bRes)21{22AfxMessageBox("ExecuteUpdatefail");23}24*/25m_dbConn.Close();2627定时器的主要功能。28voidCBeiLiDlg::Go()29{30while(true)31{32//AfxMessageBox("go");3334Sleep(5*1000);//毫秒。定时器刷新时间。35}36}当然可以。这里的C代码不能直接使用。只是其中的一部分。新的方法是通过php定时器类来负责前台,时间到后调用ajax完成执行。后台定时执行php定时器类的特殊处理函数,处理前台断线,前台没有正常执行的情况。如果我们的新游戏能在今年年底正常上线。我可以把这个类公开,这不是技术性的,而是巧妙的。地图,城市,基本都有。接下来是城市中的建筑物。上面说的资源增加,其实从建设上来说更准确。然而,建筑物的分类和价值将复杂得多。这是规划考虑的问题。在建筑方面,我们只谈一个前台的建筑效果。当然,这种影响是可有可无的。可以直接给一个类似新闻列表的展示,加上倒计时。显示的效果是,点击build之后。在不刷新页面的情况下加载动画图片。并在时间到时自动转换为其他图片。118顺带一提。如果要考虑多浏览器兼容性,那就用prototype.js吧。如果只需要ff和ie。那就用jqury.js或者自己写试试吧。因为120kprototype.js已经不小了。在后台部分,将时间到时添加资源的代码更改为时间到,添加或更新建筑物。就是增加N张表。.新方法是增加事件子类。构建基本表:输出、类型、图片等。建筑明细表:属于哪个城市,可以在城市表中进行关联。不同的关联方式会对程序产生很大的影响。各种关联方式都可以,但是关联方式一旦确定,最好不要更改。现在也有建筑物。使用类似的计时方法,兼职、征兵等都可以实现。战斗、兵种参数:兵种、数量、攻击、防御等。战斗临时表:谁的兵,打谁,出发时间,战斗时间,战斗结果。这里的几句话很简单。实际的表会稍微复杂一些。在网页游戏中,战斗过程有两种,一种是给出双方的参数,时间到了,根据公式计算结果。一种是半实时或实时战斗,就是那种一边喝药一边战斗,一边使用技能一边战斗的类型。第一个过程。点击派兵。此时士兵的参数、出发时间、到达时间都记录在战斗临时表中。在定时器中处理战斗的部分,判断是否到了开始战斗的时间。开战时,获取被攻击方棋子的参数。然后通过几个公式计算结果。处理结果,比如有多少士兵被杀,战场上掉了多少钱,谁拿下了城市。很多判断和updata。(这里的定时器处理和获取资源的定时器处理很相似。)最后将结果发送给双方。(还涉及到短信系统。)第二个过程。点攻击。立即处理数据。击中npc很容易做到。在玩家之间的战斗中,被攻击的玩家也可以被视为npc。两个或更多人实时战斗。需要使用ajax。目前技术上和理论上都没有问题。我还没有真正编写代码,所以很难说。现在,技术上已经确定,可以很好的实现。一个非常简单的公式,可以在两个战斗中使用:intval(sqrt($User_B_AP)-sqrt($User_A_DP));根号下的攻击-根号下的防御=伤害。到具体写的时候,公式肯定会复杂很多,这个头疼的就交给策划吧。战斗的具体参数其实是程序没有考虑的。程序只需要考虑从数据表A中获取数据,存储到临时表B中,然后当时间到了(通过定时器实现),从数据表C中获取数据,通过公式计算,最后临时表B被删除或另存为备份。这里的思路其实就是定时器类。数据是什么?求一个计划。有几张桌子?求一个计划。战斗公式?求一个计划。有了地图、城市、建筑、士兵、战斗之后,道具的出现是必不可少的。为什么?一个城市能做什么?生资源,生钱,生兵。士兵怎么办?可以抢资源,可以抢钱。资源和金钱有什么用?购买道具。你买道具干什么?更好的抢资源抢钱。(同时抢夺资源和金钱时,会消耗资源)这是一个很简单的循环。它只是形成一个圆圈,虽然这个圆圈很小。有的计划想得很好,就是绕不开圈子,所以没有任何意义。首先,需要一个props的基表。自动ID、道具类型、道具属性、描述。在道具的处理上,可以在玩家表中增加更多的字段,道具跟随玩家。您还可以单独创建一个详细的道具表。以类似背包的方式实施。背包的存放方式有两种,一种是存放在数组中,另一种是存放在横表中。都很麻烦。但是,从道具的流通和交易来考虑。使用背包方式是值得的。下一个功能。店铺。拍卖。基本上,它与一般的网站应用程序非常相似。只不过产品变成了游戏中的道具而已。货币为游戏货币。3.总结上面的小例子,思路基本完美,没问题。只给出了一小部分程序代码,这一小部分才真正能够看懂。程序的其他部分应该没有问题。网页游戏最重要的是数据流量和可玩性的循环。现在我们来谈谈:程序的健壮性和数据流的清晰度。以上功能,如果真的做出来了,玩起来还不够。就是不好玩,做起来也没有意义。然而,仅仅做到这一点,依然是一件困难的事情。游戏中涉及的东西太多了。即使是很简单的游戏,即使网页游戏看起来很简单,其实也很简单;很难做到。没有页游开发经验的人策划页游或者开发页游。会觉得很简单。实际上只有几个主要功能。思维上也容易打圈。实际情况是,一个很简单的函数,需要绕一圈的时候;需要交互的时候。这个功能不再简单,而是复杂,相当复杂。这是你对设计模式还不太了解的时候,如果你精通设计模式,那么功能就简单了。尤其是你想做一个有足够可玩性、可以营销的产品,哪怕一开始的想法很简单,功能也很简单。但是当你真正计划的时候,当你真正编程的时候。你需要处理大量的数据和值,你需要处理大量的交互。这时候,原本简单的事情变得复杂了。虽然从程序上看,技术含量不高。更准确的说,是繁琐,非常繁琐。一个好的方案就是把数据表列出来,把数据趋势列清楚,摆在你面前。这样的计划并不多。当然,他可能没有被列的很准确,但是程序员可以更准确的理解他的意思。