使用Android编写一个2048小游戏(一)

本文介绍如何使用Android编程实现2048小游戏。游戏规则包括上下左右滑动,数字相加合并,每次滑动后随机生成2或4,当所有数字无法移动时游戏结束。实现过程中,采用int[4][4]数组表示游戏板,利用LinkedList处理行数据,重点展示了向左滑动的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2048小游戏还是很简单的 这个是我做的
这里写图片描述
首先分析
- 游戏的操作只有上下左右的滑动
- 每次滑动的结果是
- 1.数字向该方向滑动,
- 2.相同的并且相邻的数字相加,
- 3.数字相加有一定的顺序,方向上靠前的数字先与相邻的数字相加,数字每次滑动只进行一次相加,比如 向左滑 2,2,2,2滑动之后是4,4而不是2,4,2或者8
- 数字之间的计算只在滑动所在的一行或者一列。
- 滑动之后随机在没有数字的地方出现2或者4
- 如果在某个方向上没办法移动并且没有数字相加就不会出现数字
- 所有数字无法移动之后结束游戏或者出现2048这个数字

实现方式,不管上下左右其实结果都是一样的,而且每一行的计算也是一样的,只要实现了一行的计算就可以实现所有的计算。

这里使用了linkedList作为一行数据结构,将一行的数据按顺序放入list,空格使用0来填入

void OneLineCount(){
    //去掉所有的空格‘0’
        for (int p = 0; p < mnumberlist.size();) {
            if (mnumberlist.get(p) == 0) {
                mnumberlist.remove(p);
            }else {
                p++;
            }
        }
//将相邻的数字作比较相等就去掉两个数字并在前一个数字添加他们的两倍,然后k++跳到下一个数字,当k位置是最后一个数字时就退出因为最后一个没有后面的数字了
        for (int k = 0; k < mnumberlist.size()-1; k++){
            if (mnumberlist.get(k).equals(mnumberlist.get(k+1))){
                Integer a = new Integer(mnumberlist.get(k)*2);
                mnumberlist.remove(k);
                mnumberlist.add(k,a);
                mnumberlist.remove(k+1);
            }
        }
    }

我使用int[4][4]二维数组表示整个表格,在滑动之后就按滑动方向的顺序将每一行添加到LinkedList里面下面是向左滑时的代码

 void leftSroll(){
        for (int i = 0; i < 4 ;i++){
            for (int j = 0; j < 4;j++){
            //将一行填入list,每种滑动顺序都不一样
                mnumberlist.add(j,tablet[i][j]);
            }
            OneLineCount();//一行的计算
            for (int c = 0 ; c<4;c++){
  
  //将list中的数据填会二维数组,没有数字就填0
                if (c < mnumberlist.size())
                    tablet[i][c] = mnumberlist.get(c);
                else
                    tablet[i][c] = 0;
             }
            mnumberlist.clear();//清掉list准备下一行
        }
    }

向右滑,和向下,向上

 void rightSroll(){
        for(int i = 0; i < 4; i++){
            int k = 0;//向右滑是从右到左添加数字,但是list计算是从左到右因此填入顺序要相反,同下
            for (int j = 3; j > -1; j--) {
                mnumberlist.add(k,tablet[i][j]);
                k++;
            }
            oneLineCount();
            int d = 0;
            for (int c = 3 ; c > -1; c--){
                if (d < mnumberlist.size())
                    tablet[i][c] = mnumberlist.get(d);
                else
                    tablet[i][c] = 0;
                d++;
            }
            mnumberlist.clear();
        }

    }
    void print(){
        for (
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值