连连看课程设计.docx
- 文档编号:6107247
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:29
- 大小:27.26KB
连连看课程设计.docx
《连连看课程设计.docx》由会员分享,可在线阅读,更多相关《连连看课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
连连看课程设计
第一章前言
1.背景
游戏“连连看”顾名思义就是找出有关系的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在必定的规则以内能够做为有关系办理。
“连连看”的发展经历了从桌面游戏、在线游戏、交际游戏三个过程。
游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来盛极一时,也吸引众多程序员开发出多种版本的“连连看”。
这此中,顾方编写的“阿达连连看”以其优良的制作广受好评,这也成为顾方“阿达系列软件”的中心产品。
并于2004年,获得了国家版权局的计算机软件著作权登记证书。
跟着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。
如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华美界面吸引了一大量的女性玩家。
2008年,跟着交际网络的普及和开放平台的盛行,“连连看”被引入了交际
网络。
“连连看”与个人空间相联合,被迅速的流传,成为一款热点的交际游戏,此中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。
网络小游戏、网页游戏愈来愈受网民欢迎,除了玩的方法简单外(不像其余游戏还需要注册下载繁琐过程),好多游戏不乏经典。
连连看游戏就是典型。
不论走到哪个网页游戏网站,连连看游戏老是排在受玩家欢迎排名的前5
位,休闲、兴趣、益智是连连看玩不厌的精髓,且不分男女老小、工薪白领,是一款合适大众的经典网络、单机休闲小游戏。
游戏《连连看》,只需将相同的两张牌用三根以内的直线连在一同就能够除去,规则简单简单上手。
游戏速度节奏快,画面清楚可爱,合适仔细的玩家。
丰
富的道具和公共模式的加入,增强游戏的竞争性。
多款式的地图,使玩家在各个游戏水平都能够找寻到挑战的目标,长久地保持游戏的新鲜感。
该游戏由30张不一样的图片构成,游戏开始将会出现30张随机组合的图片,
在规则下点击两张相同的图片后图片将会消逝。
图片所有消完为游戏成功。
游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。
1.1课程设计内容
(1)游戏计分功能
当消去两个相同的图片后分数将增添100分。
1
(2)退出功能
该功能有一个“退出”按钮,当按下“退出”按钮后,将直接退出游戏。
(3)成功达成任务时显示的
该功能有,恭贺成功,一个“再来一局”的按钮,当按下“再来一局”按钮后,图片将会从头摆列,从头开始游戏。
(4)游戏倒计时功能
在游戏界面的上方有一个倒计时的进度条,增添游戏的难度,激发玩家的挑战兴趣。
2
第二章系统介绍
1.连连看游戏规则
1.1游戏基本规则
用鼠标左键点击方块,将2个图案相同的方块用连线连结起来,连结线不多于3根直线,连结后方块就会消逝。
在规定的时间内将30张图片所有除去。
1.2操作规则
选择一个图片用鼠标左键点击,图片会变色,而后点击另一个相同图片,假如能够连线就成功消逝,假如不可以连线,第一次选择的图片就会无效,而后将继
续找寻切合规则的图片。
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(){//获得
f:
/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
BorderLayout());//设置时间分数面板布局为界限布局
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){
rows=(int)
cols=(int)
(Math.random()*5+1);
(Math.random()*6+1);
while(grid[cols][rows]!
=
rows=(int)
0)//循环嵌套
(Math.random()*5+1);
{
}
cols=(int)
this.grid[cols][rows]
(Math.random()*6+1);
=randoms;
rows=(int)
}
(Math.random()*5+1);
}
}
}
this.grid[cols][rows]=
publicvoidscore()//方法申明
save[n];//this出此刻实例方法中,表示使用
{
该方法的目前对象
n--;
scoreLable.setText(String.valueOf(Integer.parseInt(scoreLable
.getText())+100));
}
publicvoidreload()//方法申明
{
intsave[]=newint[30];//创
建申明数组
intn=0,cols,rows;//变量定
义
intgrid[][]=newint[8][7];//
创立申明数组
for(inti=0;i<=6;i++){
for(intj=0;j<=5;j++)
{
}
mainFrame.setVisible(false);//
窗口不行见
pressInformation=false;//这里必定要将按钮点击信息归为初始
init();
for(inti=0;i<6;i++)//for循
环
{
for(intj=0;j<5;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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 连连 课程设计