软件工程课程设计面向对象五子棋.docx
《软件工程课程设计面向对象五子棋.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计面向对象五子棋.docx(47页珍藏版)》请在冰豆网上搜索。
软件工程课程设计面向对象五子棋
海南大学信息科学技术学院
课程设计报告
设计课程:
软件工程
设计课题:
五子棋游戏开发
*******李文柯
专业:
计算机科学与技术
班级:
08级
(1)班
同组人员:
向俊龙、罗秋兰、陈小燕、赵
梦、辜武斌、全克杰、徐纯金
**********
问题概念················································3
序言···································4
选题背景·································4
开发目的
娱乐···················································5
销售···················································6
可行性研究··········································3
可行性研究前提·······························5
可行性研究任务
技术可行性···················································5
经济可行性
操作可行性
社会因素
系统开发打算·········································4
系统要求···································4
实施打算
支持条件
用户需求··································5
模型分析··········································6
模型设计·······································7
代码·······································7
界面设计·······································8
测试·········································9
总结········································9
基于JAVA五子棋
一、问题概念
序言
随着运算机技术的飞速进展和物联网时期的开启,愈来愈多的人被吸引到了这股运算机风来。
在今天,运算机已经与人们的生活息息相关,尤其是由信息技术推动和基于因特网而兴起的电子游戏,已经成为大人小孩日常休闲的一种必不可少的方式,已经成为人们普遍同意的一种崭新的休闲娱乐方式。
面对现今猛烈的商业竞争,商业主纷至沓来,纷纷进入游戏那个缤纷的世界,伸展拳脚。
游戏公司也纷纷开启,在那个游戏大潮中大展身手。
游戏作为一种娱乐方式,古已有之,随着社会经济生活的日趋丰硕多彩,游戏自身也在发生各类转变,从手动游戏,到桌面游戏,以至此刻的电脑游戏,显得日趋兴隆,转变出迷人的色彩。
相信在不远的以后,随着电子技术的飞速进展,电脑游戏会迅猛进展,以一种更新更有趣的方式呈此刻咱们眼前。
选题背景
随着运算机技术的飞速进展和物联网时期的开启,必然带动了游戏界的迅猛进展,电脑游戏在中国的显现和进展最先要追溯到上世纪80年代初,80年代初期,中国的一些儿童娱乐场和青年活动中心所第一显现了街机这种那时只是供青青年娱乐的大型电子玩具。
在那时,这种大型街机还很简陋,游戏画面相对而言是很一样,游戏种类也很少,不外乎也确实是任天堂公司的《超级玛利》、《大金刚》,还有《小蜜蜂》之类。
大约到了1986年左右,一种黑白液晶掌上游戏机在学校普及起来。
这种多数出自日本NAMCO和KONAMI两大游戏软件开发公司的游戏,此刻还能回忆起的有《打鸟》、《救火》、《战斗厨房》、《打飞碟》、《海底寻宝》等等,那些富裕的小孩几乎是人手一款,有的人乃至会买好几款。
同一年,电子游戏街机带着《魂斗罗》、《雷鸟》、《赤色要塞》等一大量新世代游戏,走进中国,走进民间。
一种叫做电子游戏厅,简称街机厅的游戏专门店在中国各地开花。
90年前后,又一种新型家用机悄悄进入中国,这种在画面不输于街机,游戏质量和数量极丰硕的游戏机,先是在那些有海外关系的家庭中普及起来。
这确实是任天堂的8位游戏机FC,俗称红白机。
在那时,国内的FC多数来自香港,本机价钱在1000元上下,卡带软件价钱在800元上下。
关于一样家庭来讲,如此的价钱全然是无法同意的,到了91年左右,FC出此刻国内各大商店柜台上,而一些私人游戏店也接着FC在国内的大量显现进展起来。
FC的主机价钱骤降至不到300元,到后来,世嘉MD为中国带来了16位元的游戏新世代,世嘉MD和任天堂SFC,使中国的游戏者和世界愈来愈近,也使中国的游戏媒体慢慢成熟起来。
就在中国游戏业进入次世代的同时,世界电脑游戏业也在不断的进展,而家用电脑不断普及,而且已经慢慢进入WINDOWS时期的中国,那个时候电脑游戏也同步开始进展,以至于后面显现了咱们耳熟能详的仙剑奇侠传,金庸奇侠转,三国等游戏,在90年代末,互联网的来临也促使了网络游戏的进展,最先一批网游如石器时期,传奇等,让中国人开始了解和喜爱上网络游戏,一度盛行到不行,直到2002年,“蓝极速”网吧事件才致使国家开始大力整顿网吧。
开发目的
娱乐
娱乐是游戏的本质,一款好和简单的游戏,既能够让人们在工作以后取得放松,又能打发时刻。
五子棋为一款显现最先,操作最简便,重玩性很高的游戏,深受广大青年,青年,老年的喜爱,不但能休闲娱乐,又能锻炼脑力,避免老年痴呆等各类疾病。
销售
五子棋这种小游戏一样是配套在其他游戏或在各大游戏平台上销售。
二、可行性研究
针对上面的内容,咱们做了调查研究,取得了下面详细的可行性研究报告。
可行性研究前提
该游戏的是为人们娱乐休闲生活而开发的,在今天那个工作压力专门大的今天,放松和休闲是很多人们日常追求的情形,为了丰硕人们的日常业余生活,为了响应国家的建设和谐社会的进展方针,此游戏完全有进展的必要,且操作电脑,有好话界面,是人们娱乐休闲的必备游戏。
可行性研究的任务
技术可行性
Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
Java平台由Java(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)组成。
Java应用接口为Java应用提供了一个独立于的标准接口,可分为大体部份和扩展部份。
在硬件或操作系统平台上安装一个Java平台以后,Java应用程序就可运行。
此刻Java平台已经嵌入了几乎所有的操作系统。
如此Java程序能够只编译一次,就能够够在各类系统中运行。
Java应用编程接口已经从版进展到版。
目前经常使用的Java平台基于,最近版本为。
Java分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。
Java操作简便,接口丰硕,关于制作图形界面尤其方便。
经济可行性
该游戏体积小,结构简单,开发周期短,适用面广,经济效益可观。
操作可行性
操作超级简单,启动游戏,在游戏菜单项点击开始即能够开始游戏,在模式菜单能够选择人机对战或人人对战,默以为人机对战,在记时栏能够设置时刻,只有在人人对战下才能够设置,在棋盘菜单能够设置游戏棋盘大小,有20*15,30*20,40*30三个选择,在帮忙菜单能够查看游戏帮忙。
游戏界面友好简单。
社会因素可行性
该游戏不含色情,暴力,反动等内容,内容踊跃向上,可不能对社会造成负面阻碍。
符合国家游戏标准的标准。
三、游戏开发打算
综上所述,为了能够适时适地的知足广大用户的需求,为了正确、有序地指导该游戏的开发,使该游戏能够顺利完成、并在客户要求的期限内交付其利用。
、系统要求
游戏界面简单友好,操作一目了然,内容丰硕,不含BUG,能正确判定游戏输赢,关于人机对战电脑能专门好识别游戏内容并专门好做出判定,关于记时功能,对线程能专门好完成记时功能。
、实施打算
为了取得高质量的软件产品,咱们的开发采纳软件工程的生命周期进程,将整个开发分为几个时期。
就开发时期、开发人员和开发进度咱们做如下安排:
(注:
该打算仅供参考,可在开发进程中做适当的调整)
编号
开发阶段名称
工作时间(日/人)
备注
1
问题定义
1
确定游戏开发条件
2
可行性研究
1
根据要开发的游戏,开展前期的调查,完成可行性研究报告,确定游戏开发的可行性
3
游戏开发计划
2
具体部署,详细制定游戏开发计划
4
用户需求
1
仔细分析游戏,依据开发前的调查,确定游戏的功能,完成规格说明书
5
模型分析
2
根据用户需求得到的功能,进行角色确定和用例分析
6
模型设计
3
在模型分析的基础下,进行类模块的设计
7
编码测试
1
依据详细设计,编写相关代码实现目标
、支持条件
为了保证游戏的开发按上面的打算进行,需要如下支持:
(1)运算机技术方面的支持:
开发小组成员能熟练利用Eclipse或Jgreator等IDE,能把握运算机软、硬件方面的知识。
(2)、小组成员方面的支持:
小组成员要踊跃配合组长的分派,能按时完成任务。
四用户需求
需求分析
五子棋为益智类游戏,要紧规那么是黑方和白方连番下棋,谁先连成五颗相同颜色棋子谁获胜。
要求电脑能判定输赢,能设置棋盘大小,模式分为人人对战和人机对战,人机对战要求电脑能识别当前走棋,能自己走到最适合的位置,要求游戏有必然的人工智能。
系统需求:
①能走棋,能摆放棋子;
②能够实现电脑判定输赢;
③能够设置棋盘大小;
④能够设置人人对战和人机对战模式,人机对战模式电脑有必然人工智能;
⑤人人对战模式能够设置时刻;
功能图:
系统性能要求:
①系统平安、靠得住;
②功能齐全;
③操作方便、界面友好;
④易于保护和扩充。
用户操作要求:
会大体电脑操作
熟悉游戏规那么及进程
.运行需求
用户界面
在用户界脸部份,依照需求分析的结果,用户需要一个用户友善界面。
在界面设计上,应做到简单明了,易于操作,而且要注意到界面的布局,应突出的显示重要和犯错信息。
外观上也要做到合理化。
硬件接口
在输入方面,关于键盘、鼠标的输入,可用JAVA标准输入/输出,对输入进行处置。
在输出方面,也可用JAVA标准输入/输出对其进行处置。
故障处置
当显现故障或BUG时,请与本人联系。
五模型分析
、角色:
该游戏有两个角色组成,一个是玩家,一个是时刻。
、用例:
别离有帮忙用例,计时用例,模式用例,棋盘用例,人人对战用例,人机对战用例,走棋用例。
用例分析及描述
、计时分析:
用例名称:
计时
描述:
时间角色利用计时用例实现计时功能
标识符:
uc7
优先级:
A(高)
角色:
时间
前置条件:
游戏成功开启
主事件流:
1.玩家设置游戏计时时间
2.系统计时
3.系统判断时间是否已到
A1时间未到
A2时间已到
4.用例结束
其他事件流:
A1:
时间未到
(1).返回主事件流第2步
A2:
时间已到
(1).系统显示时间已到对话框
(2).跳转到主事件流第4步
后置条件:
完成计时功能
特殊需求:
只有人人对战才能计时
计时活动框图:
、模式分析:
用例名称:
模式
描述:
玩家通过模式用例完成对游戏模式的创建
标识符:
uc2
优先级:
A(高)
角色:
玩家
前置条件:
游戏已经正常启动
主事件流:
1.玩家选择游戏模式菜单项
2.输入模式选择
A1:
人人对战
A2:
人机对战
3.系统初始化游戏模式
4.用例结束
其他事件流:
A1:
程序异常错误
(1).系统显示程序异常错误提示信息
(2).退出程序
A1:
计时设置
(1).人人模式可以进行时间设置
(2).转到主事件流第三步
A2:
程序异常错误
(1).系统显示程序异常错误提示信息
(2).退出程序
后置条件:
系统成功设置游戏模式。
特殊需求:
只有人人模式才开始计时
、棋盘分析:
用例名称:
棋盘
描述:
玩家使用棋盘用例完成对棋盘的设置
标识符:
uc1
优先级:
A(高)
角色:
玩家
前置条件:
游戏已经启动
主事件流:
1.玩家选择棋盘设置菜单项
2.选择棋盘模式大小
A1:
20*15
A2:
30*20
A3:
40*30
3.棋盘重绘
4.用例结束
其他事件流:
2:
棋盘设置出现程序异常错误
(1).系统显示程序异常错误提示信息
(2).退出程序
后置条件:
游戏成功设置棋盘大小,开始游戏
特殊需求:
棋盘活动框图:
、人机模式分析:
用例名称:
人机对战
描述:
玩家利用人机对战用例进行下棋
标识符:
uc4
优先级:
A(高)
角色:
玩家
前置条件:
玩家成功设置游戏模式,棋盘大小
主事件流:
1.玩家点击游戏开始菜单
2.玩家走棋
3.计算机走棋
4.系统判断
A1:
走棋无效
A2:
玩家胜利或失败
A3:
没有达到胜利或失败条件
5.系统显示游戏结果
6.用例结束
其他事件流:
A1:
走棋无效
(1).系统显示无效的提示信息
(2).返回主事件流第2步
A2:
玩家胜利或失败
(1).返回主事件流第5步
A2:
没有达到胜利或失败条件
(1).返回主事件流第2步
后置条件:
完成人机对战游戏
特殊需求:
人机对战不能进行时间设置
人机模式活动框图:
、人人模式分析:
用例名称:
人人模式
描述:
玩家利用人人对战用例进行下棋
标识符:
uc3
优先级:
A(高)
角色:
玩家
前置条件:
玩家成功设置游戏模式,棋盘大小,计时设置(也可以不用设置)
主事件流:
1.玩家点击游戏开始菜单
2.玩家走棋
3.游戏计时(没有设置则跳过)
4.系统判断
A1:
走棋无效
A2:
玩家胜利或失败
A3:
没有达到胜利或失败条件
5.系统显示游戏结果
6.用例结束
其他事件流:
A1:
走棋无效
(1).系统显示无效的提示信息
(2).返回主事件流第2步
A2:
玩家胜利或失败
(1).返回主事件流第5步
A2:
没有达到胜利或失败条件
(1).返回主事件流第2步
后置条件:
完成人人对战游戏
特殊需求:
人人模式活动框图:
、走棋用例分析:
用例名称:
走棋
描述:
玩家利用走棋用例进行游戏走棋
标识符:
uc5
优先级:
A(高)
角色:
玩家
前置条件:
玩家成功设置游戏模式,棋盘,计时,并且开始游戏
主事件流:
1.玩家点击下棋位置
2.系统判断
A1:
走棋无效
A2:
游戏胜利或失败
A3:
没有达到游戏结束条件
3.系统显示游戏结果
4.用例结束
其他事件流:
A1:
走棋无效
(1).系统显示无效的提示信息
(2).返回主事件流第1步
A2:
游戏胜利或失败
(1).跳转到主事件流第3步
A3:
没有达到游戏结束条件
(1).跳转到主事件流第1步
后置条件:
完成游戏主功能
特殊需求:
走棋活动框图:
、人人模式分析
用例名称:
帮助
描述:
玩家利用帮助用例查看游戏帮助
标识符:
uc6
优先级:
A(高)
角色:
玩家
前置条件:
游戏已经成功开启
主事件流:
1.玩家选择帮助菜单
2.系统弹出游戏帮助对话框
3.用例结束
其他事件流:
无
后置条件:
完成游戏帮助功能
特殊需求:
六模型设计
界面用户类:
业务类:
类关系:
七代码
import.*;
publicclassFiveChessDemo
{
publicstaticvoidmain(Stringargs[])
{
ChessFramecf=newChessFrame();
(true);
}
}
/********************ChessFrame**************************/
classChessFrameextendsJFrameimplementsActionListener,Runnable
{
publicstaticbooleanisCompute=true;
publicstaticbooleancheckComputer=true;
privateString[]strmode={"人机对战","人人对战"};
privateintwidth,height;
privateChessModelcm;
privateMainPanelmp;
publicintgameTime;
publicbooleanisComputerTime=true;
Threadt=newThread(this);
publicChessFrame()
{
("五子棋");
MapSize(20,15);
cm=newChessModel
(1);
mp=newMainPanel(cm);
(false);
Containercon=();
(mp,"Center");
JMenuBarmbar=newJMenuBar();
(mbar);
JMenugameMenu=newJMenu("游戏");
(makeMenu(gameMenu,newObject[]{
"开始","模式","计时",null,"退出"},this));
JMenusizeMenu=newJMenu("棋盘");
(makeMenu(sizeMenu,newObject[]{
"20*15",null,"30*20",null,"40*30"},this));
JMenuaboutMenu=newJMenu("帮忙");
(makeMenu(aboutMenu,newObject[]{
"帮忙","关于"},this));
();
();
etImage("");
//(bfimage,0,20,this);
(newFont("黑体",,20));
;
//(message,178,27);
//(150,5,140,25);
("黑方时刻"+blackTimeMessage,,;
("白方时刻"+whiteTimeMessage,,;
//(60,350,150,30);
//(255,350,150,30);
//画棋盘
if(i!
=width&&j!
=height){
;
(x,y,20,20);
}
//画黑色棋子
if(v==1){
;
(x-8,y-8,16,16);
;
(x-8,y-8,16,16);
}
//画白色棋子
if(v==2){
;
(x-8,y-8,16,16);
;
(x-8,y-8,16,16);
}
if(v==3){
;
(x-8,y-8,16,16);
}
}
publicvoidmousePressed(MouseEventevt){
intx=()-10)/20;
inty=()-10)/20;
if()=={
(x,y);
""+()[x][y]);
repaint();
if(x,y,())){
(this);
();
=false;
}
//人机对战
if&&!
()){
(),());
repaint();
if(),(),())){
(this);
();
}
}
}
}
publicvoidmouseClicked(MouseEventevt){
"---"+());
}
publicvoidmouseReleased(MouseEventevt){}
publicvoidmouseEntered(MouseEventmouseevt){}
publicvoidmouseExited(MouseEventmouseevent){}
publicvoidmouseDragged(MouseEventevt){}
publicvoidmouseMoved(MouseEvente){
intx=()-10)/20;
inty=()-10)/20;
(x,y);
repaint();
}
}
/****************ChessModel*************************/
classChessModel{
privateintwidth,height,modeChess;
publicstaticintx1,y1,x2,y2;
privateintx=0,y=0;
privateintarrMapShow[][];
privatebooleanisOdd,isExist;
ChessModel(intmodeChess){
=true;
if(modeChess==1){
PanelInit(20,15,modeChess);
x1=65;y1=370;x2=260;y2=370;
}
if(modeChess==2){
PanelInit(30,20,modeChess);
x1=100;y1=460;x2=390;y2=460;
}
if(modeChess==3){
PanelInit(40,30,modeChess);
x1=150;y1=650;x2=540;y2=650;
}
}
privatevoidPanelInit(intwidth,intheight,intmodeChess){
=width;
=height;
=modeChess;
arrMapShow=newint[width+1][height+1];
for(inti=0;ifor(intj=0;j<=height;j++){
arrMapShow[i][j]=-5;
}
}
}
publicb