这次是一个简单的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);