Android&java的成长之路之六(2048小游戏②)

来源:互联网 发布:sas软件正版价格 编辑:程序博客网 时间:2024/04/30 01:15

紧接着上一章,我们说到了要把卡片部署到GridLayout上。我们玩正规的2048游戏的时候,看上去是卡片移动来叠加数字,实则不然,它只是添加了动画效果,其实是之前已经全部铺满地卡片,只是能够重叠的时候数字发生了改变而已。接下来说下添加卡片的方法:

这个方法主要写在GameView类中的:

    //改变布局的宽高    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        int cardWidth = (Math.min(w, h) - 10) / 4;//得到每一张卡片的宽高        addCards(cardWidth, cardWidth);        startGame();    }    //添加卡片    private void addCards(int cardWidth, int cardHeight) {        Card c;        for (int y = 0; y < 4; y++) {            for (int x = 0; x < 4; x++) {                c = new Card(getContext());                c.setNum(0);                addView(c, cardWidth, cardHeight);                cardMap[x][y] = c;            }        }    }

其中 addCards()函数是简单的添加 但是并没有限制每一张卡片的宽高  所以在onSizeChanged函数中 获得GridLayout这个控件的宽高,用来得出每一张卡片的边长。

卡片添加成功之后就可以开始游戏了 就是startGame函数:

    //开始游戏    private void startGame() {        MainActivity.getMainActivity().clearScore();        for (int y = 0; y < 4; y++) {            for (int x = 0; x < 4; x++) {                cardMap[x][y].setNum(0);            }        }        //随机添加两个卡片        addRandomNum();        addRandomNum();    }
开始游戏的时候又要随机添加两张卡片(addRandomNum)  这玩过2048的都懂得:

 //添加随机数字并且只添加一张卡片    private void addRandomNum() {        emptyPoints.clear();        for (int y = 0; y < 4; y++) {            for (int x = 0; x < 4; x++) {                if (cardMap[x][y].getNum() <= 0) {                    emptyPoints.add(new Point(x, y));                }            }        }        Point p = emptyPoints.remove((int) (Math.random() * emptyPoints.size()));        cardMap[p.x][p.y].setNum(Math.random() > 0.1 ? 2 : 4);        setCardBGColor();    }


当然了 这些步骤实现的时候还要有很多的变量和辅助功能性的函数:

用来存放每张卡片的数字 :

private Card[][] cardMap = new Card[4][4];//用来存放每张卡片    private List<Point> emptyPoints = new ArrayList<>();

还有函数:

   //循环遍历 然后根据每个卡片的数字来设置背景颜色    private void setCardBGColor() {        for (int x = 0; x < 4; x++) {            for (int y = 0; y < 4; y++) {                cardMap[x][y].setBGColor(cardMap[x][y].getNum());            }        }    }

这些主要实现了卡片类的部署以及相关功能。其主要核心功能在下节会详细说明。

0 0
原创粉丝点击