基于FLEX开发的连连看游戏
可行性分析报告
[V1.1.0]
学院名称:湖南软件职业学院
专业名称:软件技术专业
组 员:***
指导老师:**
1引言 1
1.1编写目的 1
1.2背景 1
1.3定义 1
1.4参考资料 1
2可行性研究的前提 2
2.1要求 2
2.2目标 2
2.3条件、假定和限制 2
2.4进行可行性研究的方法 2
2.5评价尺度 2
3对现有系统的分析 2
3.1处理流程和数据流程 3
3.2设备 3
3.3局限性 3
4所建议的系统 4
4.1对所建议系统的说明 4
4.2处理流程和数据流程 4
4.3改进之处 5
4.4影响 5
4.4.1对设备的影响 5
4.4.2对软件的影响 5
4.4.3对地点和设施的影响 6
4.5技术条件方面的可行性 6
4.6经济方面的可行性 6
5可选择的其他系统方案 6
5.1可选择的系统方案 6
6投资及效益分析 7
6.1市场分析 7
6.2投资估算 7
6.3运行费用和维护费用 7
6.4收益估计 8
6.5敏感性分析 8
7社会因素方面的可行性 8
7.1法律方面的可行性 8
7.2使用方面的可行性 8
8结论 8
可行性分析报告
1引言
1.1编写目的
可行性研究报告的目的是说明实现该软件项目在技术、经济、社会条件方面的可行性;评述为了合理地达到开发目标而可能选择的各种方案。
1.2背景
a. 开发软件名称:基于FLEX开发的连连看
b.项目开发小组成员:虢威、孙庆龙、段志辉、罗奇
c.用户:所有喜欢玩这个游戏的玩家
d.项目开发环境:Windows XP + Flash Builder4 + ActionScript 3.0
1.3定义
连连看 项目 可行性分析 方案 效益
1.4参考资料
(1) 《软件工程案列开发与实践》,刘竹林等,清华大学出版社
(2) 《IT项目管理》,曾鸿、毛志雄等,中国铁道出版社
(3) 《ActionScript 3.0编程精髓》,Colinn Moock(美),机械工业出版社
(4) 《Flex 3 Cookbook》,(美)诺布尔(美)安德森,电子工业出版社
(5) 《ActionScript 3.0 Cookbook》,(美)Joey Lott Darron Schall Keith Peters,电子工业出版社
2可行性研究的前提
2.1要求
主要功能:连连看是一款图案配对的益智游戏,与“找出两幅图片中的不同”类戏同为比眼力的游戏。游戏速度节奏快,画面清晰可爱,适合细心的玩家。
可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性。
完成期限:2010年10月10日 至2010年11月10日
2.2目标
本设计尝试用Flash Builder4开发出一个连连看游戏,玩法规则和传统的一样简单容易上手。但界面更加美观,具有更加完美的用户界面交互能力。
2.3条件、假定和限制
建议软件寿命:3年
硬件条件:PC机
运行环境:Windows 系列
开发软件:FlashBuilder 4
开发限制:开发时间短
2.4进行可行性研究的方法
通过对已有连连看软件的分析和研究比较的方法
2.5评价尺度
美观的用户界面、功能的完整性、开发时间的长短及使用中的难易程度等等。
3对现有系统的分析
经过调查分析,现有的很多单机版的连连看的游戏存在一下几个不足:
A.采用的编程语言可移植性差,不能解决平台异构问题:
游戏的可移植性决定了所开发游戏的用户群大小。现有的很多游戏,多不用Flex这一平台无关性较好的编程语言来开发。使游戏很难在不同的软件平台上运行,给用户造成了一些不便。
B.程序的出错率较高:
C++有很多不可靠因素,发生许多编程错误。比如,C++中的指针可能会造成内存的非法访问。大多编程语言没有自动单元收集,不能防止内存丢失等动态内存分配导致的问题。没有自己的安全机制,不能有效防止病毒程序的产生和下载程序对本地系统的威胁破坏。
现有的很多连连看游戏已经不能很好的解决用户的需求。基于用户对游戏的更高要求,用ActionScript这种更适合游戏开发的语言,来编写出功能更加完善的连连看游戏是非常必要的。
C.用户界面不够美观:
3.1处理流程和数据流程
现有系统处理流程和数据流程简单。出错率较高。
3.2设备
● 服务器: PentiumIII 500以上或更高,
内存:128M以上;
硬盘:至少10G以上;
CD-ROM:16倍速以上;
网卡:10MB/100MB自适应;
● 工作站: PentiumII 266以上微机;
内存:64MB
硬盘: 至少5G以上;
CD-ROM:16倍速以上;
网卡:10MB/100MB自适应
3.3局限性
可移植性差、容易出错、用户界面不美观。
4所建议的系统
本章将用来说明所建议系统的目标和要求将如何被满足。
4.1对所建议系统的说明
本软件所涉及和实现的是用ActionScript 编程语言和FlashBuilder4 开发工具开发的连连看游戏。由于采用ActionScript 编程语言,解决了上面所叙述的现有游戏的不足。
本次设计的系统环境及工具如下:
运行环境:Windows 系列
编程语言:ActionScript
开发软件:FlashBuilder 4
4.2处理流程和数据流程
本次游戏设计的处理流程如下图所示。
4.3改进之处
数据流程更加简洁,用户界面更加美观。
4.4影响
4.4.1对设备的影响
没有什么特殊影响,信息量不大,一般PC机都能用。
4.4.2对软件的影响
用Flash Builder4开发的应用程序,由ActionScript编译。
4.4.3对地点和设施的影响
基本的计算机操作条件。
4.5技术条件方面的可行性
技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬件、软件配置能否满足开发者的需要,各类技术人员的数量,水平,来源等。连连看系统的工作主要是在开发者和玩家之间架起一座桥梁,能相互沟通信息和处理信息。这一特点非常适合计算机特点,通过网络Internet技术,发挥计算机的信息传输速度快、准确度高的优势。计算机硬件和软件技术的飞速发展,为系统的建设提供了技术条件。
4.6经济方面的可行性
Flex平台的自由和开放使得开发人员投资很少,但却提供给他们必需的灵活性以及大量的支持。游戏的易于维护性也使本游戏的开发投资大大减少。
5可选择的其他系统方案
扼要说明曾考虑过的每一种可选择的系统方案,包括需开发的和可从国内国外直接购买的,如果没有供选择的系统方案可考虑,则说明这一点。
5.1可选择的系统方案
a. 拟建系统的目标:
1) 增强资源共享
2) 减少人力和设备费用
3) 加快游戏的运行速度
b. 系统的实施方案
本系统客户端拟采用Window XP操作系统,服务器采用Window 操作系统,前端开发语言使用C#, 使用SQL server数据库管理系统
c. 投资方案
此系统用Visual Studio2005开发,不需要过多的投资
d. 人员培训及补充方案
由于人-机界面友好,操作简单,帮助信息详尽,一般人员都可以使用,故不需要专门的培训。
6投资及效益分析
6.1市场分析
随着人们生活水平的不断提高,人们对精神生活水平的要求也随之提高。游戏,不但可以放松身心,有的还可以开发智力。她作为一种娱乐项目在不断的发展,并在我国逐渐地发展壮大。如今市场上,已经出现了各种各样,适合不同年龄段和不同人群的游戏。比如:CS、极品飞车、大富翁、魔兽等一些大型游戏,再比如连连看、贪吃蛇、找茬等一些小游戏,都是现在受大众欢迎的娱乐休闲游戏。并且,随着互联网的发展,许多游戏不仅有单机版的,而且还有网络版的,甚至还有近两年流行起来的网页游戏。迄今为止,游戏产业在我国已经发展为一个庞大的产业,为许多相关行业带来了巨大的经济效益。
6.2投资估算
根据本游戏软件的自身特点,对于本系统软件市场开发投资方向体现在软件开发=软件测试、技术培训方面。用于产品的开发、基础设施的投资等的总投资约为200元。
6.3运行费用和维护费用
本游戏软件,易操作。随着版本的升级,维护费用将有所提高。
6.4收益估计
本产品在前期将作为免费游戏软件投入市场。待到适当时期将转为共享软件。
6.5敏感性分析
本游戏软件开发过程约为35天,技术方面是ActionScript 编程语言与Flex 开发平台的结合。整个社会由于人们生活水平的提高以及游戏行业的迅速发展,而导致我们的产品有广阔的市场。
7社会因素方面的可行性
本章用来说明对社会因素方面的可行性分析的结果,包括:
7.1法律方面的可行性
本软件在合同责任、侵犯专利权、侵犯版权等方面没有法律方面的问题。
7.2使用方面的可行性
使用方面的可行性有时也称为操作可行性,主要是论证新系统在玩家游戏过程中的感受与反馈信息。在当前信息技术飞速发展的大坏境下,计算机技术和软件技术的更新使得游戏更加的易掌握。
8结论
根据以上分析可知,本软件在技术方面已经成熟,完备测试手可靠,具有良好的市场拓展潜力。但是时间有限,该查询系统考虑不太健全,我们会在这方面加强学习和改进。所以,我们认为开发此系统的条件已经具备,可以开始进行开发。
第二篇:连连看游戏设计
写书评,赢取《编程之美--微软技术面试心得》.cn/BCZM.asp 连连看游戏设计
连连看是一种很受大家欢迎的小游戏。微软亚洲研究院的实习生
们就曾经开发过一个类似的游戏——Microsoft Link-up。
图1-17 连连看游戏示意图
图1-17为Microsoft Link-up的一个截图。如果用户可以把两个同样的图用线(连线拐的弯不能多于两个)连到一起,那么这两个头像就会消掉,当所有的头像全部消掉的时候,游戏成功结束。游戏头像有珍稀动物、京剧脸谱等。Microsoft Link-up还支持用户输入的图像库,微软的同事们曾经把新员工的漫画头像加到这个游戏中,让大家在游戏之余也互相熟悉起来。
假如让你来设计一个连连看游戏的算法,你会怎么做呢?要求说明:
1. 怎样用简单的计算机模型来描述这个问题?
2. 怎样判断两个图形能否相消?
3. 怎样求出相同图形之间的最短路径(转弯数最少,路径经过的格子数目最少)。
4. 怎样确定目前是处于死锁状态,如何设计算法来解除死锁?
写书评,赢取《编程之美--微软技术面试心得》.cn/BCZM.asp 分析与解法
连连看游戏的设计,最主要包含游戏局面的状态描述,以及游戏规则的描述。而游戏规则的描述就对应着状态的合法转移(在某一个状态,有哪些操作是满足规则的,经过这些满足规则的操作,会到达哪些状态)。所以,自动机模型适合用来描述游戏设计。
下面是一个参考的连连看游戏的伪代码:
代码清单1-22 生成游戏初始局面
Grid preClick = NULL, curClick = NULL;
while(游戏没有结束)
{
监听用户动作
if(用户点击格子(x, y),且格子(x, y)为非空格子)
{
preClick = curClick;
curClick.Pos = (x, y);
}
if(preClick != NULL && curClick != NULL
&& preClick.Pic == curClick.Pic
&& FindPath(preClick, curClick) != NULL)
{
显示两个格子之间的消去路径
消去格子preClick, curClick;
preClick = curClick = NULL;
} }
从上面的整体框架可以看到,完成连连看游戏需要解决下面几个问题:
1. 生成游戏初始局面。
2. 每次用户选择两个图形,如果图形满足一定条件(两个图形一样,且这两个图形之间存在少于3个弯的路径),则两个图形都
写书评,赢取《编程之美--微软技术面试心得》.cn/BCZM.asp 能消掉。给定具有相同图形的任意两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。如果这个最优路径的转弯数目少于3,则这两个格子可以消去。 3. 判断游戏是否结束。如果所有图形全部消去,游戏结束。 4. 判断死锁,当游戏玩家不可能再消去任意两个图像的时候,游戏进入“死锁”状态。如图1-18,该局面中已经不存在两个相同的图片相连的路径转弯数目小于3的情况。
在死锁的情况下,我们也可以暂时不终止游戏,而是随机打乱局
面,打破“死锁”局面。
图1-18 连连看死锁的情况
首先思考问题:怎样判断两个图形能否相消?在前面的分析中,我们已经知道,两个图形能够相消的充分必要条件是这两个图形相同,且它们之间存在转弯数目小于3的路径。因此,需要解决的主要问题是,怎样求出相同图形之间的最短路径。首先需要保证最短路径的转弯数目最少。在转弯数目最少的情况下,经过的格子数目也要尽可能地少。
在经典的最短路径问题中,需要求出经过格子数目最少的路径。而这里,为了保证转弯数目最少,需要把最短路径问题的目标函数修改为从一个点到另一个点的转弯次数。虽然目标函数修改了,但算法的框架仍然可以保持不变。广度优先搜索是解决经典最短路问题的一个思路。我们看看在新的目标函数(转弯数目最少)下,如何用广度优先搜索来解决图形A(x1, y1)和图形B(x2, y2)之间的最短路径问题。
首先把图形A(x1, y1)压入队列。
(x1, y1)可以直线到达的格子(即图形A(x1, y1)然后扩展图形A
写书评,赢取《编程之美--微软技术面试心得》.cn/BCZM.asp 可以通过转弯数目为0的路径(直线)到达这些格子)。假设这些格子为集合S0,S0 = Find(x1, y1)。如果图形B(x2, y2)在集合S0中,则结束搜索,图形A和B可以用直线连接。
否则,对于所有S0集合中的空格子(没有图形),分别找到它们可以直线到达的格子。假设这个集合为S1。S1 = {Find(p)| p ∈S0}。S1包含了S0,我们令S1’= S1-S0,则S1’中的格子和图形A(x1, y1)可以通过转弯数目为1的路径连起来。如果图形B(x2, y2)在S1’中,则图形A和B可以用转弯数目为1的路径连接,结束搜索。
否则,我们继续对所有S1’集合中的空格子(没有图形),分别找出它们可以直线到达的格子,假设这个集合为S2,S2 = Find{ Find(p)| p ∈S1’}。S2包含了S0和S1,我们令S2’= S2 - S0 - S1 = S2 - S0 - S1’。集合S2’是图形A(x1, y1)可以通过转弯数目为2的路径到达的格子。如果图形B(x2, y2)在集合S2’中,则图形A和B可以用转弯数目为2的路径连接,否则图形A和B不能通过转弯小于3的路径连接。
在扩展的过程中,只要记下每个格子是从哪个格子连过来的(也就是转弯的位置),最后图形A和B之间的路径就可以绘制出来。
在上面的广度优先搜索过程中,有两步操作:S1’ = S1 - S0和S2’= S2 - S0 -S1。它们可以通过记录从图形A(x1, y1)到该格子(x, y)的转弯数目来实现。开始,将所有格子(x, y)和格子A(x1, y1)之间路径的最少转弯数目MinCrossing(x, y)初始化为无穷大。然后,令MinCrossing(A)= MinCrossing(x1, y1)= 0,格子A到自身当然不需要任何转弯。第一步扩展之后,所有S0集合中的格子的MinCrossing值为0。在S0集合继续扩展得到的S1集合中,格子X和格子A之间至少有转弯为1的路径,如果格子X本身已经在S0中,那么,MinCrossing(X)= 0。这时,我们保留转弯数目少的路径,也就是MinCrossing(X)= MinValue(MinCrossing(X), 1)= 0。这个过程,就实现了上面伪代码中的S1’= S1 - S0。S2’= S2 - S0–S1的扩展过程也类似。
经过上面的分析,我们知道,每一个格子X(x, y),都有一个状态值MinCrossing(X)。它记录下了该格子和起始格子A之间的最优路径的转弯数目。广度优先搜索,就是每次优先扩展状态值最少的格子。如果要保证在转弯数目最少的情况下,还要保持路径长度尽可能地短,则需要对每一个格子X保存两个状态值MinCrossing(X)和MinDistance(X)。从格子X扩展到格子Y的
写书评,赢取《编程之美--微软技术面试心得》.cn/BCZM.asp 过程,可以用下面的伪代码实现: if((MinCrossing(X) + 1 < MinCrossing(Y)) ||
((MinCrossing(X) + 1 == MinCrossing(Y) && (MinDistance(X) +
Dist(X,Y) < MinDistance(Y)))
{
MinCrossing(Y) = MinCrossing(X) + 1;
MinDistance(Y) = MinDistance(X) + Dist(X, Y);
}
也就是说,如果发现从格子X过来的路径改进了转弯数目或者路径的长度,则更新格子Y。
“死锁”问题本质上还是判断两个格子是否可以消去的问题。最直接的方法就是,对于游戏中尚未消去的格子,都两两计算一下它们是否可以消去。此外,从上面的广度优先搜索可以看出,我们每次都是扩展出起始格子A(x1, y1)能够到达的格子。也就是说,对于每一个格子,可以调用一次上面的扩展过程,得到所有可以到达的格子,如果这些格子中有任意一个格子的图形跟起始格子一致,则它们可以消去,目前游戏还不是“死锁”状态。
扩展问题:
1. 在连连看游戏设计中,是否可以通过维护任意两个格子之间的最短路径来实现快速搜索?在每一次消去两个格子之后,更新我们需要维护的数据(任意两个格子之间的最短路径)。这样的思路有哪些优缺点,如何实现呢?
2. 在围棋或象棋游戏中,经过若干步操作之后,可能出现一个曾经出现过的状态(例如,围棋中的打劫)。如何在围棋、象棋游戏设计中检测这个状态呢?