开心农场设计稿
一、开心农场简介
“开心农场”(Happy Farm)是一款以种植为主的社交游戏(Social Game)。用户可以扮演一个农场的农场主,在自己农场里种植各种各样的蔬菜和水果。作物从种植到成熟有着不同的阶段,每个阶段可能会发生干旱、病虫害、长杂草等情况,需要农场主的细心照顾。果实成熟之后,可以被收获进仓库,后期用户可以根据市场波动来选择合适时机卖出仓库中的果实来获得金币。金币除了购 买种子,还可以购买化肥等道具和农场的装饰品,以及用于农场的土地扩建。
“开心农场”具有明显的游戏特点,讲究互动互助,好友越多越有趣。每天用户只需要上线给自己或者帮好友的作物浇浇水、杀杀虫、除除草、收收(或偷取)果实即可,如果有损友来你农场里使坏或者盗取你的果实,你的狗狗也可以抓住他。该游戏不仅可以调动用户上线的积极性,还可以促使用户发起对站内好友的互动,让好友与之一起互动。
二、农场的游戏流程
a) 开心农场的基本玩法:当用户注册完成之后,就能得到自己的一个农场,农场共有28块地,默认情况下有6块地是可以种植农作物的。点击toolbar中的储物袋,选取储物袋中的种子,这样鼠标就变成了农作物的样子,用鼠标点击菜地,就能把植物的种子播种到田里。等到收获的时候,再点击toolbar中的收获按钮,选取收获功能,然后点击要收获的植物,这样就能把农作物放到仓库里了。
b) 扩建农田:如果需要增加新的农田,需要缴费扩建农田。
c) 查看好友的农场:在屏幕右上方的toolbar中有“查看好友”按钮,点击查看好友,显示好友列表。点击列表中的好友项
d) 植物的成长阶段:每种植物的成长阶段不一样,一般为,小叶,大叶,开花,结果四个阶段。
e) 植物的属性:农作物有以下属性:
名称
种子价格
成熟时间
再成熟时间
实际产量(个/季)
作物季数
限制等级
f) 对农田上的植物进行的操作:在农田上用户可以做以下的操作:
播种经验+3
翻土经验+3
除草经验+2(包括给自己和好友除草)
除虫经验+2(包括给自己和好友除虫)
浇水经验+2(包括给自己和好友浇水)
收获收获自己的crop
偷菜收获好友的crop
放虫好友农田时使用
放草好友农田时使用
三、农场中涉及到的类
游戏的制作中,涉及到的类有:
农田(好友或自己的)
块田 块田组成农田
农作物
操作
显示框
提示框 extends 显示框
Shop exteds 显示框
a) 关于类的定义
Info类是所有显示信息的总类,它是一个基类,它一下的子类有Scrip类,GrowthInfo类,showMatter类,showMatter类有是仓库,商店,装饰店这种带有关闭按钮的显示框的父类,他定义了背景和closeBtn的大小和位置。StoreHouse类初始化的时候会先初始化一下showMatter,来布局背景。
SocketDeal类:这个类实现接口Imain专门用来处理从服务端接收到的信息。
四、农场的实现
a) 农场中的图标采用“早绑定”模式:(详细介绍,见《天地会》我收藏的《AS3中逻辑和资源整合的几种方法》)
对农场中初始化必须的部分,我决定采用早绑定的方式来处理,这样会方便不少。后期,如:商店、装饰店这样的非必须原件,我会采用晚绑定的方式来处理,这样,如果用户不去点击商店按钮,就不用载入相应的swf文件了,也节省了网络资源。
早绑定是最早最先的方法,就是相应的元件和相应的类进行绑定(设置它们的linkage),通过这样的做法达到资源与逻辑分离的目的。它的好处是相当的方便,不需要使用代码创建资源,是快速开发的首选。但是它的缺点也是很明显的。
i.如果对代码进行重构,由于flash的资源库对linkage的更改相当不便,这里会消耗相当一部分的体力。
ii.如果项目规模增大,进行资源导出的时候会消耗相当长的时间,由于使用Flash进行编译,编译速度没有任何优化的余地,时间将被白白消耗掉。
b) 鼠标点击bottomToolBar工具栏中的按钮后,鼠标跟随事件的响应:
在源文件中有FollowMouse类,用来处理鼠标点击元件之后,有元件跟随鼠标的效果。布局bottomTollBar工具栏的时候通过:var reap_fm:FollowMouse =new FollowMouse(reap_mc, reapFollow_mc, mouseFollow,reap_eventdata);来初始化显示工具,其中:
reap_mc为在工具栏中显示的图标
reapFollow_mc为鼠标跟随图标
mouseFollow为stage中装载reapFollow_mc的容器
reap_eventdata 工具被点击之后,会抛出followMouse_event事件,表示工具被点击了,reap_eventdata是抛出事件时携带的数据,来告诉侦听器,现在点击的是什么工具。
事件侦听器——onFollowEvent,收到followMouse_event之后,对reap_eventdata做判断,就能知道,点击的是哪个工具了。
c) 自定义事件的处理:对于所有自定义抛出的事件都将在LocalCommunications类中做处理。该类中有大量的静态方法供发送方调用,如需要请求仓库信息,调用方法:LocalCommunications.storehouse_req();即可。
d) StoreHouse类的设计:StoreHouse类继承了ShowMatter类,StoreHouse使用了单例模式,因为在该游戏中不能实例化出两个仓库来,ShowMatter类是商店、仓库、装饰店的父类,初始化这个类的时候,会导入showMatterBg.swf和closeBtn.swf这两个flash文件作为基本的界面,StoreHouse类先初始化了这些基本界面,然后在此基础上增加仓库必须的界面以及相关的元素。
e) 对农田上的操作:在Main上有一个变量operate用来记录点击的是哪个工具。农田共分三个层,最底下的是田地,中间是植物,最上面是Area区域,用来对田地和植物进行统一的管理,Area中有变量crop和field,记录在该区域的植物和田的编号,每块田都有一个area变量,用来记录它对应的Area,每个植物也有一个area变量,用来记录它对应的Area。当选中工具点击Area后,Area会根据工具的不同来判断,该调用该Area上field的chooseOperate方法,还是该调用该Area上crop的chooseOperate方法。
五、编程原则
a) String均用小写字母
b) 变量名称均用驼峰法表示
c) 游戏中固定用到的图片放在happyFarm.swf中,其他图片均通过导入swf文件来实现
六、代码
Main.as//我自己的信息,登陆时传入,布局自己的农场
//property-----------------------------------------------------
username:String = ”wssmrw”;
userid:String = “34746978”;
money:Number = 100;
nb = 0;
exp=59;
charm=0;
level_exp=0;
level_charm=0;
//仓库
storehouse:Object;
//对28块田的描述,0:未开垦,1:已开垦,2;干燥
farmland:Array=[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],]
//=====================================================================
Farm.as//农场类,农场信息,布局自己的农场,或者好友的农场
//property---------------------------------------------------------
farmername:String = ”cccpp”;
farmerid = “56245632”;
money:Number = 102;
nb = 0;
exp=59;
charm=0;
level_exp=0;
level_charm=0;
//表示未开垦,1表示已经开垦了,2表示扩建,3表示干燥需要浇水等等。
farmland:Array=[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],]
//function-----------------------------------------------------------------
function init(param):void{
//根据传送进来的参数,给农田布局,在农田上种上水果、蔬菜
this. Storehouse=storehouse;
}
这里是商店
//=====================================================================
Shope.as
//property---------------------------------------------------------
//function----------------------------------------------------------
这里是显示信息
//=====================================================================
ShowInfo.as
//property---------------------------------------------------------
//function----------------------------------------------------------
//=====================================================================
ShowFrame.as extends ShowInfo
//property---------------------------------------------------------
//function----------------------------------------------------------
//=====================================================================
TipFrame.as extends ShowInfo
//property---------------------------------------------------------
//function----------------------------------------------------------
这里是养殖的动植物
//=====================================================================
Seed.as
//property---------------------------------------------------------
//function----------------------------------------------------------
Function sowSeed(){}//播种
Function growUp(){}//成长
Function reap(){}//收获
//=====================================================================
Animal.as extends Seed
//property---------------------------------------------------------
//function----------------------------------------------------------
//=====================================================================
Plant.as extends Seed
//property---------------------------------------------------------
//function----------------------------------------------------------
Fulk.taobao.com