g2048游戏1-android

来源:互联网 发布:php获取ajax传的参数 编辑:程序博客网 时间:2024/06/01 19:07

g2048游戏1-android

《2048Numberpuzzlegame》是一款数字益智游戏,而《2048》的初始数字则是由2+2组成的基数4。在操作方面的不同则表现为一步一格的移动,变成更为爽快的一次到底。相同数字的方况在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出「2048」这个数字方块。——【百度百科-2048游戏】

g2048介绍

游戏规则很简单,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。
游戏的画面很简单,一开整体16个方格大部分都是灰色的,当玩家拼图出现数字之后就会改变颜色,整体格调很是简单。
在玩法规则也非常的简单,一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所有的数字就会想滑动的方向靠拢,而滑出的空白方块就会随机出现一个数字,相同的数字相撞时会叠加靠拢,然后一直这样,不断的叠加最终拼凑出2048这个数字就算成功。
下面使用android编程,g2048游戏个人编程经历

16格数据处理

j\i 0 1 2 3 0 4 2 1 4 2 2 3 2

如表格一般联想使用二维数组,但是基于对象最好自己动手编写对象类class,这样方便灵活增添需求数据和方法。

整个表格数据对象Grid,数据Grid分解为每个小格数据对象CellData,共有4*4=16个,数据CellData又可分解为数字int和坐标对象Cell。

坐标Cell

对应 i,j 坐标使用变量 x,y:

public class Cell {    private int x;    private int y;    public Cell(int x,int y) {        this.x = x;        this.y = y;    }    public int getX() {        return x;    }    public int getY() {        return y;    }    public void setX(int x) {        this.x = x;    }    public void setY(int y) {        this.y = y;    }}

小格数据CellData

public class CellData extends Cell {    private int value;    public CellData(int x, int y, int value) {        super(x, y);        this.value = value;    }    public CellData(Cell cell, int value) {        super(cell.getX(), cell.getY());        this.value = value;    }    public void updatePosition(Cell cell) {        this.setX(cell.getX());        this.setY(cell.getY());    }    public int getValue() {        return value;    }}

整个表格Grid

Grid是对整个表格数据的处理,要考虑基本的数据增删改查,同时需要考虑到特殊的数据,比如g2048游戏需要生成随机数,randomAvailableCell()该方法是获取可填充随机数的位置。

public class Grid {    private CellData[][] area;    public Grid(int numX, int numY) {        area = new CellData[numX][numX];        clearGrid();    }    //随机数填充位置    public Cell randomAvailableCell() {        ArrayList<Cell> availableCells = getAvailableCells();        if (availableCells.size() >= 1) {            return availableCells.get((int) Math.floor(Math.random() * availableCells.size()));        }        return null;    }    public ArrayList<Cell> getAvailableCells() {        ArrayList<Cell> availableCells = new ArrayList<Cell>();        for (int i = 0; i < area.length; i++) {            for (int j = 0; j < area[0].length; j++) {                if (area[i][j] == null) {                    availableCells.add(new Cell(i, j));                }            }        }        return availableCells;    }    public boolean isCellsAvailable() {        return (getAvailableCells().size() >= 1);    }    public CellData getCellContent(int x, int y) {        if (isCellInBounds(x, y)) {            return area[x][y];        } else {            return null;        }    }    public boolean isCellInBounds(int x, int y) {        return 0 <= x && x < area.length                && 0 <= y && y < area[0].length;    }    //清除全部数据    public void clearGrid() {        for (int i = 0; i < area.length; i++) {            for (int j = 0; j < area[0].length; j++) {                area[i][j] = null;            }        }    }    //插入数据    public void insertData(CellData cellData) {        area[cellData.getX()][cellData.getY()] = cellData;    }    //移除数据    public void removeData(CellData cellData) {        area[cellData.getX()][cellData.getY()] = null;    }}

连接下一篇g2048游戏2-android

0 0
原创粉丝点击