连连看课程设计Word格式.docx
《连连看课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《连连看课程设计Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
续找寻切合规则的图片。
1.3成功和失败
把所有的图片成功除去完成,则以为是本次游戏成功。
选择图片刻间是有限的,在规定的时间内,若未能将图片所有除去,则失败,提示能否再来一局。
2.游戏流程图剖析
流程图剖析以下列图2.1所示:
3
开始
鼠标点击地点确实定
判断能否点击在图片方块
?
判断能否已选定一个方块
选定第一个方块选定第二个方块
判断能否能够抵消方块
抵消方块
除去选定方块的记录
结束
图2.1游戏流程图
此次设计所使用的语言为Java。
主要应用到Swing组件,Java小程序,事
4
件及接口等。
这些接口为游戏的制作供给了便利的条件,本系统的主要特色就是运用Swing组件和事件办理技术,进行界面的绘制,鼠标的操作,以及积分的显示等功能。
此次经过连连看的设计开发将对理解Swing组件技术以及事件办理技术在游戏方面的应用起到很大的帮助作用,同时为掌握Java编程技术及二维休闲游戏设计的一般方法打下坚固的基础。
游戏程序设计一般都采纳面向对象的设计模式,供给了一个简单的图像显示接口,利用多文档视图构造的面向对象设计模式。
5
第三章系统游戏设计
1.系统剖析
1.1游戏系统需求剖析
主要设计目标:
使用GUI设计连连看,载入图片信息,进行正确剖析系统的功能,总载入
30张图片,且图片信息成对出现,且能够偶数项删除,并拥有计时等功能游戏中将有“退出”功能,选择退出命令后程序将停止履行,封闭窗口。
还将有“再来一局”功能,选择再来一局命令后程序将对图片从头摆列,从头开始游戏。
该游戏还有一个时间倒计时的进度条,提示玩家节余的时间,增添游戏的难度。
在界面的顶部有计分功能,当玩家消去图片后就会博得相应的分数。
1.2系统开发及运转环境
硬件平台:
本游戏对硬件要求较低,基本都能够正常运转。
软件平台:
操作系统:
Windows系列。
开发工具包:
。
1.3系统功能主要要求
1.系统采纳图片连连看方式.界面雅观,用户使用灵巧,方便快捷.
2.计分自动达成,提升工作效率。
3.用进度条进行游戏界面的计时功能。
4.可方便快捷地进行下一盘游戏,而且两盘的分数在规定的时间内会叠加起
来。
5.操作员能够随时退出游戏。
6.对用户输入的信息,系统进行严格的信息查验,尽可能清除人为的错误。
7.系统最大限度地实现了易保护性和易操作性。
8.系统运转稳固、安全靠谱。
6
2.系统整体构造
连连看是鉴于java基本知识设置的一个小游戏,最中间有连连看的主体构
成——连连看图片,上边有计分、时间条,下边有退出、再来一局按键。
一个标准的连连看系统应当包含以下几大功构造:
1、鼠标操作模块;
2、图像办理模块;
3、菜单模块;
4、显示模块。
3.系统各模块功能介绍
系统各功能模块实现的功能为
鼠标操作模块:
玩家在玩游戏时需要运用鼠标与游戏系统进行交互,这个模块的实现是运用鼠标事件触发的,在连连看的游戏场景中运用鼠标进行交互
的事件主要有两个,一个是用户点击游戏场景中的图片刻触发的事件。
此外一种是用户点击菜单栏上的菜单按钮时说触发的鼠标事件。
当用户点击游戏场景中的图像块时就会响应鼠标的OnLButtonDown事件,而后进行相应的逻辑判断。
当用户点击菜单栏上的菜单命令时就会触发相应的菜单命令对应的相应的事件。
图像办理模块:
程序运转后,用户经过游戏菜单的开始命令进入游戏,在这个模块里要把资源文件中的图片进行办理而后加载到游戏场景中这在程序中是
经过DrawMap()方法实现的。
此顶用到的API函数主假如是BitBlt,他的主要功能是将某一内存块的数据传递到另一内存块,前一内存块被称为"
源"
,后一内存块被称为"
目标"
图象程序开发者使用Blit的函数在内存中将某页面上的一幅位图经过必定的变换转移到另一个页面上。
菜单模块:
玩家在游戏游戏过程中随时能够经过选择不一样的菜单命令来进
行相应的操作,菜单的制作是经过MFC框架中多文档程序的菜单栏来增添的,
菜单包含一下几个部分:
(1)游戏菜单中的开始、放弃和退出命令。
界面显示模块:
游戏场景中界面的显示包含以下部分:
游戏计分,节余时间、游戏主场景,游戏达成提示界面。
这些显示信息会跟着游戏的进行而动向改变。
在连连看游戏中。
整个连连看游戏的系统是在VC++6.0开发环境中进行开发的,开发过程中大量的使用了微软供给的API接口方法,减少了程序代码的编写量、提升了编程效率。
7
第四章系统的详细实现
1.系统主要运转界面
1.1运转界面
运转界面以下列图4.1所示:
图4.1运转界面
1.2履行界面,进入游戏正常运转
履行界面以下列图4.2所示:
8
图4.2履行界面
1.3时间到界面
时间到界面以下列图4.3所示:
9
图4.3时间到界面
1.4赢家界面
游戏运转成功界面以下列图4.4所示:
图4.4游戏运转成功界面
10
1.5进度条界面
程序运前进度条以下列图4.5所示:
图4.5程序运前进度条
2.游戏实现代码
2.1主面板内所需要的组件的申明
主面板内所需要的组件的申明朝码以下列图4.6所示:
图4.6组件申明
2.2填补一个矩形框,进行显示时间
填补一个矩形框,进行显示时间代码以下列图4.7所示:
图4.7填补矩形框显示时间
11
2.3主面板及各组件初始化
主面板及各组件初始化以下列图4.8所示:
图4.8主面板及各组件初始化
2.4创立时间对象,每隔100毫秒刷新一次
创立时间对象,每隔100毫秒刷新一次代码以下列图4.9所示:
图4.9创立时间对象
2.5分数代码。
每除去一对图片,则分数加上100。
代码以下列图4.10所示:
12
图4.10分数代码
3.除去图片详细状况
当点击两个按钮的图片相同时,运用消去算法来判断能否可消去,详细状况以下:
3.1两次点击相同图片相邻
当两次点击的相同图片相邻时,以下列图4.11所示,则消去。
图4.11点击图片相邻
3.2水平方向消去算法
当两次点击的相同图片以下列图4.12所示,则在水平方向用循环算法for(j=0;
j<
7;
j++)判断,设第一次选中按钮坐标为x0,y0,第二次选中按钮坐标为x,y,则先找到grid(x0,j)为0的j,再判断x水平方向x到j能否grid(x,j)都为0,假如则判断x0水平方向x0到j能否grid(x0,j)都为0,假如,则再判断x和
x0,若相等消去,若不等判断在j竖直方向上能否grid(n,j)(n为x到x0之间的数)都为0,假如则消去。
13
图4.12水平消去算法图片
3.3竖直方向消去算法
竖直方向消去算法。
状况与水平方向基真相同,要点提一下列图片4.13所示的状况,其余状况不再重复描绘。
出现下列图状况则会消去,消去原理与水平方向消去算法相像。
图4.13竖直消去算法图片
14
第五章程序清单
packagec02;
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.*;
importjavax.swing.*;
classMyPanelextendsJPanel{intcnt=0;
publicvoidpaint(Graphicsg){
super.paint(g);
g.setColor(Color.red);
g.fillRect(this.getWidth()-cnt,
0,cnt,this.getHeight());
//填补一个矩形地区
}
publicbooleanisEnd(){
if(cnt++>
this.getWidth())
returntrue;
repaint();
returnfalse;
publicclassLianLianKanimplementsActionListener{
JFramemainFrame;
//主面板
MyPaneltime;
JPanelcenterPanel,southPanel,northPanel;
//3个子面板
JButtondiamondsButton[][]=newJButton[6][5];
//游戏按钮数组
JButtonexitButton,newlyButton;
//退出,从头开始按钮
JLabelscoreLable;
//分数标签JButtonfirstButton,secondButton;
//分别记录两次被选中的按钮
Timertimer;
intgrid[][]=newint[8][7];
//储藏游戏按钮地点
staticbooleanpressInformation=
false;
//判断能否有按钮被选中
intsum=0;
intx0=0,y0=0,x=0,y=0,
fristMsg=0,secondMsg=0;
//游戏按钮的地点坐标
inti,j,k,n;
//除去方法控制
//=============调用图片
================//
privatestaticIconicons[]=newImageIcon[6*5];
//静态数组icons【】用于寄存图片绝对地点
privatestaticfinalStringimgDir=
"
f:
/meng"
;
static{
try
{
Filedir=new
File(imgDir);
File[]imgFiles=
dir.listFiles(newFilenameFilter(){//获得
/meng文件中的图片
publicboolean
accept(Filedir,Stringname){
return
name.toLowerCase().endsWith("
.jpg"
);
});
for(inti=0;
i<
6*5;
i++)
{//获得f:
/meng文件中的图
片的绝对路径放在icons数组中icons[i]=new
ImageIcon(imgFiles[i].getAbsolutePath());
//
System.out.println(i+"
"
+icons[i]);
}catch(Exceptione){e.printStackTrace();
//异
常办理
publicvoidinit(){//
初始化面板
mainFrame=newJFrame("
JKJ连连看"
//设置主面板的名称为"
JKJ连连
15
看"
mainFrame.setDefaultCloseOperation(JF
rame.EXIT_ON_CLOSE);
//结束窗体所在
的应用程序
mainFrame.setLayout(new
BorderLayout());
//设置为BorderLayout()
布局
scoreLable=newJLabel("
0"
centerPanel=newJPanel();
设置面板
southPanel=newJPanel();
northPanel=newJPanel();
northPanel.setLayout(new
//设置时间分数面板布局为界限布局
mainFrame.add(centerPanel,
Center"
//增添组件
mainFrame.add(southPanel,
South"
mainFrame.add(northPanel,
North"
centerPanel.setLayout(new
GridLayout(6,5));
//设置一个6*5的网格布
局
for(intcols=0;
cols<
6;
cols++){
for(introws=0;
rows<
5;
rows++){
//===========设
置图片=============//
diamondsButton[cols][rows]=newJButton(
icons[grid[cols+1][rows+1]]);
diamondsButton[cols][rows].addActionListener(this);
centerPanel.add(diamondsButton[cols][ro
ws]);
exitButton=newJButton("
退
出"
//退出按钮
exitButton.addActionListener(this);
newlyButton=newJButton("
再来一局"
//再来一局按钮
newlyButton.addActionListener(this);
southPanel.add(exitButton);
增添退出按钮
southPanel.add(newlyButton);
//增添再来一局按钮
scoreLable.setText(String.valueOf(Integer.parseInt(scoreLable
.getText())));
time=newMyPanel();
northPanel.add(time,
BorderLayout.CENTER);
//时间-分数面
板上在CENTER地点增添时间
northPanel.add(scoreLable,
BorderLayout.WEST);
//时间-分数面板上
在WEST地点增添分数Lable
mainFrame.setSize(500,450);
//设置主面板的大小
mainFrame.setLocationRelativeTo(null);
//设置窗口在屏幕中间显示
mainFrame.setVisible(true);
设置窗口可见
publicvoidstartt(){
timer=newTimer(10,this);
//创立时间对象,每隔100毫秒计时一次。
init();
timer.start();
publicvoidrandomBuild()//初始化
寄存游戏按钮地点的grid[][]数组(也就是
icon【】下标+1)
intrandoms,cols,rows;
//变
量定义
16
for(inttwins=1;
twins<
=15;
n++;
twins++){
randoms=(int)
(Math.random()*24);
for(intalike=1;
alike<
=
n=n-1;
2;
alike++){
this.grid=grid;
//this
出此刻
cols=(int)
实例方法中,表示使用该方法的目前对象
(Math.random()*6+1);
while(n>
=0)//while
循环
rows=(int)
(Math.random()*5+1);
cols=(int)(Math.random()
while
*6+1);
(grid[cols][rows]!
=0){
while(grid[cols][rows]!
0)//循环嵌套
this.grid[cols][rows]
=randoms;
this.grid[cols][rows]=
publicvoidscore()//方法申明
save[n];
//this出此刻实例方法中,表示使用
该方法的目前对象
n--;
.getText())+100));
publicvoidreload()//方法申明
intsave[]=newint[30];
//创
建申明数组
intn=0,cols,rows;
//变量定
义
//
创立申明数组
=6;
i++){
for(intj=0;
=5;
j++)
mainFrame.setVisible(false);
窗口不行见
pressInformation=false;
//这里必定要将按钮点击信息归为初始
init();
i++)//for循
环
j++)//
循环嵌套
if(grid[i+1][j+1]
==0)
if(this.grid[i][j]!
=0)diamondsButton[i][j].setVisible(false);
{窗口不行见
save[n]=}
this.grid[i][j];
}
17
publicvoidestimateEven(intplaceX,intplaceY,JButtonbz)//点击按钮触发
if(pressInformation==false)//
选择语句
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true;
}else{
x0=x;
y0=y;
fristMsg=secondMsg;