疯狂java实例-第7章 单机连连看

时间:2025-07-13

疯狂java 实例 第7章 单机连连看

第7章 单机连连看

第7章 单机连连看

7.1 连连看游戏简介

连连看游戏,是指在一个区域内,分布着许多不同的图片,通过点击两张相同的图片并符合一定的规则消除它们的一个游戏。我们最常见的是在QQ游戏大厅里的QQ连连看,网络上也有许多各式各样的单机版连连看游戏。在游戏的过程中,可以考虑下如何使用自己掌握的程序去实现游戏的效果,并尝试去开发属于自己的连连看,这是一件十分惬意的事情。在本章中,我们将详细的教大家如何使用Java去开发一款属于自己的单机连连看。

7.2 连连看游戏原理

实现连连看游戏并不复杂,如果先了解了程序实现这个游戏的原理,那么写出程序也就是一件简单的事情了。首先,我们可以将玩游戏区域在Java程序中看作是一个二维数组对象,游戏区中可以看作是一个容器对象,二维数组中一维的值可以看作是游戏区域中x坐标的值,二维数组中二维的值可以看作是游戏区域中y坐标的值,容器根据这个二维数组去构造游戏区域。如下代码创建一个二维数组:

Object[][] array = new Object[一维的最大值][二维的最大值];

其次,当点击游戏区域的某个点时,我们可以找到该点在二维数组中对应的某个值。如果之前点击的坐标点和本次点击的坐标点,它们拥有同一张图片并且符合一定的消除规则,那么,把二维数组中对应的值设置成另外的值,再重新绘制游戏区域,就可以达到消除的效果。

最后,我们可以为游戏加入分数计算和时间计算等其他功能。下面让我们开始编写我们的连连看游戏。

7.3 创建游戏界面与游戏区域

了解了连连看游戏的实现原理后,我们可以开始编写游戏界面,并准备游戏界面的相关类,在本章中,进行游戏的区域是GamePanel,该类继承于JPanel。

7.3.1 创建游戏界面

游戏界面如图7.1所示。游戏区域中使用的是JPanel。

疯狂java 实例 第7章 单机连连看

·2·

第7章 单机连连看

图7.1 游戏界面

7.3.2 游戏区域实现原理

在本章的开头提到,我们可以将游戏区看作是一个坐标。游戏区的最左上角的那一点可以看作是坐标的(0,0)点,游戏区的最上面的边就是x轴,游戏区最左面的边就是y轴。这样,我们就可以将游戏区域中的图片看作是一个二维数组,数组的一维值是x坐标的值,数组的二维值是y坐标的值,那么,当游戏中在游戏区域中选择了某一点的时候,我们就可以定位到该数组中的唯一的值,再去判断这个值并执行操作。

7.3.3 创建图片方块对象

我们首先创建一个二维数组用于表示一个游戏区域的图片,我们所需要的图片方块可以看作是一个具体的对象,因此,我们新建一个Piece类,表示为一个图片方块,这个Piece对象需要保存一些什么样的信息呢?这是我们所需要考虑的,当然,不一定一开始就把所有的属性都加入,我们可以想到的时候再往里面填充所需要的属性。一个Piece对象即一个图片方块,那么它当然会包括一个图片对象,图片占有一定的位置,那么我们需要记录它的开始的点的x坐标和y坐标,还有结束点的x坐标和y坐标,什么是Piece对象的开始坐标和结束坐标如图7.2所示。

疯狂java 实例 第7章 单机连连看

图7.2 Piece对象的开始点与结束点

明白了什么是开始点坐标与结束点坐标之后,我们为Piece对象加入这些属性,代码如下。 代码清单:code\linkgame\src\org\crazyit\linkgame\commons\Piece.java

public class Piece { private BufferedImage image; //保存这个方块对象的所对应的图片 private int beginX; //开始点的x坐标 private int beginY; //开始点的y坐标 private int endX; //结束点的x坐标 private int endY; //结束点的y坐标 //以下省略getter方法 }

我们为每个属性只提供getter方法,并不提供setter方法,我们可以通过构造器来构造这个对象,这个对象一旦构造完成后,它的每个属性都不允许改变,这是因为在创建游戏区域时这个方块在游戏区域中的位置已经固定,它的开始坐标与结束坐标都不再改变,更不会去改变它的图片,直到这个方块被消除。这里需要注意的是,我们这里的构造器参数并不需要提供结束点的x坐标和y坐标,这是因为结束点的x坐标和y坐标取决于开始点的坐标与图片的大小。

我们定义了一个方块对象,那么在定义一个二维数的时候,我们可以这样:

Piece[][] pieces = new Piece[length][length];

另外,我们还要添加两个属性,用于记录这个Piece对象在数组中的位置是什么,便于我们得到该对象时,很轻易的定位到它在数组的位置:

private int indexX; //该对象在数组中一维的位置 private int indexY; //该对象在数组中二维的位置

疯狂java 实例 第7章 单机连连看

注:以上两个属性,同样加到Piece对象的构造器中。

7.3.4 创建游戏处理类

新建一个GameService的接口,用于定义游戏逻辑的接口方法,再为这个接口新增一个实现类GameServiceImpl,将GameService接口设置到GamePanel这个视图组件中,这们就可以达到逻辑与视图分离了。

代码清单:code\linkgame\src\org\crazyit\linkgame\service\GameService.java

public interface GameService { //定义一个接口方法, 用于返 …… 此处隐藏:13666字,全部文档内容请下载后查看。喜欢就下载吧 ……

疯狂java实例-第7章 单机连连看.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219