如何制作一个类似盗版三国的FLASH游戏?

首先,一个简单的程序框架。

网页游戏程序构成:

三大部分。

首先是数据流。第二是程序。第三是艺术。

其中,数据流包括函数。只有在函数中才能体现数据流。数据流比较麻烦,后面会讲到。

比如最简单的卖买产品。

来实现这个功能。

然后你需要有一个产品基本表,一个产品详情表,一个店铺表,一个背包表。如果伸缩性更强,相应的双表必不可少。

桌子的问题很简单。关键是这个物品是干什么用的。所以商品的来源,很多数据,商品的走向,很多数据。

最后,这些数据必须用圆圈包裹起来。

兜圈子是一件困难的事情。尤其是功能和道具比较多的时候。难度是2的n次方。美术:UI。简洁美观的界面总是好的。小图标。道具,地图,装备。一类至少10?一般需要几百个。该计划分为五个部分:

服务器定时器。(C语言或者自己设置的服务器)周期性循环执行某段代码。而这个代码主要是根据数据库中的数据进行更新的。这可以由C语言程序员来完成。对于C语言程序员来说,这个函数相当简单。当然,你需要写具体的数据处理判断和数据库操作。只要让C语言程序员给你一个标准代码就行了。完全支持sql语句。功能页面,功能函数。主要是数据访问,判断和数据趋势。Ajax函数。(可选)应该使用一些需要伪即时性的功能。Javascript函数。(可选)模拟客户端的数据计算。也就是webgame的时间相关数据。分为两部分。一部分是真实数据,是服务器端的定时器计算出来的。另一部分只是初始值,用于客户端显示。不需要即时同步,只需要模拟同步。数据库。很多基础数据表和详细数据表。基础数据表:例如等级为1到100的用户的属性初始值。详细数据表:每个用户的具体属性。其次,一个详细的例子。单纯讨论数据流是一件痛苦的事情。

讨论程序不给出代码也很痛苦。

这里用的是Php+mysql。然后用超简单的网页游戏方式讨论。使用适当的代码。应该会有帮助。也请指出不足之处,对我个人也有帮助。我们不考虑可玩性,数量平衡等等。让我们只考虑一个简单示例的实现。那么一个网页游戏的基本内容需要什么呢?数据库:玩家,地图,城市,建筑,武器,士兵。功能:登陆、升级、单兵战斗、士兵间战斗、同城战斗、建筑、武器建造、道具买卖。

(注:每个函数必须对应1个或以上的数据表。以上数据库所列的只是基金会中的基金会。)首先是地图,城市,建筑。

相信可以不止一张地图,地图上有城市,城市里有建筑。变换表

地图:地图标识,X坐标,y坐标,城市标识,描述。

其中Map_ID是指地图的ID。不是自动编号。一个map就是一个Map_ID,可以重复。城市表

城市:城市ID,城市名称,城市所有者,城市级别,城市资源,描述。建筑表

建筑:ID,City_ID,建筑名称,建筑等级,建筑功能。其中,地图表确定了城市的位置,城市表确定了城市和业主的相关数据,建筑表中的很多条信息都属于某个城市。表构建完成后,将会显示出来。

for循环。把整个地图表拿出来就ok了。

和普通网站的新闻列表差别不大。不同的是,你需要得到X坐标和Y坐标的定位。您可以使用tabel或div。类别映射//映射类别

{

var $ Map _ ID

函数Map _ BG _ CSS($ Map _ ID){ $ this-& gt;Map _ ID = $ Map _ ID

mysql_select_db($db_name,$ link);

$ SQL = " select * from Map where Map _ ID = ' "。$ this-& gt;Map_ID。极限1 ”;

$result=mysql_query($sql,$ link);

回声" & ltstyle type= "。“文字”。"/"." css >;

$ RS = MySQL _ fetch _ array($ result);

echo " # map {

回声”位置:绝对;;

回声“宽度:”。$ rs [x坐标]。" px;";

回声“高度:”。$ rs [y坐标]。" px;";

echo "z索引:0;";

echo " left:0px;top:0px;}";

}

函数Map _ BG($ Map _ ID){ $ this-& gt;Map _ ID = $ Map _ ID

$ SQL = " select * from Map where Map _ ID = ' "。$ this-& gt;Map_ID。'";

$result=mysql_query($sql,$ link);

while($ RS = MySQL _ fetch _ array($ result))

{

回声" & ltDiv id = layer _ BG _"。$ RS [x坐标]。" _ ".$ RS [y坐标]。" > ";

回声" & ltimg src= "。$rs[Map_bg]。" border=0 title= "。$rs[ID]。" & gt& lt/div >;";

}

}

}以上是一个非常简单的map类。代码可能不正确,但意思是正确的。根据映射表中的坐标,生成一组div图层和这组图层的css。

你可以把它改成桌子。您也可以将坐标放在一个字段中,并以数组的形式获取它们。使用时,使用新地图;

地图(N);其中n是映射表中的映射Map_ID。城市里的建筑都差不多。如果你想展示的话。

有了地图和城市。涉及的问题是城市的资源生成。这时,城市表需要有判断时间和数量的字段。

例如,生成的资金量、生成资金花费的时间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分钟执行一次。那么我们的误差是五分钟。对于网页游戏来说,还是可以接受的。(战斗的计时器是1分钟。当然,如果服务器足够牛逼,也就几秒钟的事。你每次执行什么代码?首先,您必须创建一个新的计时器任务表。目的是让计时器知道需要执行哪些程序和数据更新。表格内容如:城市资源更新。当然,这块手表是可选的。编制的好处是方便处理保护国家产生资源等问题。服务器程序:获取当前服务器时间。获取当前需要更新城市。确定服务器时间和$Money_time之间的时差。(时间戳,具体时间戳)网上有很多信息。)来确定时间差是否大于$Action_Time。

大于,则更新资源。同时更新$Money_time。

如果小于,则没有操作。客户端程序:获取当前服务器时间。获取当前城市的$ money,$ money _ time,$ action _ time。使用javascript显示剩余时间的倒计时和增加的资源量。客户特殊情况触发器:

因为客户端显示的资源是伪同步的,所以当客户端使用资源时。服务器需要更新当前的实际资源,定时器处理的时间也需要更新。

也就是说,当客户端触发涉及资源的情况时,当前资源会立即更新。同时,更新将在计时器中使用的$Money_time。这样就不会导致被监视的资源没有被使用,或者定时器重复产生资源。一般来说。这部分程序非常简单。难点在于C语言定时器的制作和前台javascipt倒计时的编写。C语言定时器,找个C语言程序员,超级简单;前台的Javascipt,网上有很多倒计时代码,找一个改一下就可以用了。

& lt脚本语言= " JavaScript " & gt

Var maxtime =这里是你的时差///一个小时,以秒计算,自己调整!

函数倒计时(){

if(maxtime & gt;=0){

分钟= math . floor(maxtime/60);

seconds = math . floor(maxtime % 60);

Msg = "您的文字描述"+分钟+分钟+秒+秒";//动态显示剩余时间。

document.all["timer"]。innerHTML = msg

//if (maxtime = = 3)文档。所有[“计时器”]。innerhtml = '只剩3秒了!';

–maxtime;

}

否则{

clearInterval(定时器);

Document.all ["timer"]。innerhtml = '时间到了';

}

}

timer = setInterval("CountDown()",1000);

& lt/SCRIPT & gt;& ltdiv id = timer & gt& lt/div & gt;这是网上找到的代码。稍加修改即可使用。这只是显示倒计时。您也可以显示资源的增加。用c语言操作mysql数据库。// TODO:在此添加控件通知处理程序代码

Bool bRes = m_dbConn。Connect("数据库ip地址",3306,"用户名","[email=d203!@#ghj]密码[/email],“数据库名”);

如果(!bRes)

{

AfxMessageBox("连接失败");

返回;

} string strSql = " select * from city limit 1 ";//将此段落用于所有显示或获取值的类。中间的sql语句可以自己构造。

ResultSet* rs = m_dbConn。execute query(strSql);

while(RS-& gt;下一个())

{

string str = RS-& gt;GetString(" username ");

AfxMessageBox(str . c _ str());

}

/*

strSql = " update City set money = money+100 where City _ ID = ' XXX ' ";//这个部分用于所有的增删更新,中间的sql语句可以自己构造。bRes = m_dbConn。execute update(strSql);

如果(!bRes)

{

AfxMessageBox(" execute update fail ");

}

*/

m_dbConn。close();定时器的主要功能。

void CBeiLiDlg::Go()

{

while(真)

{

//AfxMessageBox(" go ");

睡眠(5 * 1000);//毫秒。定时器刷新时间。

}

}

//非常简单....当然可以。这里C的代码不能直接使用。只是一部分。地图,城市,基本上。接下来是城市里的建筑。上面说的资源增加,其实在建筑上更准确。但是建筑物的分类和价值会复杂很多。那是规划上的考虑。建筑学上,我们只说一个前台的建造效果。当然这个效果可有可无。你可以给出一个新闻列表一样的显示,并添加一个倒计时。

显示的效果是点建好之后。在不刷新页面的情况下调入动画图片。并且时间到了自动转换成其他图片。& lt脚本语言= ' javascript ' & gt

函数修剑()

{

top . ABC . document . getelementbyid('前景建筑所在图片的id ')。src = '建筑施工后的图片地址';

//显示建筑完成后的图片。可以添加后台时间判断。其中abc是建筑物所在楼层的id,

}

函数xiujian1()

{

setTimeout('秀剑()',5000);//动画时间5秒。这里还可以加上时间判断。时间不够完成时,继续调用动画。

}

函数东华()

{

top . ABC . document . getelementbyid('前景建筑所在图片的id ')。src = '建筑动画所在的地址';//显示构造动画。

}

东华();

xiujian 1();

& lt/script & gt;在后台部分,只需要时不时的修改代码来增加资源,时不时的添加或者更新建筑。就是再加n张表。。建筑基础表:输出、类型、图片等。。

楼盘详细列表:在城市表中可以关联到你属于哪个城市。不同的联想方式会对节目产生很大的影响。各种联想方式都可以,但是联想方式一旦确定,最好不要改变。现在有建筑了。同理,工作、征兵等等都可以实现。战斗,

士兵的参数:兵种,数量,攻击,防御等等。战斗临时列表:谁的士兵,跟谁打,出发时间,战斗时间,战斗结果。这里的话很简单。实际的表格会更复杂。在网页游戏中,有两种战斗过程。一种是给出双方的参数,时间到了,根据公式算出结果。一种是半即时或者即时战斗,可以边打边喝药使用技能。第一个过程。派兵。此时,士兵的参数、出发时间和到达时间都记录在临时战斗表中。在计时器中,处理战斗的部分决定是否该开始。是时候开始战斗了,然后获取被攻击士兵的参数。然后用几个公式算出结果。处理结果,比如死了多少士兵,战场上掉了多少钱,谁抢了城。很多判断和更新数据。(这里的定时器处理非常类似于获取资源的定时器处理。)最后把结果分别发给双方。(还涉及到短信系统。)第二个过程。点攻击。马上处理数据。玩npc很容易做到。玩家对战时,也可以把被攻击的玩家当做npc。两人或多人实时对战。你需要ajax。目前技术和理论都没有问题,代码也没有实际写过,不好说。很简单的公式,两场战役都可以用:intval(sqrt($ user _ b _ AP)-sqrt($ user _ a _ DP));根号下攻——根号下防=伤害。详细写的时候,公式肯定会很复杂,但这个头疼的问题还是留给策划吧。