资源描述
设计题目:Android手机游戏--仙剑Q侠传
学 院:____ 计算机与信息学院_ __
专业年级: 软件工程 2008级
Android mobile games-xianjian Q man preach
College: Computer and Information College
Specialty and Grade: Software Engineering, 2008
Number: 081181065
Name: Lin Shuqi
Advisor: Lecturer, Lin Song
Submitted Time: May 20th, 2012
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作 者 签 名: 日 期:
指导教师签名: 日 期:
使用授权说明
本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名: 日 期:
目 录
摘要 I
Abstract II
1 引言 1
1.1 选题背景 1
2 系统分析 2
2.1 可行性分析 2
2.2需求分析 2
2.2.1 系统概述 2
3 系统设计 3
3.1概要设计 3
3.2 数据库设计与实现 3
3.2.1 数据库设计与实现 3
3.3详细设计与实现 15
3.3.1 使用工具 15
3.3.2 客户端开发 15
3.3.3邮箱功能模块 15
3.3.4组队功能模块 21
3.3.5 宠物图鉴功能模块 22
3.3.6 任务模块 23
3.3.7货币兑换模块 25
3.3.8 好友模块 27
4 结束语 42
参考文献 43
致谢 44
福建农林大学本科毕业设计说明书
摘要
本游戏是一款仿RPG类型手机网游,实现了通过互联网下载客户端后玩家通过客户端注册游戏账号后建立角色进入游戏主界面,对于玩家来说,可以进行查看个人信息、查看宠物信息、与玩家进行邮件交流、进行货币购买销售、进行摆摊或者逛摊出售购买装备物品、进入副本刷怪升级刷装备等功能。GM可以通过系统公告进行游戏最近动态的通知比如即将开放的活动、最近优惠信息等,通过系统邮件对玩家进行奖励发放,系统消息通知。这是一款新颖的手机网游,开发了Android版本,符合当前时代主流,是一款让玩家能在游戏中体验从弱小到强大,从菜鸟到高手的Game。
关键词: 仿RPG,手机网游,Android
Abstract
This game is a copy online RPG type mobile phone, realized through the Internet to download client players through the client registered account Numbers game set up Into the game after role main Interface, for a player, can view the personal information, check pets, and information exchange and mail players for money to buy, or stroll, called sales sell buy items, stand to brush brush equipment upgrade copies of blame etc. Function. GM can through the system dynamic game recently announced notice such as will open soon activities, such as preferential information recently, through the mail system to players for awarding, the system message notice. This is a novel cell phone online, the development of the Android and Iphone two versions, in line with the current era mainstream, is a let players in the Game can experience from weak to strong, rookie to masters from Game.
Key words : copy RPG, cell phone online,Android
II
1 引言
1.1 选题背景
随着3G移动网络应用的推广和Android系统的普及,手机游戏的规模、复杂程度日益增强;其技术手段、设计思想、系统体系结构都发生了深刻的变化。目前,手机游戏正在向图片游戏,特别是基于 3G 网络平台方向发展。 Java 游戏等都是比较常见也比较流行的游戏形式。手机虽然可能不是一个理想的游戏设备,但毕竟人们总是随时随身携带,这样手机游戏很可能成为人们消遣时间的首选。未来的手机游戏在智能手机和 3G 网络的基础上,可以达到更高更炫目的游戏效果。目前个厂商正将显示芯片植入手机提升图形显示性能,使手机在进行多媒体演示和游戏时更够有出色显示效果。
2 系统分析
2.1 可行性分析
可行性研究是为了研究系统在经济、技术、法律等方面是不是可以进行开发,进行可执行性的分析是很重要的。经过研究,我得出了如下几点可行性分析:
1)经济可行性:这个项目是公司的项目,开发的主要成本是公司投资,根据策划预算以及上一款游戏的市场效果,该游戏可以获取比较大的收益。
2)技术可行性:项目客户端用的的Android开发平台,未使用游戏引擎,使用java语言进行代码开发,通过android控件进行UI的设计,不存在较大的技术问题,都能解决。
3)法律可行性:开发这个项目,公司有经过合法的法律流程,不会在社会上引起侵权或其它责任问题,即在法律上也是可行的。
2.2需求分析
Android平台上的游戏相比应用软件,不需要进行严格的市场细分,不需要针对目标用户量身定制。这是因为游戏玩家的核心需求是统一的,那就是:娱乐与打发时间(乃至更高层面的竞技需求和群体认同需求),这种需求附着于特定的社会发展阶段,不受地域的限制,甚至于能够穿透文化壁垒。因此,绝大多数种类的游戏都具备传染性与普适性,每一个售出的游戏都象一个火种,将会点燃周围潜在玩家的激情,激情的火焰迅速蔓延,最终吞噬整个需求市场,当然前提是开发的游戏是高质量的。此外,几乎每一个Android手机用户都是游戏的需求者,都是潜在的顾客,现今的400多万Android用户不过是冰山一角,随着Android手机市场进一步壮大,游戏的市场容量将具备较大的增长空间,游戏开发者不会愁吃不饱,只会愁胃口不够大。
2.2.1 系统概述
随着手机技术的不断发展,大屏幕触屏手机已经非常普及,Android手机更是其中的佼佼者。本游戏对用户界面的要求较高,达到人性化:美观大方、便于操作,个性化:游戏界面时尚靓丽、别具一格。本游戏是使用即时通讯协议进行通信的,所以,实时的游戏效果、即时聊天以及在线探测是必须做到用户体验良好的。
3 系统设计
3.1概要设计
邮箱系统
邮件列表
发送邮件
查看邮件
删除邮件
任务系统
队伍系统
创建队伍
加入队伍
离开队伍
宠物图鉴
货币兑换
货币上架
货币购买
猎神系统
好友系统
添加好友
删除好友
给好友发送邮件
图 3-1 模块图
3.2 数据库设计与实现
3.2.1 数据库设计与实现
(1)邮件表(Mq_mailing表)
表3—1邮件表
字段
类型
说明
id
int
邮件ID。
系统滚号
Type1
smallint
邮件类别
1=系统邮件
2=玩家邮件
Type2
smallint
邮件类型
1=为无附件邮件
2=为携带附件邮件
3=为需要输入金币才可以领取附件的邮件
Mail_state
Smallint
邮件状态
1=玩家未查看邮件
2=玩家已查看,未收取邮件。
3=玩家已查看邮件,并提取了附件。
Send_id
int
发送人id。对应Mq_user表的id。0为系统发送
User_id
int
收件人id.。对应Mq_user表的id。
Time
Datetime
邮件发送时间记录,记录格式:AABBCCDDEE
示例:2011年1月1日,10点20分30秒
20110101102030
theme
varchar
邮件主题。系统发送的邮件,主题颜色标红
message
varchar
邮件文本信息
Obj01_id
Int
邮寄物品01的ID。记录Mq_itemtype表id,下同。
Obj02_id
Int
邮寄物品02的ID
Obj03_id
Int
邮寄物品03的ID
Obj04_id
Int
邮寄物品04的ID
Money
Int
金钱,根据Type2字段判断类型
Type2=1或Type2=2,为玩家邮寄金钱
Type2=3,为玩家需付款的金钱数量
Emoney
Int
邮寄代币数量
reserve _money
Int
邮寄储备金数量
Exp
Int
邮寄玩家经验
E_exp
Int
邮寄宠物经验
Adj_money
Int
邮件所需邮费(根据玩家添加附件的数量决定)
(2)队伍列表
表3—2队伍表
字段
类型
类型
GROUPID
smallint
队伍ID(队长用户ID)
ACTIONTIME
smallint
战斗剩余时间
GROUPNUM
int
队伍人数限制
USERID
int
玩家ID
LOOKFACE
tinyint
玩家头像
NAME
VARCAHR
玩家名称
ROLELV
tinyint
玩家等级
(3)任务表(Mq_quest表、Mq_user_quest表)
该表主要记录任务信息,包括领取任务所需前置任务、任务发布NPC、任务交还NPC、任务目标、达成条件、任务奖励、任务说明等。
表3—3任务表
字段
类型
说明
id
int
任务id。
编号规则:任务ID编号为8位数。
第1~3位表示任务类型,与type相同。
第4~7位表示任务编号,自0000~9999由策划规划。
type
tinyint
任务类型。用于对普通任务、剧情任务、师门任务等进行区分,如定时重置、分类显示的根据。
100:普通任务。
101:主线任务。
102:帮派任务。
103:职业任务。
200:每日任务。
name
varchar
任务名称。
level
smallint
任务等级。注意不同的任务类型,该字段的含义也有所不同。
【普通任务】:任务触发条件之一。需玩家等级与该值满足一定关系。根据该关系,奖励会有一些加成或折扣,详见下文说明。
【主线任务】:任务触发条件。需玩家等级与该值满足一定关系。系统会默认帮玩家接收任务。
need_profession
tinyint
任务职业需求。
任务触发条件之一。需玩家职业与该字段相符。
0表示所有职业均可,1~4对应4个职业,要求角色Mq_user中profession与该字段相符才能领取任务。
need_sex
tinyint
任务性别需求
任务触发条件之一。需角色Mq_user中sex与该字段相符。
0为男女均可,1为男性专有,2为女性专有。
need_time
int
任务时间限制。自领取任务开始计算,超过该字段规定的时间后任务失败。记录格式由程序制定,可与策划沟通。
need_quest_01
int
前置任务01。填写任务id。
任务触发条件之一。检测该任务id是否在Mq_user_quest表中对应角色下存在。表示该任务需要玩家完成某个任务后才能领取。need_quest共4个字段,填写多个时表示任务需要完成这些任务后才能领取。
need_quest_02
int
前置任务02。
need_quest_03
int
前置任务03。
need_quest_04
int
前置任务04。
begin_npc
int
任务发布npc。对应Mq_npc表的id。
缺省默认为0,当为0时,则任务无发布NPC。
begin_dialog
varchar
任务起始对白。
示例:[玩家名],去帮我消灭10个骷髅兵!
注:所有varchar类文字均需支持类似html的标签,用于标示文字的颜色、粗细、自动寻路链接等;另需支持保留字符,用于解析玩家名称、性别、种族、职业、转世信息等;还需支持回车符等编辑标记。
任务起始时显示的任务目标。
示例:任务目标:张三要求你消灭10个骷髅兵。
注:小提示等信息一并写入该段。
begin_message
varchar
任务起始时显示的任务目标。
示例:任务目标:张三要求你消灭10个骷髅兵。
注:小提示等信息一并写入该段。
doing_message
varchar
任务进行中的说明。
示例:任务目标:张三要求你消灭10个骷髅兵。
condition_01
int
完成任务需要达成的条件类型,如杀怪、寻物、送信等等,每种类型需达成的内容和交还任务的细节均有所不同,具体条件类型如下:
1=杀怪
2=杀怪掉落物品
3=送货
5=物品
6=捕捉宠物
condition01_ data
int
Ø 当condition_01=1时,对应怪物id。对应Mq_monstertype表id。
Ø 当condition_01=2时,对应物品id。对应Mq_itemtype表id。
Ø 当condition_01=3时,对应物品id。对应Mq_itemtype表id。该类物品由任务发布NPC给予,由任务交还NPC回收。
condition01_ parameter
int
Ø 当condition_01=1时,对应所需击杀数量。
Ø 当condition_01=2时,对应所需收集数量。
Ø 当condition_01=3时,对应物品数量。一般是1。
condition01_ option_01
int
Ø 当condition_01=1时,无作用。
Ø 当condition_01=2时,对应掉落该物品的怪物id。对应Mq_monstertype表id。
Ø 当condition_01=3时,无作用。
condition01_ option_02
int
Ø 当condition_01=1时,无作用。
Ø 当condition_01=2时,对应掉落几率。记录万分数。
Ø 当condition_01=3时,无作用。
condition_02
int
完成任务需要达成的条件。同condition_01。
condition02_ data
同condition_01_ data。
condition02_ parameter
同condition01_ parameter。
condition02_ option_01
同condition01_ option_01。
condition02_ option_02
同condition01_ option_02。
condition_03
int
完成任务需要达成的条件。同condition_01。
condition03_ data
同condition_01_ data。
condition03_ parameter
同condition01_ parameter。
condition03_ option_01
同condition01_ option_01。
condition03_ option_02
同condition01_ option_02。
condition_04
int
完成任务需要达成的条件。同condition_01。
condition04_ data
同condition_01_ data。
condition04_ parameter
同condition01_ parameter。
condition04_ option_01
同condition01_ option_01。
condition04_ option_02
同condition01_ option_02。
【注】condition_01~04为任务达成的条件,需满足所有条件,任务才算完成。
over_npc
int
任务交还npc。对应Mq_npc表中id。
doing_dialog
varchar
任务进行中对白。(即任务接了,但是未完成。)
示例:还没搞定?快去快回!
over_dialog
varchar
任务完成对白。
示例:干得好!这是给你的奖励,拿去吧!
bonus_money
int
完成任务奖励金钱。对应Mq_user表money。
bonus_exp
int
完成任务奖励经验值。对应Mq_user表exp。
Must_item01
int
完成任务必奖励物品。对应Mq_itemtype表id。
Must_item02
int
完成任务必奖励物品。对应Mq_itemtype表id。
Must_item03
int
完成任务必奖励物品。对应Mq_itemtype表id。
Must_item04
int
完成任务必奖励物品。对应Mq_itemtype表id。
choose_item_01
int
要求玩家从choose_item_01~04中选择一个物品作为奖励,需要配置的话,原则上至少配置2个(当然只配置1个也不会出错就是了)。
choose_item_02
int
完成任务单选物品。
choose_item_03
int
完成任务单选物品。
choose_item_04
int
完成任务单选物品。
表3—4任务完成进度表
该表记录所有角色已经领取的任务和已经完成的任务。
字段
类型
说明
id
int
系统管理ID。
user_id
int
角色id。指向Mq_user表id。
quest_id
int
对应该角色,已接到/已完成的任务id。对应Mq_quest的id。
flag
int
表示任务完成情况。
0=已接未完成
1=已完成
2=失败。
time
int
角色领取该任务的时刻,用于判断时限任务是否超时。
parameter_01
int
该任务的第1个条件中,角色当前达成的参数。
参数含义参见下方的对照表。
parameter_02
int
该任务的第2个条件中,角色当前达成的参数。
parameter_03
int
该任务的第3个条件中,角色当前达成的参数。
parameter_04
int
该任务的第4个条件中,角色当前达成的参数。
(4)宠物图鉴表(Mq_user_handbook)
表3—5宠物图鉴表
字段
类型
说明
id
Int
系统编号
User_id
int
玩家id,对应Mq_user表的id
type
smallint
类型。
1=怪物
2=宠物
Sort
smallint
信息状态。
1=玩家未查看过该信息
2=玩家已查看过该信息
type_id
int
Type=1。对应mq_monstertype表id
Type=2,对应Mq_EudTemplate 表id
(5)猎神系统表(Mq_spirit_config)
表3—6猎神系统表
字段
类型
说明
Id
int
系统编号
Sort_1
Int
对应mq_spirit_config表Type字段
Rang_1
Int
获得sort=1的几率,概率范围最大值
Sort_2
Int
对应mq_spirit_config表Type字段
Rang_2
Int
获得sort=2的几率,概率范围最大值
Sort_3
Int
对应mq_spirit_config表Type字段
Rang_3
Int
获得sort=3的几率,概率范围最大值
Sort_4
Int
对应mq_spirit_config表Type字段
Rang_4
Int
获得sort=4的几率,概率范围最大值
Sort_5
Int
对应mq_spirit_config表Type字段
Rang_5
Int
获得sort=5的几率,概率范围最大值
Sort_6
Int
对应mq_spirit_config表Type字段
Rang_6
Int
获得sort=6的几率,概率范围最大值
Sort_7
Int
对应mq_spirit_config表Type字段
Success_7
Int
获得sort=7的几率,配置方式:1000=100%。
Rang_7
Int
获得sort=7的几率,概率范围最大值
字段
类型
说明
Id
int
系统编号
Spirit_id
Int
对应mq_spiirit表
Type
Int
类型
Type=1。劣质元神物品
Type=2。劣质~普通元神物品
Type=3。劣质~精良元神物品
Type=4。劣质~优质元神物品
Type=5。劣质~完美元神物品
Type=6。再次抽取
Type=7。空值
Value_1
Int
Type=6。对应再次收取次数。1表示再一次抽取机会
Type=7。填0
Value_2
Int
Type=1~5。物品数量
Type=6。对应图片lookface
Type=7。对应图片lookface
其他情况填0
(6)货币兑换表(Mq_consign表)
表3—7 货币兑换表
字段
类型
说明
Id
Int
系统编号
User_id
Int
记录寄售代币玩家id
Type
Smallint
寄售类型
Type=1。代币
Type=2。游戏币
Npc_id
Int
对应寄售npc的id。已售出时,填0
money
Int
寄售的物品
当Type=1时。Money=代币
当Type=2时。Money游戏币
Sellmoney
Int
货币价格。
当Type=1时。Sellmoney=游戏币
当Type=2时。Sellmoney=代币
time
Datatime
记录发布/收购货币的时间
(7)好友表(Mq_friend表)
好友系统需要一张好友表来记录数据。
表3—8好友表
字段名
数据类型
字段含义
id
int
每一条记录值的序列号;
userid
int
玩家ID,指向user表中id;
Mq_Friend
int
朋友的对应于user里的id字段
Mq_Friendname
varchar
朋友的名字;指向user表的id;
Mq_Friendlev
tinyint
朋友的等级,指向user表的level;
relation
tinyint
朋友之间的关系;
0:好友 1:黑名单
Good_num
int
记录好友之间的好友度;
缺省默认为1;
用接口实现与数据库的数据链接:
public Action2301(short PageSize,short PageIndex,short Type)
{
this.PageSize=PageSize;
this.PageIndex=PageIndex;
this.Type=Type;
}
public String buildUrl()
{
path="ActionID=2301"
+"&SessionID="+MyQsuiko.getInstance().getMyUser().getSessionID()
+"&PageSize="+PageSize
+"&PageIndex="+PageIndex
+"&Type="+Type;
Log.i("path","path="+HttpRun.mainIp+path+getSign());
return path+getSign();
}
protected void internParseResult(byte[] arg0){
//TODO Auto-generated method stub
mailInfo = new MailInfo();
mailInfo.setPageSize(toInt());//每页条数
mailInfo.setPageNum(toInt());//一共多少页
mailInfo.setPageIndex(toInt());//当前第几页
short RowCount = toShort();
mailInfo.setRowCount(RowCount);
// System.out.println("RowCount="+RowCount);
MailList[] mailList = new MailList[RowCount];
//循环开始
for(short i=0;i<RowCount;i++)
{
mailList[i]=new MailList();
mailList[i].setGuid(toString());//邮件ID
mailList[i].setTheme(toString());
mailList[i].setTime(toString());
mailList[i].setUseID(toInt());
mailList[i].setName(toString());
mailList[i].setType2(getByte());
mailList[i].setMailState(getByte());
System.out.println("name="+mailList[i].getName());
System.out.println("Theme="+mailList[i].getTheme());
// System.out.println("UseID="+mailList[i].getUseID());
// System.out.println("time="+mailList[i].getTime());
short HoldData = toShort();
mailList[i].setHoleData(HoldData);
if (HoldData > 0) {
setKey(HoldData);
}
}
mailInfo.setMaiList(mailList);
}
public MailInfo getMailInfo(){
return mailInfo;
}
}
调用接口来取得数据库数据:
3.3详细设计与实现
3.3.1 使用工具
本次开发使用的工具有eclipse、java等等,大部分都大家常用的工具。具体的工具及版本如下表所示:
3.3.2 客户端开发
我参与开发的功能主要有:登陆模块,邮箱系统模块,组队模块,宠物图鉴模块,任务模块,帮助模块,好友系统模块,货币兑换系统模块、猎神系统模块。
3.3.3邮箱功能模块
A.邮件发送
玩家通过点击主界面“邮箱”按钮进入。选择“撰写邮件”
表3—8
No
名称
说明
1
收信人
可输入文本框,输入玩家信息,点击“选择好友”打开好友列表添加好友。
2
主题
可输入文本框,输入信件主题。主题最多为10个汉字
3
邮件信息
点击文本框,输入邮件内容。具体文字信息量暂定
5
邮费信息
提示邮费信息根据玩家添加的物品数量,根据玩家操作实时更新
6
附件
选择“附件”框,弹出玩家背包栏,选择物品。特殊物品无法邮寄,详见《Q将》物品。
7
付款取信/发送金币
玩家输入金币状态。切换选项后,金币栏清空
l 选项为“发送金币”,玩家将金币发送给收件方
l 选项为“付款取信”,收件方需要支付金币才可以领取邮件内的附件
8
金币框
选定弹出数字输入框。每次选定都会将之前输入的信息清空
9
发送
点击按钮后发送邮件,平常为灰态。
检测邮件满足以下条件,按钮才亮起
l 收件不为空
l 主题框不为空
B.邮件接收
1. 标题信息
2. 邮件信息。系统邮件统一在“系统信件”栏目内显示。
a) 点击主题“无标题222”打开邮件。
b) 点击“选择”,选项打钩,邮件被标记。
c) 已经查看过的邮件,“主题”颜色为灰色。
d) 携带有附件的邮件,“Ragi”左边显示图标。
3. 选项信息
表3—9
信息
说明
“页码”
显示当前页面数目,不可翻页时按钮变灰
全选
选择当前页面所有邮件。全部选择邮件后,按钮为灰态
删除
将选项为勾的邮件删除。无选择邮件时,按钮为灰态
收本页附件
将当前界面邮件内所包含的邮件。含有付款的邮件将不会自动收取(按钮不为灰态)。当前界面邮件都不含有附件时,按钮为灰态
通过实现适配器Adapter来实现列表的实现
public class MailAdapter extends BaseAdapter{
LayoutInflater layoutInflater;
class ViewHolder{
TextView ml1tv1,ml1tv2,ml1tv3;
Button ml1btn1,ml1btn2;
LinearLayout lLayout;
}
public MailAdapter(MailListActivity v){
super();
layoutInflater = LayoutInflater.from(v);
}
public void setSelectItem(int selectItem) {
this.selectItem = selectItem;
}
private int selectItem=-1;
@Override
public int getCount() {
if(maillist!=null){
return maillist.length;
}else{
return 0;
}
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.mail_list1, null);
viewHolder = new ViewHolder();
viewHolder.ml1tv1 = (TextView) convertView.findViewById(R.id.ml1tv1);
viewHolder.ml1tv2 = (TextView) convertView.findViewById(R.id.ml1tv2);
viewHolder.ml1tv3 = (TextView) convertView.findViewById(R.id.ml1tv3);
viewHolder.ml1btn1 = (Button) convertView.findViewById(R.id.ml1btn1);
viewHolder.ml1btn2 = (Button) convertView.findViewById(R.id.ml1btn2);
viewHolder.lLayout = (LinearLayout) convertView.findViewById(R.id.lLayout);
convertView.setTag(viewHolder);
}else{
展开阅读全文