Android开发之2048安卓版
生活随笔
收集整理的這篇文章主要介紹了
Android开发之2048安卓版
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
之前是在eclipse上寫的,后面換成了android sudio。
2048游戲的UI整體可以采用線性布局,即LinearLayout,其中嵌套一個(gè)線性布局和一個(gè)GridLayout,內(nèi)嵌的線性布局填充文本框,以顯示分?jǐn)?shù),GridLayout中填充4×4的繼承自FrameLayout的card類作為主要的游戲界面。由于大部分操作都在GridLayout中進(jìn)行,可以自定義一個(gè)繼承自GridLayout的類GameView,類中定義判定上下左右滑動(dòng)的方法和每次滑動(dòng)后自動(dòng)添加一個(gè)隨機(jī)數(shù)字的方法以及每次滑動(dòng)后判斷游戲是否可以繼續(xù)進(jìn)行的方法。
主布局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表示布局充滿整個(gè)屏幕android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.administractor.game2048.MainActivity"//里面的組件垂直放置android:orientation="vertical"tools:ignore="MergeRootFrame"><LinearLayout//寬度充滿整個(gè)屏幕,高度自適應(yīng)。android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" >//顯示當(dāng)前分?jǐn)?shù)的文本框<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表示布局充滿整個(gè)屏幕 ????android:layout_width="match_parent" ????android:layout_height="match_parent" ????tools:context="com.example.administractor.game2048.MainActivity" ????//里面的組件垂直放置 ????android:orientation="vertical" ????tools:ignore="MergeRootFrame"> ????<LinearLayout ????//寬度充滿整個(gè)屏幕,高度自適應(yīng)。 ????????android:layout_width="fill_parent" ????????android:layout_height="wrap_content" ????????android:orientation="horizontal"> ????????//顯示當(dāng)前分?jǐn)?shù)的文本框 ????????<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 { //調(diào)用類構(gòu)造方法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(){//設(shè)置為4x4個(gè)方格setColumnCount(4);//設(shè)置背景顏色setBackgroundColor(0xffeee4da);//判定滑動(dòng)方向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;}});}//適應(yīng)不同大小的屏幕@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;}}}//游戲開始時(shí)每個(gè)卡片默認(rèn)值設(shè)為0,并隨機(jī)添加兩張帶數(shù)字的卡片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將數(shù)字為0的card提取出來(lái),并隨即選擇一個(gè)空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出現(xiàn)的概率控制在1:9cardmap[p.x][p.y].setNum(Math.random()>0.1?2:4);}//左滑方法private void swipeLeft(){//merge作為判斷能否滑動(dòng)的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();}}//如果有空卡片或者相鄰的值相同卡片則游戲還能進(jìn)行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;}}}//游戲結(jié)束彈出alert提示窗口if(complete){new AlertDialog.Builder(getContext()).setTitle("大林哥溫馨提示").setMessage("游戲結(jié) 束").setPositiveButton("重來(lái)",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{ //調(diào)用類構(gòu)造方法 ????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(){ ????????//設(shè)置為4x4個(gè)方格 ????????setColumnCount(4); ????????//設(shè)置背景顏色 ????????setBackgroundColor(0xffeee4da); ????????//判定滑動(dòng)方向 ????????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; ????????????} ????????}); ????} ????//適應(yīng)不同大小的屏幕 ????@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; ????????????} ????????} ????} ????//游戲開始時(shí)每個(gè)卡片默認(rèn)值設(shè)為0,并隨機(jī)添加兩張帶數(shù)字的卡片 ????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將數(shù)字為0的card提取出來(lái),并隨即選擇一個(gè)空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出現(xiàn)的概率控制在1:9 ????????cardmap[p.x][p.y].setNum(Math.random()>0.1?2:4); ????} ????//左滑方法 ????privatevoid swipeLeft(){ ????????//merge作為判斷能否滑動(dòng)的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(); ????????} ????} ????//如果有空卡片或者相鄰的值相同卡片則游戲還能進(jìn)行 ????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; ????????????????} ????????????} ????????} ????????//游戲結(jié)束彈出alert提示窗口 ????????if(complete){ ????????????newAlertDialog.Builder(getContext()).setTitle("大林哥溫馨提示").setMessage("游戲結(jié)束").setPositiveButton("重來(lái)",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());//參數(shù)-1表示layoutparams填充滿整個(gè)父容器lp = new LayoutParams(-1, -1);//設(shè)置卡片之間有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;}//設(shè)置數(shù)字及對(duì)應(yīng)的背景顏色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()); ????????//參數(shù)-1表示layoutparams填充滿整個(gè)父容器 ????????lp= newLayoutParams(-1,-1); ????????//設(shè)置卡片之間有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; ????} ????//設(shè)置數(shù)字及對(duì)應(yīng)的背景顏色 ????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; } |
?
轉(zhuǎn)載請(qǐng)注明:靜覓 ? Android開發(fā)之2048安卓版
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Android开发之2048安卓版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己动手实现山东大学QLSC_STU无线
- 下一篇: 计算机网络探究一之利用双网卡主机共享上网