没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
基于 JAVA 的《连连看》游戏
一 引言
《连连看》游戏在网上种类非常多,比如《水果连连看》,《宠物连连看》等等,虽
然版本各种各样,但是其基本玩法,或者说基本算法是相同的,就是显示一些图标,让用
户依次去点击两个图标,如果这两个图标相同,并且这两个图标通过直线可以相连,或者
通过直角相连,或者通过双折线相连就可以消掉,消掉所有图标即为胜利。如图 1 所示:
图 1 正在进行中的连连看游戏
通过该游戏的制作,我们可以对 Java 的基础语法、Java 图形界面以及简单的算法设计
有一个比较全面的了解。
二 设计要求
为了避免叙述的繁琐,我们只实现连连看游戏的基本功能,如下:
制作如图 1 所示的游戏界面,尽量做到美观大方,使用方便
当两个图标相同,且通过直线相连、直角相连、双折线相连时,能够消掉图标
能够让游戏随时暂停,然后继续
当游戏进行到一定程度,无法消除剩余图标时,要能够提供重排功能对图标进行
重排,从而让游戏继续进行
三 实现思路
我们先讲一下程序中的几个难点,主要是说清楚具体的实现思路,具体的代码会在文后给
出,大家可以参考。
1、 界面设计
需要实现如图 2 所示的界面:
图 2 连连游戏界面
整个界面分为三个区域:菜单区、功能区、游戏区。首先在窗体上放置三个面板
JPanel,分别存放三个区域,如图 3 所示:
图 3 界面的设计
系统菜单区放置菜单即可,用户游戏区放置一个 8*9 的按钮数组来构成游戏界面,用户
交互区放置开始,暂停等功能按钮以及提示信息。
2、 生成游戏区
运行程序后,游戏区并不显示按钮数组,当点击开始按钮后,再自动生成。在生成按钮
时要求按钮上的图案是随机的,且每个图案必须是偶数,否则会出现无法消除的按钮。如
何实现呢?我们可以这样考虑:假设有 12 个图片,把图片名字按照数字序号从 0 到 11 命
名;假设游戏区共 72 个按钮,那么产生 36 个 12 以内的随机数字(每个随机数字代表一个
图片),放入一个 ArrayList 中,最后使用 ArrayList 的 addAll 方法对已经产生的 36 个随机
数字复制一份,这样就获得了 72 个随机数字,并且是成对的。因为一个数字对应一个图片,
所以 72 个按钮需要的图片就生成了。代码如下:
Random random = new Random();
int imagenum = ROW * COL;
for(int i=0; i<imagenum/2; i++){
imageIndex.add(random.nextInt(12)+"");// 生成随机数索引放入集合
}
imageIndex.addAll(imageIndex);// 连接集合使每个索引都是成偶数的
3、 联通消除
点击相连且图片相同的两个按钮可以把两个按钮消除掉。相连有三种情况:直线相连,直
角相连,双折线相连。
要消掉相同图标的按钮,首先要想办法判断两个按钮的图标是否相同,这里提示大家一个
方法:按钮有个 setActionCommand 方法和 getActionCommand,把图标名字设置为一个按
钮的 ActionCommand,然后通过对比两个按钮的 ActionCommand 就可以知道是否具有相同
的图标。
消除按钮就要判断两个按钮是否连通,连通有三种情况,对应三种算法,下面详细说明。
算法判断两个点是否连通,那如何跟两个按钮建立联系呢?按钮的位置就可以视作一个点
(java 中用 Point 类表示一个点)。这样用一个点代表按钮位置,用 ActionCommand 代表
按钮上的图标。就很容易操作了。下面我们先说清楚实现原理,具体代码一会在给出。
(1)直线相连:只要两点之间横坐标或纵坐标相同,即表示两点在同行或同列;然后判断
两点之间有没有障碍,无则联通。
(2)直角相连:两个点的坐标可以生成一个新的点,如果两点都可以与该新点联通,则说
明联通。注意:新点有两个,如图所示一个,另外喇叭图标处也可以生成一个,但是因为
喇叭图标处不是空点,因此不用该点。但在实际中,新点的两种可能都要考虑到,那个能
用用那个。
剩余15页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3645
- 资源: 59万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 蓝zapro.apk
- chromedriver-linux64.zip
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- html动态爱心代码一(附源码)
- c40539bc-071a-486c-9d52-9d0c18d62dac 4.html
- 基于物理的非视域成像(NLOS)算法,利用了nerf+python源码+文档说明
- yuluer知更鸟.7z(1).001
- python课程设计-基于tensorflow实现的图文生成程序,数据集flickr30k-images+源代码+文档说明+截图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功