Android开发之游戏2048代码(一)

这次是一个简单的2048游戏,设计比较粗糙,还可以往上面添加音乐、表情之类功能的代码,
此次主要是分析各部分代码,完整代码:https://blog.youkuaiyun.com/qq_43433255/article/details/90597331

一、 先来看看游戏的最终效果:
在这里插入图片描述
游戏图标的设计:
在这里插入图片描述

二、代码的主要设计:
在这里插入图片描述在这里插入图片描述

三、关键代码部分

Card部分:

类Card继承了FrameLayout,目的是作为游戏中的卡片。卡片数字和样式的实现:



public void
setNum(int num) {

        this.num = num;

 

        if (num<=0) {

            label.setText("");

        }else{

            label.setText(num+"");

        }

 

        switch (num) {

        case 0:

           
label.setBackgroundColor(0x00000000);//透明色

            break;

        case 2:

           
label.setBackgroundColor(0xffeee4da);

            break;

        case 4:

           
label.setBackgroundColor(0xffede0c8);

            break;

        case 8:

           
label.setBackgroundColor(0xfff2b179);

            break;

        case 16:

           
label.setBackgroundColor(0xfff59563);

            break;

            ……

             default:

            label.setBackgroundColor(0xff3c3a32);

            break;

        }

}


num<=0表明是空白方格。当前位置上如果没有card,则使用num<=0的card进行替代。card
0没有label,同时底色为透明。除了card 0之外,card 2之后的卡片都有对应的颜色和数字。

AnimLayer部分:

类AnimLayer继承了FramLayout,用于动画展示。在安卓2048最主要由两个动画:卡片移动和卡片出现。

卡片出现:



//目标卡片

public void
createScaleTo1(Card target){

    //缩放

     ScaleAnimation sa = new
ScaleAnimation(0.1f, 1, 0.1f, 1, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);

    sa.setDuration(100);

    target.setAnimation(null);

    target.getLabel().startAnimation(sa);

   }


卡片移动:

使用ArrayList
cards用于管理临时卡片的创建和回收(避免每次创建临时卡片时创建新的对象);创建一个临时卡片,从卡片from移动到卡片to,当完成动画之后将临时卡片设为不可见,并使用cards回收该卡片。

创建卡片:

private Card getCard(int num){

   Card c;

   if (cards.size()>0) {

      c = cards.remove(0);

   }else{

      c = new Card(getContext());

      addView(c);

   }

   c.setVisibility(View.VISIBLE);

   c.setNum(num);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值