基于java的连连看游戏Word下载.doc

上传人:b****1 文档编号:13166366 上传时间:2022-10-07 格式:DOC 页数:15 大小:581KB
下载 相关 举报
基于java的连连看游戏Word下载.doc_第1页
第1页 / 共15页
基于java的连连看游戏Word下载.doc_第2页
第2页 / 共15页
基于java的连连看游戏Word下载.doc_第3页
第3页 / 共15页
基于java的连连看游戏Word下载.doc_第4页
第4页 / 共15页
基于java的连连看游戏Word下载.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于java的连连看游戏Word下载.doc

《基于java的连连看游戏Word下载.doc》由会员分享,可在线阅读,更多相关《基于java的连连看游戏Word下载.doc(15页珍藏版)》请在冰豆网上搜索。

基于java的连连看游戏Word下载.doc

系统菜单区放置菜单即可,用户游戏区放置一个8*9的按钮数组来构成游戏界面,用户交互区放置开始,暂停等功能按钮以及提示信息。

2、生成游戏区

运行程序后,游戏区并不显示按钮数组,当点击开始按钮后,再自动生成。

在生成按钮时要求按钮上的图案是随机的,且每个图案必须是偶数,否则会出现无法消除的按钮。

如何实现呢?

我们可以这样考虑:

假设有12个图片,把图片名字按照数字序号从0到11命名;

假设游戏区共72个按钮,那么产生36个12以内的随机数字(每个随机数字代表一个图片),放入一个ArrayList中,最后使用ArrayList的addAll方法对已经产生的36个随机数字复制一份,这样就获得了72个随机数字,并且是成对的。

因为一个数字对应一个图片,所以72个按钮需要的图片就生成了。

代码如下:

Randomrandom=newRandom();

intimagenum=ROW*COL;

for(inti=0;

i<

imagenum/2;

i++){

imageIndex.add(random.nextInt(12)+"

"

);

//生成随机数索引放入集合

}

imageIndex.addAll(imageIndex);

//连接集合使每个索引都是成偶数的

3、联通消除

点击相连且图片相同的两个按钮可以把两个按钮消除掉。

相连有三种情况:

直线相连,直角相连,双折线相连。

要消掉相同图标的按钮,首先要想办法判断两个按钮的图标是否相同,这里提示大家一个方法:

按钮有个setActionCommand方法和getActionCommand,把图标名字设置为一个按钮的ActionCommand,然后通过对比两个按钮的ActionCommand就可以知道是否具有相同的图标。

消除按钮就要判断两个按钮是否连通,连通有三种情况,对应三种算法,下面详细说明。

算法判断两个点是否连通,那如何跟两个按钮建立联系呢?

按钮的位置就可以视作一个点(java中用Point类表示一个点)。

这样用一个点代表按钮位置,用ActionCommand代表按钮上的图标。

就很容易操作了。

下面我们先说清楚实现原理,具体代码一会在给出。

(1)直线相连:

只要两点之间横坐标或纵坐标相同,即表示两点在同行或同列;

然后判断两点之间有没有障碍,无则联通。

(2)直角相连:

两个点的坐标可以生成一个新的点,如果两点都可以与该新点联通,则说明联通。

注意:

新点有两个,如图所示一个,另外喇叭图标处也可以生成一个,但是因为喇叭图标处不是空点,因此不用该点。

但在实际中,新点的两种可能都要考虑到,那个能用用那个。

(3)双折线相连:

在单击的第一点处,向四个方向搜索有无空点,如果有则生成一个新点,如果该新点与另一个按钮联通(直角联通),则说明联通。

如果该新点不能与按钮连通,则继续向该新点的方向前进一个位置,再次判断该位置是否为空点,是否可以和另一个按钮连通,以此类推。

4、重排

当游戏进行到一定程度,剩余的按钮无法消掉,这时就需要对按钮位置进行重新排列,从而让游戏继续进行。

解决这一问题的思路如下:

首先对所有按钮进行搜索,把剩余按钮的ActionCommand(ActionCommand和该按钮显示的图片序号一致,如果按钮被消掉则ActionCommand为空)放入一个集合内;

然后依次搜索剩余按钮,找到一个剩余按钮后,保持按钮的位置不动,从集合中随机取出一个ActionCommand赋给该按钮,这样就完成了对剩余按钮的重排。

四具体实现

打开Eclipse,新建一个类LinkGame,该类继承自JFrame,并且需要实现ActionListener方法。

publicclassLinkGameextendsJFrameimplementsActionListener{

}

在该类中添加如下变量和方法,见表1和表2。

表1LinkGame类中的成员变量

变量类型

变量名

说明

finalstaticint

ROW

游戏区8行9列共72个按钮

COL

JPanel

functionPanel

功能区面板

gamePanel

游戏区面板

JButton[][]

dots

按钮数组

JLabel

timestr

内容是“剩余时间”

timecount

计时

Timer

timer

JButton

start

开始按钮

pause

暂停

conti

继续

hint

重排

staticint

count

记录鼠标单击次数

time

记录游戏剩余时间

Point

p1,p2

保存两个被单击按钮的坐标

LinkedList<

Point>

list

按钮坐标集合

ArrayList<

String>

imageIndex

存放图像索引

linklist

重排时存放按钮

表2LinkGame类中的方法

方法名

方法功能

publicvoidaddmyMenu()

添加菜单

publicvoidaddFunctionPanel()

添加功能区

publicvoidaddGamePanel()

添加游戏区

privateclassButtonEventsimplementsActionListener

游戏区按钮被单击

publicbooleanlineCheck(Pointp1,Pointp2)

是否直线联通

publicbooleansecendLine(Pointp1,Pointp2)

是否直角联通

publicbooleantriLine(Pointp1,Pointp2)

是否双折线联通

publicvoidreSet()

当剩余按钮无法消除时进行重排

publicvoidactionPerformed(ActionEvente)

功能区按钮被单击时

上述方法的具体实现如下:

1、构造方法

//构造方法建立游戏界面

publicLinkGame(){

this.setSize(780,500);

this.setTitle("

连连看游戏"

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addmyMenu();

//添加菜单

addFunctionPanel();

//添加功能区

this.setVisible(true);

}

2、菜单

菜单的功能均没有实现,读者可以自行添加。

//添加菜单

publicvoidaddmyMenu(){

JMenuBarmenuBar=newJMenuBar();

this.setJMenuBar(menuBar);

JMenumenuGame=newJMenu("

游戏"

JMenumenuSet=newJMenu("

设置"

JMenumenuHelp=newJMenu("

帮助"

menuBar.add(menuGame);

menuBar.add(menuSet);

menuBar.add(menuHelp);

menuGame.add(newJMenuItem("

打开"

));

保存"

退出"

menuSet.add(newJCheckBoxMenuItem("

音乐开关"

JMenuchoice=newJMenu("

难度选择"

menuSet.add(choice);

menuSet.add(newJMenuItem("

背景色"

提示"

menuHelp.add(newJMenuItem("

关于"

newImageIcon("

image/2.gif"

)));

menuHelp.addSeparator();

ButtonGroupgroup=newButtonGroup();

JRadioButtonMenuItemrbm1=newJRadioButtonMenuItem("

初级难度"

JRadioButtonMenuItemrbm2=newJRadioButtonMenuItem("

中级难度"

JRadioButtonMenuItemrbm3=newJRadioButtonMenuItem("

高级难度"

group.add(rbm1);

group.add(rbm2);

group.add(rbm3);

choice.add(rbm1);

choice.add(rbm2);

choice.add(rbm3);

3、功能区和游戏区的界面

//添加功能区

publicvoidaddFunctionPanel(){

start.setPreferredSize(newDimension(150,50));

pause.setPreferredSize(newDimension(150,50));

conti.setPreferredSize(newDimension(150,50));

hint.setPreferredSize(newDimension(150,50));

timecount.setPreferredSize(newDimension(150,50));

timestr.setPreferredSize(newDimension(150,50));

timestr.setFon

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

当前位置:首页 > 考试认证 > IT认证

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

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