之前是在eclipse上写的,后面换成了android sudio。

2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局填充文本框,以显示分数,GridLayout中填充4×4的继承自FrameLayout的card类作为主要的游戏界面。由于大部分操作都在GridLayout中进行,可以自定义一个继承自GridLayout的类GameView,类中定义判定上下左右滑动的方法和每次滑动后自动添加一个随机数字的方法以及每次滑动后判断游戏是否可以继续进行的方法。

主布局activity_main.xml代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/container"//match_parent表示布局充满整个屏幕android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.administractor.game2048.MainActivity"//里面的组件垂直放置android:orientation="vertical"tools:ignore="MergeRootFrame"><LinearLayout//宽度充满整个屏幕,高度自适应。android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" >//显示当前分数的文本框<TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Your Score:"/><TextViewandroid:id="@+id/tvScore"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>//使用自定义的GridLayout<com.example.administractor.game2048.GameViewandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/GameView" ></com.example.administractor.game2048.GameView> </LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    //match_parent表示布局充满整个屏幕
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administractor.game2048.MainActivity"
    //里面的组件垂直放置
    android:orientation="vertical"
    tools:ignore="MergeRootFrame">
    <LinearLayout
    //宽度充满整个屏幕,高度自适应。
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        //显示当前分数的文本框
        <TextViewandroid:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Your Score:"/>
        <TextView
            android:id="@+id/tvScore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    //使用自定义的GridLayout
    <com.example.administractor.game2048.GameView
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@+id/GameView">
    </com.example.administractor.game2048.GameView>
</LinearLayout>

GameView.java:

packagecom.example.administrator.game2048;import java.util.ArrayList; import java.util.List;import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Point; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.GridLayout;public class GameView extends GridLayout { //调用类构造方法public GameView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);//初始化游戏InitGameView();}public GameView(Context context, AttributeSet attrs) {super(context, attrs);InitGameView();}public GameView(Context context) {super(context);InitGameView();}private void InitGameView(){//设置为4x4个方格setColumnCount(4);//设置背景颜色setBackgroundColor(0xffeee4da);//判定滑动方向setOnTouchListener(new OnTouchListener() {private float startx,starty,offsetx,offsety;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch(event.getAction()){case MotionEvent.ACTION_DOWN:startx=event.getX();starty=event.getY();break;case MotionEvent.ACTION_UP:offsetx=event.getX()-startx;offsety=event.getY()-starty;if(Math.abs(offsetx)>Math.abs(offsety)){if(offsetx<-5){swipeLeft();}else if(offsetx>5){swipeRight();}}else{if(offsety<-5){swipeUp();}else if(offsetx>3){swipeDown();}}break;}return true;}});}//适应不同大小的屏幕@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);int cardWidth=(Math.min(h, w))/4;addCards(cardWidth,cardWidth);startGame();}//在4x4的方格上添加满卡片public 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;}}}//游戏开始时每个卡片默认值设为0,并随机添加两张带数字的卡片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();}private void addRandomNum() {//使用emptypoints将数字为0的card提取出来,并随即选择一个空card赋值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()));//2和4出现的概率控制在1:9cardmap[p.x][p.y].setNum(Math.random()>0.1?2:4);}//左滑方法private void swipeLeft(){//merge作为判断能否滑动的flagboolean merge = false;for (int y = 0; y < 4; y++) {for (int x = 0; x < 4; x++) {for (int x1 = x+1; x1 <4; x1++) {if(cardmap[x1][y].getNum()>0){if(cardmap[x][y].getNum()<=0){cardmap[x][y].setNum(cardmap[x1][y].getNum());cardmap[x1][y].setNum(0);merge=true;x--;}else if(cardmap[x][y].equal(cardmap[x1][y])){cardmap[x][y].setNum(cardmap[x][y].getNum()*2);cardmap[x1][y].setNum(0);MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());merge=true;}break;}}}}if(merge){addRandomNum();checkComplete();}}//下滑private void swipeDown(){boolean merge = false;for (int x = 0; x < 4; x++) {for (int y = 3; y >=0; y--) {for (int y1 = y-1; y1 >=0; y1--) {if (cardmap[x][y1].getNum()>0) {if (cardmap[x][y].getNum()<=0) {cardmap[x][y].setNum(cardmap[x][y1].getNum());cardmap[x][y1].setNum(0);y++;merge = true;}else if (cardmap[x][y].equal(cardmap[x][y1])) {cardmap[x][y].setNum(cardmap[x][y].getNum()*2);cardmap[x][y1].setNum(0);MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}//上滑private void swipeUp(){boolean merge = false;for (int x = 0; x < 4; x++) {for (int y = 0; y < 4; y++) {for (int y1 = y+1; y1 < 4; y1++) {if (cardmap[x][y1].getNum()>0) {if (cardmap[x][y].getNum()<=0) {cardmap[x][y].setNum(cardmap[x][y1].getNum());cardmap[x][y1].setNum(0);y--;merge = true;}else if (cardmap[x][y].equal(cardmap[x][y1])) {cardmap[x][y].setNum(cardmap[x][y].getNum()*2);cardmap[x][y1].setNum(0);MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());merge = true;}break;}}}}if (merge) {addRandomNum();checkComplete();}}//右滑private void swipeRight(){boolean merge = false;for (int y = 0; y < 4; y++) {for (int x = 3; x >=0; x--) {for (int x1 = x-1; x1 >=0; x1--) {if(cardmap[x1][y].getNum()>0){if(cardmap[x][y].getNum()<=0){cardmap[x][y].setNum(cardmap[x1][y].getNum());cardmap[x1][y].setNum(0);x++;merge=true;}else if(cardmap[x][y].equal(cardmap[x1][y])){cardmap[x][y].setNum(cardmap[x][y].getNum()*2);cardmap[x1][y].setNum(0);MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());merge=true;}break;}}}}if(merge){addRandomNum();checkComplete();}}//如果有空卡片或者相邻的值相同卡片则游戏还能进行public void checkComplete(){boolean complete=true;ALL:for (int y = 0; y <4; y++) {for (int x = 0; x <4; x++) {if(cardmap[x][y].getNum()==0||x>0&&cardmap[x][y].equal(cardmap[x-1][y])||x<3&&cardmap[x][y].equal(cardmap[x+1][y])||y>0&&cardmap[x][y].equal(cardmap[x][y-1])||y<3&&cardmap[x][y].equal(cardmap[x][y+1])){complete=false;break ALL;}}}//游戏结束弹出alert提示窗口if(complete){new AlertDialog.Builder(getContext()).setTitle("大林哥温馨提示").setMessage("游戏结 束").setPositiveButton("重来",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {startGame();}}).show();}}private Card[][] cardmap=new Card[4][4];private List<Point> emptyPoints=new ArrayList<Point>(); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274

packagecom.example.administrator.game2048;
importjava.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
importandroid.content.Context;
import android.content.DialogInterface;
importandroid.graphics.Point;
import android.util.AttributeSet;
importandroid.view.MotionEvent;
import android.view.View;
importandroid.widget.GridLayout;
publicclass GameViewextends GridLayout{
//调用类构造方法
    publicGameView(Contextcontext,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
        //初始化游戏
        InitGameView();
    }
    publicGameView(Contextcontext,AttributeSet attrs){
        super(context,attrs);
        InitGameView();
    }
    publicGameView(Contextcontext){
        super(context);
        InitGameView();
    }
    privatevoid InitGameView(){
        //设置为4x4个方格
        setColumnCount(4);
        //设置背景颜色
        setBackgroundColor(0xffeee4da);
        //判定滑动方向
        setOnTouchListener(newOnTouchListener(){
            privatefloat startx,starty,offsetx,offsety;
            @Override
            publicboolean onTouch(Viewv,MotionEvent event){
                switch(event.getAction()){
                    caseMotionEvent.ACTION_DOWN:
                        startx=event.getX();
                        starty=event.getY();
                        break;
                    caseMotionEvent.ACTION_UP:
                        offsetx=event.getX()-startx;
                        offsety=event.getY()-starty;
                        if(Math.abs(offsetx)>Math.abs(offsety)){
                            if(offsetx<-5){
                                swipeLeft();
                            }elseif(offsetx>5){
                                swipeRight();
                            }
                        }else{
                            if(offsety<-5){
                                swipeUp();
                            }elseif(offsetx>3){
                                swipeDown();
                            }
                        }
                        break;
                }
                returntrue;
            }
        });
    }
    //适应不同大小的屏幕
    @Override
    protectedvoid onSizeChanged(intw,int h,int oldw,int oldh){
        super.onSizeChanged(w,h,oldw,oldh);
        intcardWidth=(Math.min(h,w))/4;
        addCards(cardWidth,cardWidth);
        startGame();
    }
    //在4x4的方格上添加满卡片
    publicvoid addCards(intcardwidth,intcardheight){
        Cardc;
        for(inty =0;y <4;y++){
            for(intx =0;x <4;x++){
                c=newCard(getContext());
                c.setNum(0);
                addView(c,cardwidth,cardheight);
                cardmap[x][y]=c;
            }
        }
    }
    //游戏开始时每个卡片默认值设为0,并随机添加两张带数字的卡片
    privatevoid startGame(){
        MainActivity.getMainActivity().clearScore();
        for(inty =0;y <4;y++){
            for(intx =0;x <4;x++){
                cardmap[x][y].setNum(0);
            }
        }
        addRandomNum();
        addRandomNum();
    }
    privatevoid addRandomNum(){
        //使用emptypoints将数字为0的card提取出来,并随即选择一个空card赋值
        emptyPoints.clear();
        for(inty =0;y <4;y++){
            for(intx =0;x <4;x++){
                if(cardmap[x][y].getNum()<=0){
                    emptyPoints.add(newPoint(x,y));
                }
            }
        }
        Pointp=emptyPoints.remove((int)(Math.random()*emptyPoints.size()));
        //2和4出现的概率控制在1:9
        cardmap[p.x][p.y].setNum(Math.random()>0.1?2:4);
    }
    //左滑方法
    privatevoid swipeLeft(){
        //merge作为判断能否滑动的flag
        booleanmerge =false;
        for(inty =0;y <4;y++){
            for(intx =0;x <4;x++){
                for(intx1 =x+1;x1 <4;x1++){
                    if(cardmap[x1][y].getNum()>0){
                        if(cardmap[x][y].getNum()<=0){
                            cardmap[x][y].setNum(cardmap[x1][y].getNum());
                            cardmap[x1][y].setNum(0);
                            merge=true;
                            x--;
                        }elseif(cardmap[x][y].equal(cardmap[x1][y])){
                            cardmap[x][y].setNum(cardmap[x][y].getNum()*2);
                            cardmap[x1][y].setNum(0);
                            MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());
                            merge=true;
                        }
                        break;
                    }
                }
            }
        }
        if(merge){
            addRandomNum();
            checkComplete();
        }
    }
    //下滑
    privatevoid swipeDown(){
        booleanmerge =false;
        for(intx =0;x <4;x++){
            for(inty =3;y >=0;y--){
                for(inty1 =y-1;y1 >=0;y1--){
                    if(cardmap[x][y1].getNum()>0){
                        if(cardmap[x][y].getNum()<=0){
                            cardmap[x][y].setNum(cardmap[x][y1].getNum());
                            cardmap[x][y1].setNum(0);
                            y++;
                            merge= true;
                        }elseif (cardmap[x][y].equal(cardmap[x][y1])){
                            cardmap[x][y].setNum(cardmap[x][y].getNum()*2);
                            cardmap[x][y1].setNum(0);
                            MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());
                            merge= true;
                        }
                        break;
                    }
                }
            }
        }
        if(merge){
            addRandomNum();
            checkComplete();
        }
    }
    //上滑
    privatevoid swipeUp(){
        booleanmerge =false;
        for(intx =0;x <4;x++){
            for(inty =0;y <4;y++){
                for(inty1 =y+1;y1 <4;y1++){
                    if(cardmap[x][y1].getNum()>0){
                        if(cardmap[x][y].getNum()<=0){
                            cardmap[x][y].setNum(cardmap[x][y1].getNum());
                            cardmap[x][y1].setNum(0);
                            y--;
                            merge= true;
                        }elseif (cardmap[x][y].equal(cardmap[x][y1])){
                            cardmap[x][y].setNum(cardmap[x][y].getNum()*2);
                            cardmap[x][y1].setNum(0);
                            MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());
                            merge= true;
                        }
                        break;
                    }
                }
            }
        }
        if(merge){
            addRandomNum();
            checkComplete();
        }
    }
    //右滑
    privatevoid swipeRight(){
        booleanmerge =false;
        for(inty =0;y <4;y++){
            for(intx =3;x >=0;x--){
                for(intx1 =x-1;x1 >=0;x1--){
                    if(cardmap[x1][y].getNum()>0){
                        if(cardmap[x][y].getNum()<=0){
                            cardmap[x][y].setNum(cardmap[x1][y].getNum());
                            cardmap[x1][y].setNum(0);
                            x++;
                            merge=true;
                        }elseif(cardmap[x][y].equal(cardmap[x1][y])){
                            cardmap[x][y].setNum(cardmap[x][y].getNum()*2);
                            cardmap[x1][y].setNum(0);
                            MainActivity.getMainActivity().addScore(cardmap[x][y].getNum());
                            merge=true;
                        }
                        break;
                    }
                }
            }
        }
        if(merge){
            addRandomNum();
            checkComplete();
        }
    }
    //如果有空卡片或者相邻的值相同卡片则游戏还能进行
    publicvoid checkComplete(){
        booleancomplete=true;
        ALL:
        for(inty =0;y <4;y++){
            for(intx =0;x <4;x++){
                if(cardmap[x][y].getNum()==0||
                        x>0&&cardmap[x][y].equal(cardmap[x-1][y])||
                        x<3&&cardmap[x][y].equal(cardmap[x+1][y])||
                        y>0&&cardmap[x][y].equal(cardmap[x][y-1])||
                        y<3&&cardmap[x][y].equal(cardmap[x][y+1])){
                    complete=false;
                    breakALL;
                }
            }
        }
        //游戏结束弹出alert提示窗口
        if(complete){
            newAlertDialog.Builder(getContext()).setTitle("大林哥温馨提示").setMessage("游戏结束").setPositiveButton("重来",newDialogInterface.OnClickListener(){
                @Override
                publicvoid onClick(DialogInterfacearg0,int arg1){
                    startGame();
                }
            }).show();
        }
    }
    privateCard[][]cardmap=newCard[4][4];
    privateList<Point>emptyPoints=newArrayList<Point>();
}

主类MainActivity.java:

package com.example.administrator.game2048;import android.app.Activity; import android.os.Bundle; import android.widget.TextView;public class MainActivity extends Activity {public MainActivity(){mainActivity=this;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvscore = (TextView) findViewById(R.id.tvScore);}public void clearScore(){score=0;showScore();}public void showScore(){tvscore.setText(score+"");}public void addScore(int s){score+=s;showScore();}private TextView tvscore;private int score=0;public static MainActivity mainActivity=null;public static MainActivity getMainActivity() {return mainActivity;} }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

packagecom.example.administrator.game2048;
importandroid.app.Activity;
import android.os.Bundle;
importandroid.widget.TextView;
publicclass MainActivityextends Activity{
    publicMainActivity(){
        mainActivity=this;
    }
    @Override
    protectedvoid onCreate(BundlesavedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvscore= (TextView)findViewById(R.id.tvScore);
    }
    publicvoid clearScore(){
        score=0;
        showScore();
    }
    publicvoid showScore(){
        tvscore.setText(score+"");
    }
    publicvoid addScore(ints){
        score+=s;
        showScore();
    }
    privateTextView tvscore;
    privateint score=0;
    publicstatic MainActivitymainActivity=null;
    publicstatic MainActivitygetMainActivity(){
        returnmainActivity;
    }
}

Card.java:

package com.example.administrator.game2048;import android.content.Context; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView;public class Card extends FrameLayout {public Card(Context context) {super(context);LayoutParams lp = null;View background = new View(getContext());//参数-1表示layoutparams填充满整个父容器lp = new LayoutParams(-1, -1);//设置卡片之间有10像素的间隔lp.setMargins(10, 10, 0, 0);background.setBackgroundColor(0x33ffffff);addView(background, lp);label = new TextView(getContext());label.setTextSize(28);label.setGravity(Gravity.CENTER);lp = new LayoutParams(-1, -1);lp.setMargins(10, 10, 0, 0);addView(label, lp);setNum(0);}private int n=0;public int getNum(){return n;}//设置数字及对应的背景颜色public void setNum(int n){this.n=n;if(n<=0){label.setText("");}else{label.setText(n+"");}switch (n) {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;case 32:label.setBackgroundColor(0xfff67c5f);break;case 64:label.setBackgroundColor(0xfff65e3b);break;case 128:label.setBackgroundColor(0xffedcf72);break;case 256:label.setBackgroundColor(0xffedcc61);break;case 512:label.setBackgroundColor(0xffedc850);break;case 1024:label.setBackgroundColor(0xffedc53f);break;case 2048:label.setBackgroundColor(0xffedc22e);break;default:label.setBackgroundColor(0xff3c3a32);break;}}//判断卡片是否相等public boolean equal(Card o){return getNum()==o.getNum();}private TextView label; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

packagecom.example.administrator.game2048;
importandroid.content.Context;
import android.view.Gravity;
importandroid.view.View;
import android.widget.FrameLayout;
importandroid.widget.TextView;
publicclass Cardextends FrameLayout{
    publicCard(Contextcontext){
        super(context);
        LayoutParamslp =null;
        Viewbackground =new View(getContext());
        //参数-1表示layoutparams填充满整个父容器
        lp= newLayoutParams(-1,-1);
        //设置卡片之间有10像素的间隔
        lp.setMargins(10,10,0,0);
        background.setBackgroundColor(0x33ffffff);
        addView(background,lp);
        label= newTextView(getContext());
        label.setTextSize(28);
        label.setGravity(Gravity.CENTER);
        lp= newLayoutParams(-1,-1);
        lp.setMargins(10,10,0,0);
        addView(label,lp);
        setNum(0);
    }
    privateint n=0;
    publicint getNum(){
        returnn;
    }
    //设置数字及对应的背景颜色
    publicvoid setNum(intn){
        this.n=n;
        if(n<=0){
            label.setText("");
        }else{
            label.setText(n+"");
        }
        switch(n){
            case0:
                label.setBackgroundColor(0x00000000);
                break;
            case2:
                label.setBackgroundColor(0xffeee4da);
                break;
            case4:
                label.setBackgroundColor(0xffede0c8);
                break;
            case8:
                label.setBackgroundColor(0xfff2b179);
                break;
            case16:
                label.setBackgroundColor(0xfff59563);
                break;
            case32:
                label.setBackgroundColor(0xfff67c5f);
                break;
            case64:
                label.setBackgroundColor(0xfff65e3b);
                break;
            case128:
                label.setBackgroundColor(0xffedcf72);
                break;
            case256:
                label.setBackgroundColor(0xffedcc61);
                break;
            case512:
                label.setBackgroundColor(0xffedc850);
                break;
            case1024:
                label.setBackgroundColor(0xffedc53f);
                break;
            case2048:
                label.setBackgroundColor(0xffedc22e);
                break;
            default:
                label.setBackgroundColor(0xff3c3a32);
                break;
        }
    }
    //判断卡片是否相等
    publicboolean equal(Cardo){
        returngetNum()==o.getNum();
    }
    privateTextView label;
}

转载请注明:静觅 » Android开发之2048安卓版

Android开发之2048安卓版相关推荐

  1. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  2. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  3. 【原作者:吴秦(Tyler)http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html】Android开发之旅:环境搭建及HelloWo

    Android开发之旅:环境搭建及HelloWorld 2010-04-12 00:45 by 吴秦, 801360 阅读, 138 评论, 收藏, 编辑 --工欲善其事必先利其器 引言 本系列适合0 ...

  4. android studio输入框下划线,Android开发之TextView的下划线添加

    Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...

  5. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  6. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  7. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  8. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  9. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

最新文章

  1. 最常用的20个Git命令与示例,你都会了么?
  2. Spring.NET实用技巧3——NHibernate分布式事务(上)
  3. Property or field 'username' cannot be found on null
  4. animate方法 jQuery中元素的创建 创建十个p标签 创建列表 动态创建列表
  5. ios支付宝支付失败不回调_iOS 支付宝网页支付回调问题
  6. Hdu-6243 2017CCPC-Final A.Dogs and Cages 数学
  7. Uniswap 24小时交易量9.7亿美元,占以太坊上Dex总量的54%
  8. SSE instruction set not enabled
  9. TensorFlow总结(2020版)
  10. SQL Server数据导入导出的几种方法
  11. PowerDesigner中通过VBS脚本修改模型信息(转)
  12. SVN教程代码比较(图文教程)
  13. 国企转型----北京市供销社探索大数据之路!
  14. 计算机网络安全知识讲座新闻稿,我院开展网络安全与信息化建设讲座
  15. 机器学习sklearn----支持向量机SVC模型评估指标
  16. java身份认证_WEB应用中的基本身份验证和表单身份验证(中文)
  17. (node:13684) UnhandledPromiseRejectionWarning: Unhandled promise rejection
  18. 相关关系与因果关系之探讨——大数据时代读后感(1)
  19. t检验该怎么分析?如果选择哪种t检验?
  20. TIL:创建Java线程的两种方法

热门文章

  1. 《Science》杂志:机器学习究竟将如何影响人类未来的工作? 2018-01-11 Smiletalker AI科技评论 AI 科技评论按:人工智能、机器学习相关技术已经多次刷新了人们对于「计算机能
  2. 线性回归代码matlab
  3. 逻辑回归评分卡分数映射
  4. java swing 图片切换_使用Javaswing自定义图片作为按钮(原创)
  5. MySQL-DB参数、内存、I/O、安全等相关参数设置
  6. 白话Elasticsearch60-数据建模实战_Join datatype 父子关系数据建模
  7. 实战SSM_O2O商铺_21【商铺列表】Dao层开发
  8. Ftp实现上传文件至远程服务器
  9. 学习笔记Hadoop(八)—— Hadoop集群的安装与部署(5)—— Hadoop配置参数介绍、Hadoop集群启动与监控
  10. 复习笔记(一)——C++基础