连连看课程设计Word格式.docx

上传人:b****3 文档编号:17552143 上传时间:2022-12-07 格式:DOCX 页数:27 大小:819.33KB
下载 相关 举报
连连看课程设计Word格式.docx_第1页
第1页 / 共27页
连连看课程设计Word格式.docx_第2页
第2页 / 共27页
连连看课程设计Word格式.docx_第3页
第3页 / 共27页
连连看课程设计Word格式.docx_第4页
第4页 / 共27页
连连看课程设计Word格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

连连看课程设计Word格式.docx

《连连看课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《连连看课程设计Word格式.docx(27页珍藏版)》请在冰豆网上搜索。

连连看课程设计Word格式.docx

选择一个图片用鼠标左键点击,图片会变色,然后点击另一个同样图片,如果能够连线就成功消失,如果不能连线,第一次选择的图片就会失效,然后将继续寻找符合规则的图片。

 

1.3胜利和失败

把所有的图片成功消除完毕,则认为是本次游戏成功。

选择图片时间是有限的,在规定的时间内,若未能将图片全部消除,则失败,提醒是否再来一局。

2.游戏流程图分析

流程图分析如下图2.1所示:

图2.1游戏流程图

此次设计所使用的语言为Java。

主要应用到Swing组件,Java小程序,事件及接口等。

这些接口为游戏的制作提供了便捷的条件,本系统的主要特点就是运用Swing组件和事件处理技术,进行界面的绘制,鼠标的操作,以及积分的显示等功能。

这次通过连连看的设计开发将对理解Swing组件技术以及事件处理技术在游戏方面的应用起到很大的帮助作用,同时为掌握Java编程技术及二维休闲游戏设计的一般方法打下坚实的基础。

游戏程序设计一般都采用面向对象的设计模式,提供了一个简单的图像显示接口,利用多文档视图结构的面向对象设计模式。

第三章系统游戏设计

1.系统分析

1.1游戏系统需求分析

主要设计目标:

使用GUI设计连连看,载入图片信息,进行正确分析系统的功能,总载入30张图片,且图片信息成对出现,且可以偶数项删除,并具有计时等功能游戏中将有“退出”功能,选择退出命令后程序将终止执行,关闭窗口。

还将有“再来一局”功能,选择再来一局命令后程序将对图片重新排列,重新开始游戏。

该游戏还有一个时间倒计时的进度条,提醒玩家剩余的时间,增加游戏的难度。

在界面的顶部有计分功能,当玩家消去图片后就会赢得相应的分数。

1.2系统开发及运行环境

硬件平台:

本游戏对硬件要求较低,基本都可以正常运行。

软件平台:

操作系统:

Windows系列。

开发工具包:

JDKVersion1.6.2。

1.3系统功能主要要求

1.系统采用图片连连看方式.界面美观,用户使用灵活,方便快捷.

2.计分自动完成,提高工作效率。

3.用进度条进行游戏界面的计时功能。

4.可方便快捷地进行下一盘游戏,并且两盘的分数在规定的时间内会叠加起来。

5.操作员可以随时退出游戏。

6.对用户输入的信息,系统进行严格的信息检验,尽可能排除人为的错误。

7.系统最大限度地实现了易维护性和易操作性。

8.系统运行稳定、安全可靠。

2.系统总体结构

连连看是基于java基本知识设置的一个小游戏,最中间有连连看的主体构成——连连看图片,上面有计分、时间条,下面有退出、再来一局按键。

一个标准的连连看系统应该包括以下几大功结构:

1、鼠标操作模块;

2、图像处理模块;

3、菜单模块;

4、显示模块。

3.系统各模块功能介绍

系统各功能模块实现的功能为

鼠标操作模块:

玩家在玩游戏时需要运用鼠标与游戏系统进行交互,这个模块的实现是运用鼠标事件触发的,在连连看的游戏场景中运用鼠标进行交互的事件主要有两个,一个是用户点击游戏场景中的图片时触发的事件。

另外一种是用户点击菜单栏上的菜单按钮时说触发的鼠标事件。

当用户点击游戏场景中的图像块时就会响应鼠标的OnLButtonDown事件,然后进行相应的逻辑判断。

当用户点击菜单栏上的菜单命令时就会触发相应的菜单命令对应的相应的事件。

图像处理模块:

程序运行后,用户通过游戏菜单的开始命令进入游戏,在这个模块里要把资源文件中的图片进行处理然后加载到游戏场景中这在程序中是通过DrawMap()方法实现的。

其中用到的API函数主要是是BitBlt,他的主要功能是将某一内存块的数据传送到另一内存块,前一内存块被称为"

源"

,后一内存块被称为"

目标"

图象程序开发者使用Blit的函数在内存中将某页面上的一幅位图经过一定的变换转移到另一个页面上。

菜单模块:

玩家在游戏游戏过程中随时可以通过选择不同的菜单命令来进行相应的操作,菜单的制作是通过MFC框架中多文档程序的菜单栏来添加的,菜单包含一下几个部分:

(1)游戏菜单中的开始、放弃和退出命令。

界面显示模块:

游戏场景中界面的显示包括以下部分:

游戏计分,剩余时间、游戏主场景,游戏完成提示界面。

这些显示信息会随着游戏的进行而动态改变。

在连连看游戏中。

整个连连看游戏的系统是在VC++6.0开发环境中进行开发的,开发过程中大量的使用了微软提供的API接口方法,减少了程序代码的编写量、提高了编程效率。

第四章系统的具体实现

1.系统主要运行界面

1.1运行界面

运行界面如下图4.1所示:

图4.1运行界面

1.2执行界面,进入游戏正常运行

执行界面如下图4.2所示:

图4.2执行界面

1.3时间到界面

时间到界面如下图4.3所示:

图4.3时间到界面

1.4赢家界面

游戏运行成功界面如下图4.4所示:

图4.4游戏运行成功界面

1.5进度条界面

程序运行进度条如下图4.5所示:

图4.5程序运行进度条

2.游戏实现代码

2.1主面板内所需要的组件的声明

主面板内所需要的组件的声明代码如下图4.6所示:

图4.6组件声明

2.2填充一个矩形框,进行显示时间

填充一个矩形框,进行显示时间代码如下图4.7所示:

图4.7填充矩形框显示时间

2.3主面板及各组件初始化

主面板及各组件初始化如下图4.8所示:

图4.8主面板及各组件初始化

2.4创建时间对象,每隔100毫秒刷新一次

创建时间对象,每隔100毫秒刷新一次代码如下图4.9所示:

图4.9创建时间对象

2.5分数代码。

每消除一对图片,则分数加上100。

代码如下图4.10所示:

图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,若是则消去。

图4.12水平消去算法图片

3.3竖直方向消去算法

竖直方向消去算法。

情况与水平方向基本相同,重点提一下图片4.13所示的情况,其余情况不再重复描述。

出现下图情况则会消去,消去原理与水平方向消去算法相似。

图4.13竖直消去算法图片

第五章程序清单

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=newFile(imgDir);

File[]imgFiles=dir.listFiles(newFilenameFilter(){//获取f:

/meng文件中的图片

publicbooleanaccept(Filedir,Stringname){

returnname.toLowerCase().endsWith("

.jpg"

);

}

});

for(inti=0;

i<

6*5;

i++){//获取f:

/meng文件中的图片的绝对路径放在icons数组中

icons[i]=newImageIcon(imgFiles[i].getAbsolutePath());

//System.out.println(i+"

"

+icons[i]);

}

}catch(Exceptione){

e.printStackTrace();

//异常处理

}

publicvoidinit(){//初始化面板

mainFrame=newJFrame("

JKJ连连看"

//设置主面板的名称为"

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//结束窗体所在的应用程序

mainFrame.setLayout(newBorderLayout());

//设置为BorderLayout()布局

scoreLable=newJLabel("

0"

centerPanel=newJPanel();

//设置面板

southPanel=newJPanel();

northPanel=newJPanel();

northPanel.setLayout(newBorderLayout());

//设置时间分数面板布局为边界布局

mainFrame.add(centerPanel,"

Center"

//添加组件

mainFrame.add(southPanel,"

South"

mainFrame.add(northPanel,"

North"

centerPanel.setLayout(newGridLayout(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][rows]);

}

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;

//变量定义

for(inttwins=1;

twins<

=15;

twins++){

randoms=(int)(Math.random()*24);

for(intalike=1;

alike<

=2;

alike++){

cols=(int)(Math.random()*6+1);

rows=(int)(Math.random()*5+1);

while(grid[cols][rows]!

=0){

cols=(int)(Math.random()*6+1);

rows=(int)(Math.random()*5+1);

this.grid[cols][rows]=randoms;

publicvoidscore()//方法声明

.getText())+100));

publicvoidreload()//方法声明

intsave[]=newint[30];

//创建声明数组

intn=0,cols,rows;

intgrid[][]=newint[8][7];

for(inti=0;

=6;

i++){

for(intj=0;

=5;

j++){

if(this.grid[i][j]!

save[n]=this.grid[i][j];

n++;

n=n-1;

this.grid=grid;

//this出现在实例方法中,表示使用该方法的当前对象

while(n>

=0)//while循环

cols=(int)(Math.random()*6+1);

rows=(int)(Math.random()*5+1);

while(grid[cols][rows]!

=0)//循环嵌套

{

this.grid[cols][rows]=save[n];

n--;

mainFrame.setVisible(false);

//窗口不可见

pressInformation=false;

//这里一定要将按钮点击信息归为初始

i++)//for循环

j++)//循环嵌套

if(grid[i+1][j+1]==0)

diamondsButton[i][j].setVisible(false);

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;

firstButton=secondButton;

if(fristMsg==secondMsg&

&

secondButton!

=firstButton){//相同的情况下能不能消去。

xiao();

publicvoidxiao()

if((x0==x&

(y0==y+1||y0==y-1))

||(y0==y)&

((x0==x+1||x0==x-1)))//判断是否相邻

remove();

for(j=0;

if(grid[x0][j]==0)//判断第一个按钮同行哪个按钮为空

{

if(y>

j)//如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1