网页游戏程序包括:
三个部分。
首先是数据流。 二是程序。 第三是艺术。
其中,数据流包括函数。 数据流只能体现在函数中。
数据流程比较麻烦,后面再讲。
例如,最简单的方式是销售和购买产品。
来实现这个功能。
那么你需要一个产品基本表、产品明细表、商店表、背包表。 如果扩展性更强的话,相应的双表是必不可少的。
表上的问题都很简单。 关键是这个东西是用来做什么的。 这样就有了很多关于物品来源的数据,也有很多关于物品去向的数据。
最后,数据必须绕一圈。
绕圈子是一件困难的事情。 尤其是功能和道具较多的时候。 难度是2的n次方。
在绕圈之前,如果您对设计模式更有经验的话。 那么流程就可以简化。 难度从2的n次方变为1。
它只需要三个虚拟类:控制器、事件工厂和抽象道具工厂; 再加上定时器和任务编辑器这两个通用类。 也就是说,您可以构建一个强大且高度可扩展的网页游戏。
在网页游戏中,控制器几乎等同于页面。 使用任何模板技术都可以轻松对其进行处理。
事件工厂是一个抽象类。 所有的事件,如工作、战斗、移动等,都是由事件工厂生产的。 并且接口相同,方便控制器控制。 出厂模式。
抽象道具工厂是一个抽象类。 所有的道具,比如城市、地图、装备等,都是由抽象道具工厂生产的。 而且界面也是一样的,工厂模式,事件和道具的结合就是桥接模式。
艺术:
用户界面。 简单而美观的界面总是有好处的。 小图标。 道具、地图、设备。 一个类别至少有 10 个,对吗? 大约需要数百个。
程序分为5部分:
服务器计时器。 (C语言或者搭建自己的服务器)在定时循环中执行某段代码。 这段代码主要是根据数据库中的数据进行更新。 你可以找一个C语言程序员来做这件事。 对于C语言程序员来说,这个函数相当简单。 当然,处理数据和操作数据库的具体判断需要你自己写。 只要让C程序员给你一段标准代码就可以了。 完全支持sql语句。
对于php来说,可以配置corn来实现。 但无论是什么操作系统,最短配置时间都是1分钟。 所以,如果要处理每秒刷新一次的情况。 你还需要一个专门的定时器程序来处理它,或者定期执行的PHP需要包含sleep()。 当然,即使有实时交互,服务器端也可以忽略。 只有客户端处理交互的双方。 js和ajax实现。
功能页面,功能功能。 主要是数据的存取、判断、数据的走向。
使用抽象类会更容易。 但子品类的爆炸是少不了的。
ajax 函数。 (可选)由某些需要伪实时的函数使用。
让游戏看起来更酷。 用它。
JavaScript 函数。 (可选)模拟客户端数据计算。 即页游的时间相关数据。 分为两部分。 其中一部分是真实数据,由服务器端的计时器计算得出。 另一部分只有初始值,用于客户端显示。 不需要实时同步,只需要模拟同步。
这里还包括一些漂亮的 UI 效果。 毕竟这是一个游戏。
数据库。 一堆基础数据表和详细数据表。 基础数据表:例如用户从1级到100级的初始属性值。 详细数据表:每个用户的具体属性。
在数据库上,尝试优化它。 如果该结构可以使用 1 个字节橙光游戏,则不要使用 2 个字节。
2. 详细示例。
仅仅讨论数据流是痛苦的。
不给出代码就讨论程序也是比较痛苦的。
这里使用的是php+mysql。 此外,此示例不使用类。 如果有足够的时间,今年年底,我将提供一个简单的网页游戏代码和具有实时交互的核心类来说明使用设计模式的好处。
我们以一个超级简单的网页游戏来讨论吧。 与适当的代码配对。 应该有帮助。 有什么不足的地方请指出,这对我个人会有帮助。
我们不考虑游戏的可玩性、数值平衡性等。我们首先只考虑一个简单示例的实现。
那么页游的基本内容有哪些呢?
数据库:玩家、地图、城市、建筑物、武器、士兵。
功能:登陆、升级、个人战斗、士兵战斗、城市战斗、建造建筑物、制作武器、买卖道具。
(注:每个函数必须对应一张或多张数据表,上面数据库列出的只是基础中的基础。)
首先,有地图、城市和建筑物。
这里相信可以有多个地图,城市在地图上,建筑物在城市中。
地图图表
Map:Map_ID、X坐标、Y坐标、City_ID(城市ID)、描述。
其中Map_ID指的是地图的id。 不是自动编号。 一张地图就是一个Map_ID,可以重复。
城市列表
城市:City_ID、城市名称、城市所有者、城市等级、城市资源、描述。
建筑表
建筑:ID、City_ID、建筑名称、建筑等级、建筑功能。
其中,地图表确定了城市的位置,城市表确定了城市的相关数据和业主,建筑物表中的多条信息属于某个城市。
表创建完成后,会显示出来。
一个for循环。 只要把整个地图拿出来就可以了。
和普通网站上的新闻列表没有太大区别。 不同的是需要获取X坐标和Y坐标定位。 您可以使用 tabs 或 div。
代码
复制代码代码如下:
class Map //地图类
var $Map_ID;
函数 Map_bg_css($Map_ID) {
$this->Map_ID = $Map_ID;
mysql_select_db($db_name,$link);
$sql="select * from map where Map_ID='".$this->Map_ID."' limit 1";
$结果=mysql_query($sql,$link);
回声”
”;
上面是一个非常简单的地图类。 代码可能不太正确,意思是正确的。 根据地图表中的坐标,生成一组div图层以及这组图层的css。
您可以将其更改为表。 您还可以将坐标放入字段中并以数组形式检索它们。
使用时,使用
新地图;
地图(N);
其中N是地图表中的地图Map_ID。
城市中的建筑物也是如此。 如果要显示的话。
关于地图,现在我采用更简单的方法。 利用坐标来确定需要哪些图片,然后直接显示。 当然不会有碰撞什么的,因为暂时不需要。 至于人物的动作,就超出了本文的范围。
有了地图和城市后。 涉及的问题是城市资源的生成。
这时候City表就需要有时间和数量字段来进行判断。
例如:生成资金的金额Money、生成资金所需的时间Action_Time、上次生成资金的时间Money_time。
这两个字段的值应该出现在City_base表中。 (就是基本的城市表,不同级别、不同类型的城市对应的值。这个是用来填写规划的数据的,建表之后就等着规划就头疼了。如果你戴多个帽子...)
如何自动生成资源?
我们可以写一个城主变更的时间。 或者写一个城市初始化的时间。
$Now_Time=date('Ymd H:i:s');
(注:$开头表示变量,在php中是唯一的,如果是asp可以写成 . Now_Time=Now() )
将 $Now_Time 写入 Money_time。
update("更新城市 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分钟,当然如果服务器足够强大的话,也可以是几秒。)
当然,你可以完全用PHP编写php 网页游戏开发入门教程,然后配置PHP的corn。 我现在做的程序是直接用PHP写的。 包括任意长时间的定时器类,专门用于控制抽象事件。 C的定时器暂时不可用。
每次执行什么代码?
首先,您必须创建一个新的计时器任务表。 目的是让定时器知道需要执行哪些程序和数据更新。 表内容如:城市资源更新。 当然,这款手表是可选的。 建立它的好处是方便处理保护国家、不产生资源等问题。
服务器程序:
获取当前服务器时间。
获取当前需要更新的城市。
确定服务器时间和 $Money_time 之间的时间差。 (时间戳,关于具体时间戳网上有很多资料。)
判断时间差是否大于$Action_Time。
如果大于,则资源将被更新。 还更新 $Money_time。
如果小于,则不执行任何操作。
客户端程序:
获取当前服务器时间。
获取当前城市的$Money、$Money_time、$Action_Time。
使用javascript显示剩余时间的倒计时以及增加的资源量。
客户端特殊情况触发:
因为客户端显示的资源状态是伪同步的,当客户端使用资源时。 服务器需要更新当前的实际资源,属于定时器处理的时间也需要更新。
即当客户端触发涉及资源的情况时,立即更新当前资源。 同时,定时器中使用的$Money_time也被更新。 这样不会导致正在查看的资源未被使用php 网页游戏开发入门教程,或者定时器重复生成资源。
一般来说。 这部分程序非常简单。 难点在于C语言定时器的创建和前端javascipt倒计时的编写。
C语言定时器,找C语言程序员超级简单; 对于前端javascipt,网上有很多倒计时代码,你找一个修改一下就可以使用了。
代码
复制代码代码如下:
这是我在网上找到的代码。 稍作修改即可使用。 这里仅显示倒计时。 您还可以显示资源的增加。
C语言操作mysql数据库。
代码
复制代码代码如下:
// TODO: 在此处添加您的控件通知处理程序代码
bool bRes = m_dbConn.Connect("数据库ip地址", 3306, "用户名", "密码", "数据库名称");
if(!bRes)
AfxMessageBox("连接失败");
返回;
string strSql = "从城市限制1中选择*"; //所有显示或值类型都使用此部分。 中间的sql语句可以自己构造。
ResultSet* rs = m_dbConn.ExecuteQuery(strSql);
while(rs->下一个())
string str = rs->GetString("用户名");
AfxMessageBox(str.c_str());
/*
strSql = "update city set Money=money +100 where City_ID='xxx'";//所有的增删改查都使用这一段,中间的sql语句可以自己构造。
bRes = m_dbConn.ExecuteUpdate(strSql);
if(!bRes)
AfxMessageBox("执行更新失败");
*/
m_dbConn.Close();
主要功能是定时器。
无效 CBeiLiDlg::Go()
而(真)
// AfxMessageBox("去");
睡眠(5*1000);//毫秒。 定时器刷新时间。
当然。 这里的C代码不能直接使用。 只是其中的一部分。
新的方法是使用PHP定时器类负责前台,时间到了,调用ajax完成执行。 后台定期执行PHP定时器类的特殊处理函数,以处理前台断线、前台未正常执行等情况。
如果今年年底我们的新游戏能够正常上线的话。 我可以将这个类公开,这不是技术性的,但是非常聪明。
地图和城市基本都在那里。
接下来是城市中的建筑物。
上面提到的资源增加,其实从架构上来说定位更准确。 但建筑物的分类和数值会复杂很多。 这是一个规划考虑的问题。
建筑上我们只讲一个前台的建设效果。
当然,这个效果是可选的。 你可以直接给它一个类似新闻列表的显示,并添加倒计时。
点击Build后显示的效果。 无需刷新页面,加载动画图片。 并在时间到后自动转换为其他图片。
代码
复制代码代码如下:
顺便说一下吧。 如果要考虑多浏览器兼容性,请使用prototype.js。 如果你只需要 ff 和 ie。 然后使用jqury.js
或者尝试自己写一下。 因为120k的prototype.js已经不算小了。
后台部分只需将定时添加资源的代码改成定时添加或更新建筑即可。 再次添加N张表。 。
新方法是添加事件子类。
构建基本表格:输出、类型、图片等。 。
建筑详情表:属于哪个城市,可以在城市表中关联。 不同的关联方式会对节目产生很大的影响。 各种关联方式都可以,但关联方式一旦确定,最好不要改变。
现在也有建筑物了。 采用类似的计时方式,打工、征兵等都可以实现。
斗争,
士兵参数:类型、数量、攻击力、防御力等。
战斗临时表:谁的兵、谁的战、出发时间、战斗时间、战斗结果。
这里的几句话是如此简单。 实际的表会更复杂。
在网页游戏中,战斗过程分为两种。 一是给出双方的参数。 时间到了,根据公式计算结果。 一种是半实时或者实时战斗,可以边战斗边喝药、使用技能。
第一个过程。
点击即可出兵。 此时,士兵的参数、出发时间、到达时间都记录在战斗临时表中。
定时器中,处理战斗的部分就是判断是否到了开始战斗的时间。 当战斗开始时,获取被攻击方士兵的参数。 然后使用几个公式计算结果。 处理结果,比如杀了多少士兵、战场上掉了多少钱、谁占领了城市等。 大量的判断和更新。 (这里的定时器处理和获取资源的定时器处理很相似。)
最后将结果发送给双方。 (涉及到另一个短信系统。)
第二个过程。
点击进行攻击。 立即处理数据。 打败NPC很容易。 在玩家之间的战斗中,被攻击的玩家也可以被视为NPC。
两人或多人实时战斗。 你需要使用ajax。 目前技术上和理论上都没有问题。 我还没有真正写过代码,所以很难说。
现在,从技术上证实,可以很好地实现。
一个非常简单的公式,可以在两种战斗中使用:
intval(sqrt($User_B_AP)-sqrt($User_A_DP));
根数下的攻击-根数下的防御=伤害。
写下来的时候,公式肯定会复杂很多,不过这个头疼的事情就交给规划者吧。
战斗的具体参数其实程序已经不再考虑了。
程序只需要考虑从数据表A中获取数据,存入临时表B中,然后当时间到时(通过定时器实现),从数据表C中获取数据,通过公式计算,最后删除临时表表 B 或将临时表 B 保存到其他地方进行备份。
这里的想法实际上是计时器类。
数据是什么? 询问规划。 有多少张桌子? 询问规划。 战斗公式? 询问规划。
有地图、城市、建筑、士兵3D道具,战斗结束后,道具的出现是必须的。
为什么?
你能对一座城市做什么? 产生资源、产生金钱、产生士兵。
你对士兵做什么? 你可以抢夺资源和金钱。
资源和金钱怎么办? 购买道具。
你买道具有什么用? 更好地抢夺资源和金钱。
(同时,抢资源和金钱时,会消耗资源)
这是一个非常简单的循环。 它只是绕了一圈,虽然这个圈很小。 有些计划是经过深思熟虑的,但就是不能绕圈子制定,那就没有任何意义。
首先,您需要一个基本的道具表。 自动 ID、道具类型、道具属性、描述。 在道具的处理上,可以在玩家表中添加更多的字段,道具会跟随玩家。 您还可以创建单独的详细道具列表。 以类似于背包的方式实现。
背包的方式有两种,一种是使用数组存储,一种是使用水平表存储。 都是相当麻烦的事情。 但要从道具流通和交易的角度来考虑。 值得使用背包方法。 下一个功能。
店铺。 拍卖。 基本上它与一般的网站应用程序非常相似。 只是产品变成了游戏中的道具。 货币为游戏币。
三、总结
上面的小例子从思路上来说基本完整,没有问题。 只给出了一小部分程序代码,所以你可以真正理解这一小部分。 程序的其他部分应该没有问题。
页游重要的是数据流的循环和可玩性。
现在我们来谈谈:程序的健壮性和数据流的清晰度。
以上功能如果真正实现的话还不够玩。 玩起来一点乐趣也没有,而且制作起来也毫无意义。
然而,仅仅做到这一点仍然是一件困难的事情。
游戏中涉及到的东西非常多。 即使是一个很简单的游戏,即使网页游戏看起来很简单,其实也很简单; 很难做到。
没有网页游戏开发经验的人应该去策划网页游戏或者开发网页游戏。 会感觉很简单。 实际上只有几个大的功能。 你的思维也很容易陷入困境。
实际情况是,一个很简单的函数,当需要绕一圈的时候; 当需要交互时。 这个功能不再简单,而是复杂,相当复杂。
这是当你不太了解设计模式时。 如果你精通设计模式,功能就会变得更简单。
尤其是想做一款有足够可玩性、能够面向市场的产品,哪怕最初的想法很简单,功能也很简单。 但当你真正计划、真正编程时。 大量的数据和值需要你处理,大量的交互需要你处理。 这个时候,原本简单的事情就变得复杂了。 虽然从程序角度来看,技术含量并不高。
更准确的说,是很麻烦,非常麻烦。
一个优秀的规划师可以将数据列在表格中,清晰地列出数据趋势,并摆在你的面前。 类似这样的计划并不多。
当然他可能列举的不准确,但是程序员可以更准确地理解他的意思。