热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现疯狂连连看游戏之状态数据模型(三)

这篇文章主要为大家详细介绍了Android实现疯狂连连看游戏之状态数据模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

对于游戏玩家而言,游戏界面上看到的“元素”千变万化;但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已。因此建立游戏的状态数据模型是实现游戏逻辑的重要步骤。

1、定义数据模型

连连看的界面是一个NxM的“网格”,每个网格上显示一张图片。而这个网格只需要一个二维数组来定义即可,而每个网格上所显示的图片,对于底层数据模型来说,不同的图片对于着不同的数值即可。

对于上图所示的数据模型,只要让数值为0的网格上不绘制图片,其他数值的网格则绘制相应的图片,就可以显示出连连看的游戏界面了。

本程序采用Piece[][]来保存游戏的状态模型,因为Piece对象封装的信息不仅包含了该方块的左上角的X、Y坐标。而且还包含了该Piece所显示的图片、图片ID,这个图片ID就是该Piece的数据。

2、初始化游戏状态数据

为了初始化游戏状态,程序需要创建一个 Piece[][]数组,为此程序定义一个AbstractBoard抽象类,该抽象类代码如下:cn\oyp\link\board\AbstractBoard.java

package cn.oyp.link.board; 
 
import java.util.List; 
 
import cn.oyp.link.utils.GameConf; 
import cn.oyp.link.utils.ImageUtil; 
import cn.oyp.link.view.Piece; 
import cn.oyp.link.view.PieceImage; 
 
/** 
 * 游戏区域的抽象类 
*
* 关于本代码介绍可以参考一下博客: 欧阳鹏的CSDN博客
*/ public abstract class AbstractBoard { // 定义一个抽象方法, 让子类去实现 /** * 创建一个List集合,该集合里面存放初始化游戏时所需的Piece对象 */ protected abstract List createPieces(GameConf config, Piece[][] pieces); /** * 返回Piece数组 * @param config * @return */ public Piece[][] create(GameConf config) { // 创建Piece[][]数组 Piece[][] pieces = new Piece[config.getXSize()][config.getYSize()]; // 返回非空的Piece集合, 该集合由子类去创建 List notNullPieces = createPieces(config, pieces); // 根据非空Piece对象的集合的大小来取图片 List playImages = ImageUtil.getPlayImages( config.getContext(), notNullPieces.size()); // 所有图片的宽、高都是相同的 int imageWidth = playImages.get(0).getImage().getWidth(); int imageHeight = playImages.get(0).getImage().getHeight(); // 遍历非空的Piece集合 for (int i = 0; i

下面介绍该AbstraceBoard的3个具体实现子类。

1、矩阵排列的方块:会填满二维数组的每个数组元素,只是把四周留空即可,

该子类初始化的游戏界面如下所示:

 

该子类的代码如下:cn\oyp\link\board\impl\FullBoard.java

package cn.oyp.link.board.impl; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import cn.oyp.link.board.AbstractBoard; 
import cn.oyp.link.utils.GameConf; 
import cn.oyp.link.view.Piece; 
 
/** 
 * 创建矩阵分布的游戏区域,矩阵排列的方块会填满二维数组的每个数组元素,只是把四周留空而已 
*
* 关于本代码介绍可以参考一下博客: 欧阳鹏的CSDN博客
*/ public class FullBoard extends AbstractBoard { @Override protected List createPieces(GameConf config, Piece[][] pieces) { // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象 List notNullPieces = new ArrayList(); for (int i = 1; i

2、竖向排列的方块:以垂直的空列分隔开,该子类初始化的游戏界面如下所示:


该子类的代码如下:cn\oyp\link\board\impl\VerticalBoard.java

package cn.oyp.link.board.impl; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import cn.oyp.link.board.AbstractBoard; 
import cn.oyp.link.utils.GameConf; 
import cn.oyp.link.view.Piece; 
 
/** 
 * 创建竖的游戏区域,竖向排列的方块以垂直的空列分隔开
*
* 关于本代码介绍可以参考一下博客: 欧阳鹏的CSDN博客
*/ public class VerticalBoard extends AbstractBoard { @Override protected List createPieces(GameConf config, Piece[][] pieces) { // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象 List notNullPieces = new ArrayList(); for (int i = 0; i

3、横向排列的方块:以水平的空列分隔开,该子类初始化的游戏界面如下所示:


该子类的代码如下:cn\oyp\link\board\impl\HorizontalBoard.java

package cn.oyp.link.board.impl; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import cn.oyp.link.board.AbstractBoard; 
import cn.oyp.link.utils.GameConf; 
import cn.oyp.link.view.Piece; 
 
/** 
 * 创建横的游戏区域 
*
* 关于本代码介绍可以参考一下博客: 欧阳鹏的CSDN博客
*/ public class HorizontalBoard extends AbstractBoard { @Override protected List createPieces(GameConf config, Piece[][] pieces) { // 创建一个Piece集合, 该集合里面存放初始化游戏时所需的Piece对象 List notNullPieces = new ArrayList(); for (int i = 0; i

关于具体的实现步骤,请参考下面的链接:

我的Android进阶之旅------>Android疯狂连连看游戏的实现之游戏效果预览(一)

我的Android进阶之旅------>Android疯狂连连看游戏的实现之开发游戏界面(二)

我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
活跃的爱味儿县_454
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有