首页 > 代码库 > 给老婆写的带返回的2048(数据库存储)
给老婆写的带返回的2048(数据库存储)
给老婆写的的带返回的2048(数据库存储),虽然很烂。但是还是贴出来了
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context=".MyActivity"> 10 11 <LinearLayout 12 android:layout_width="match_parent" 13 android:layout_height="match_parent" 14 android:orientation="vertical"> 15 16 <LinearLayout 17 android:layout_width="match_parent" 18 android:layout_height="match_parent" 19 android:layout_weight="9" 20 android:orientation="vertical"> 21 22 <TextView 23 android:layout_width="match_parent" 24 android:layout_height="wrap_content" 25 android:gravity="center" 26 android:text="亲爱的,你最棒!" 27 android:textSize="30dp" /> 28 29 <LinearLayout 30 android:layout_width="match_parent" 31 android:layout_height="wrap_content" 32 android:gravity="center"> 33 34 <TextView 35 android:layout_width="wrap_content" 36 android:layout_height="wrap_content" 37 android:text="分数:" 38 android:textSize="30dp" /> 39 40 <TextView 41 android:id="@+id/score" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:textSize="30dp" 45 android:text="0"/> 46 </LinearLayout> 47 48 <TextView 49 android:layout_width="match_parent" 50 android:layout_height="wrap_content" 51 android:gravity="center" 52 android:text="亲爱的,别忘了分享哦" 53 android:textSize="30dp" /> 54 55 <TextView 56 android:layout_width="match_parent" 57 android:layout_height="wrap_content" 58 android:gravity="center" 59 android:text="^_~" 60 android:textSize="30dp" /> 61 </LinearLayout> 62 63 <LinearLayout 64 android:id="@+id/gameView" 65 android:layout_width="match_parent" 66 android:layout_height="match_parent" 67 android:layout_weight="5" 68 android:background="#ffbbada0" 69 android:orientation="vertical" 70 android:padding="5dp"> 71 72 <LinearLayout 73 android:layout_width="match_parent" 74 android:layout_height="match_parent" 75 android:layout_weight="1"> 76 77 <TextView 78 android:id="@+id/t0" 79 android:layout_width="match_parent" 80 android:layout_height="match_parent" 81 android:layout_margin="5dp" 82 android:layout_weight="1" 83 android:background="#ffcdc1b4" 84 android:gravity="center" 85 android:text="1" 86 android:textSize="30dp"/> 87 88 <TextView 89 android:id="@+id/t1" 90 android:layout_width="match_parent" 91 android:layout_height="match_parent" 92 android:layout_margin="5dp" 93 android:layout_weight="1" 94 android:gravity="center" /> 95 96 <TextView 97 android:id="@+id/t2" 98 android:layout_width="match_parent" 99 android:layout_height="match_parent"100 android:layout_margin="5dp"101 android:layout_weight="1"102 android:gravity="center" />103 104 <TextView105 android:id="@+id/t3"106 android:layout_width="match_parent"107 android:layout_height="match_parent"108 android:layout_margin="5dp"109 android:layout_weight="1"110 android:gravity="center" />111 </LinearLayout>112 113 <LinearLayout114 android:layout_width="match_parent"115 android:layout_height="match_parent"116 android:layout_weight="1">117 118 <TextView119 android:id="@+id/t4"120 android:layout_width="match_parent"121 android:layout_height="match_parent"122 android:layout_margin="5dp"123 android:layout_weight="1"124 android:gravity="center" />125 126 <TextView127 android:id="@+id/t5"128 android:layout_width="match_parent"129 android:layout_height="match_parent"130 android:layout_margin="5dp"131 android:layout_weight="1"132 android:gravity="center" />133 134 <TextView135 android:id="@+id/t6"136 android:layout_width="match_parent"137 android:layout_height="match_parent"138 android:layout_margin="5dp"139 android:layout_weight="1"140 android:gravity="center" />141 142 <TextView143 android:id="@+id/t7"144 android:layout_width="match_parent"145 android:layout_height="match_parent"146 android:layout_margin="5dp"147 android:layout_weight="1"148 android:gravity="center" />149 </LinearLayout>150 151 <LinearLayout152 android:layout_width="match_parent"153 android:layout_height="match_parent"154 android:layout_weight="1">155 156 <TextView157 android:id="@+id/t8"158 android:layout_width="match_parent"159 android:layout_height="match_parent"160 android:layout_margin="5dp"161 android:layout_weight="1"162 android:gravity="center" />163 164 <TextView165 android:id="@+id/t9"166 android:layout_width="match_parent"167 android:layout_height="match_parent"168 android:layout_margin="5dp"169 android:layout_weight="1"170 android:gravity="center" />171 172 <TextView173 android:id="@+id/t10"174 android:layout_width="match_parent"175 android:layout_height="match_parent"176 android:layout_margin="5dp"177 android:layout_weight="1"178 android:gravity="center" />179 180 <TextView181 android:id="@+id/t11"182 android:layout_width="match_parent"183 android:layout_height="match_parent"184 android:layout_margin="5dp"185 android:layout_weight="1"186 android:gravity="center" />187 </LinearLayout>188 189 <LinearLayout190 android:layout_width="match_parent"191 android:layout_height="match_parent"192 android:layout_weight="1">193 194 <TextView195 android:id="@+id/t12"196 android:layout_width="match_parent"197 android:layout_height="match_parent"198 android:layout_margin="5dp"199 android:layout_weight="1"200 android:gravity="center" />201 202 <TextView203 android:id="@+id/t13"204 android:layout_width="match_parent"205 android:layout_height="match_parent"206 android:layout_margin="5dp"207 android:layout_weight="1"208 android:gravity="center" />209 210 <TextView211 android:id="@+id/t14"212 android:layout_width="match_parent"213 android:layout_height="match_parent"214 android:layout_margin="5dp"215 android:layout_weight="1"216 android:gravity="center" />217 218 <TextView219 android:id="@+id/t15"220 android:layout_width="match_parent"221 android:layout_height="match_parent"222 android:layout_margin="5dp"223 android:layout_weight="1"224 android:gravity="center" />225 </LinearLayout>226 </LinearLayout>227 </LinearLayout>228 229 </RelativeLayout>
1 import android.content.Context; 2 import android.database.Cursor; 3 import android.database.sqlite.SQLiteDatabase; 4 import android.graphics.Color; 5 import android.support.v7.app.ActionBarActivity; 6 import android.os.Bundle; 7 import android.util.Log; 8 import android.view.GestureDetector; 9 import android.view.Menu; 10 import android.view.MenuItem; 11 import android.view.MotionEvent; 12 import android.view.View; 13 import android.widget.LinearLayout; 14 import android.widget.TextView; 15 16 import java.util.Random; 17 18 19 public class MyActivity extends ActionBarActivity implements GestureDetector.OnGestureListener, View.OnTouchListener { 20 21 private TextView[] allTextView; 22 private int[] numData; 23 private String[] colorData; 24 private TextView score; 25 SQLiteDatabase db; 26 int scoreNum = 0; 27 boolean isDoAdd; 28 29 private GestureDetector mGestureDetector; 30 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_my); 35 init(); 36 mGestureDetector = new GestureDetector(this, this); 37 LinearLayout gameView = (LinearLayout) findViewById(R.id.gameView); 38 score = (TextView) findViewById(R.id.score); 39 score.setOnTouchListener(new View.OnTouchListener() { 40 @Override 41 public boolean onTouch(View view, MotionEvent motionEvent) { 42 backStateFromDb(); 43 return false; 44 } 45 }); 46 gameView.setOnTouchListener(this); 47 gameView.setClickable(true); 48 } 49 50 @Override 51 protected void onPause() { 52 saveStateToDb(); 53 db.close(); 54 super.onPause(); 55 } 56 57 @Override 58 protected void onResume() { 59 super.onResume(); 60 backStateFromDb(); 61 } 62 63 64 private void gameStart() { 65 this.scoreNum = 0; 66 this.setScore(0); 67 for (int i = 0; i < 16; i++) { 68 setNum(i, 1); 69 } 70 addOneNum(); 71 addOneNum(); 72 } 73 74 75 @Override 76 public boolean onDown(MotionEvent motionEvent) { 77 return false; 78 } 79 80 @Override 81 public void onShowPress(MotionEvent motionEvent) { 82 83 } 84 85 86 @Override 87 public boolean onSingleTapUp(MotionEvent motionEvent) { 88 return false; 89 } 90 91 @Override 92 public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { 93 return false; 94 } 95 96 @Override 97 public void onLongPress(MotionEvent motionEvent) { 98 99 }100 101 @Override102 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {103 isDoAdd = false;104 saveStateToDb();105 if (Math.abs(velocityX) > Math.abs(velocityY)) {106 if (velocityX > 0) {107 moveRight();108 } else {109 moveLeft();110 }111 } else {112 if (velocityY > 0) {113 moveDown();114 } else {115 moveTop();116 }117 }118 if (isDoAdd) {119 addOneNum();120 } else {121 deleteOneDataFromDb();122 }123 return false;124 }125 126 127 private void addOneNum() {128 int[] nullCell = new int[16];129 int count = 0;130 for (int i = 0; i < 16; i++) {131 if (numData[i] == 1) {132 nullCell[count] = i;133 count++;134 }135 }136 if (count == 0) {137 return;138 }139 Random r = new Random();140 int index = r.nextInt(count);141 int data = http://www.mamicode.com/r.nextInt(10);142 data = http://www.mamicode.com/data == 0 ? 1 : 0;143 setNum(nullCell[index], (data + 1) * 2);144 }145 146 private void moveDown() {147 //Toast.makeText(getApplicationContext(),"下",Toast.LENGTH_SHORT).show();148 for (int y = 0; y < 4; y++) {149 for (int x = 3; x > 0; x--) {150 int p = (x * 4) + y;151 for (int z = 1; z < 4; z++) {152 int q = (x - z) * 4 + y;153 if (q < y) {154 break;155 }156 if (numData[q] == 1) {157 continue;158 } else if (numData[p] == 1 && numData[q] == 1) {159 continue;160 } else if (numData[p] == 1 && numData[q] != 1) {161 setNum(p, numData[q]);162 setNum(q, 1);163 continue;164 } else if (numData[p] != numData[q]) {165 break;166 } else {167 setNum(p, numData[p] * 2);168 setScore(numData[p] * 2);169 setNum(q, 1);170 break;171 }172 }173 }174 }175 }176 177 private void moveTop() {178 //Toast.makeText(getApplicationContext(),"上",Toast.LENGTH_SHORT).show();179 for (int y = 0; y < 4; y++) {180 for (int x = 0; x < 3; x++) {181 int p = (x * 4) + y;182 for (int z = 1; z < 4; z++) {183 int q = (x + z) * 4 + y;184 if (q > 12 + y) {185 break;186 }187 if (numData[q] == 1) {188 continue;189 } else if (numData[p] == 1 && numData[q] == 1) {190 continue;191 } else if (numData[p] == 1 && numData[q] != 1) {192 setNum(p, numData[q]);193 setNum(q, 1);194 continue;195 } else if (numData[p] != numData[q]) {196 break;197 } else {198 setNum(p, numData[p] * 2);199 setScore(numData[p] * 2);200 setNum(q, 1);201 break;202 }203 }204 }205 }206 }207 208 private void moveLeft() {209 // Toast.makeText(getApplicationContext(),"左",Toast.LENGTH_SHORT).show();210 for (int x = 0; x < 4; x++) {211 for (int y = 0; y < 3; y++) {212 int p = (x * 4) + y;213 for (int z = 1; z < 4; z++) {214 int q = p + z;215 if (q > (x + 1) * 4 - 1) {216 break;217 }218 if (numData[q] == 1) {219 continue;220 } else if (numData[p] == 1 && numData[q] == 1) {221 continue;222 } else if (numData[p] == 1 && numData[q] != 1) {223 setNum(p, numData[q]);224 setNum(q, 1);225 continue;226 } else if (numData[p] != numData[q]) {227 break;228 } else {229 setNum(p, numData[p] * 2);230 setScore(numData[p] * 2);231 setNum(q, 1);232 break;233 }234 }235 }236 }237 }238 239 private void moveRight() {240 //Toast.makeText(getApplicationContext(),"右",Toast.LENGTH_SHORT).show();241 for (int x = 0; x < 4; x++) {242 for (int y = 3; y > 0; y--) {243 int p = (x * 4) + y;244 for (int z = 1; z < 4; z++) {245 int q = p - z;246 if (q < x * 4) {247 break;248 }249 if (numData[q] == 1) {250 continue;251 } else if (numData[p] == 1 && numData[q] == 1) {252 continue;253 } else if (numData[p] == 1 && numData[q] != 1) {254 setNum(p, numData[q]);255 setNum(q, 1);256 continue;257 } else if (numData[p] != numData[q]) {258 break;259 } else {260 setNum(p, numData[p] * 2);261 setScore(numData[p] * 2);262 setNum(q, 1);263 break;264 }265 }266 }267 }268 }269 270 271 private void setScore(int s) {272 scoreNum += s;273 score.setText(scoreNum + "");274 }275 276 private void init() {277 dbCreate();278 findAllTextView();279 setColorData();280 numData = http://www.mamicode.com/new int[16];281 }282 283 private void dbCreate() {284 db = openOrCreateDatabase("My2048Database.db", Context.MODE_PRIVATE, null);285 db.execSQL("create table if not exists GameRecord(" +286 "Id INTEGER PRIMARY KEY,\n" +287 " Game VARCHAR NOT NULL,\n" +288 " Score INTEGER NOT NULL )");289 }290 291 private void saveStateToDb() {292 String gameNumState = "";293 for (int i = 0; i < 16; i++) {294 gameNumState += (numData[i] + ",");295 }296 db.execSQL("insert into GameRecord(Game,Score) values(‘" +297 gameNumState + "‘,‘" +298 scoreNum + "‘)");299 Log.d("DB:", "Save");300 }301 302 private void backStateFromDb() {303 Cursor c = db.rawQuery("select * from GameRecord order by Id desc limit 1", null);304 if (!c.moveToNext()) {305 gameStart();306 return;307 }308 int id = c.getInt(c.getColumnIndex("Id"));309 String gameStateNnm = c.getString(c.getColumnIndex("Game"));310 int score = c.getInt(c.getColumnIndex("Score"));311 this.scoreNum = 0;312 this.setScore(score);313 Log.d("DB:", "Score-" + score);314 Log.d("DB:", "gameDb-" + gameStateNnm);315 String[] numString = gameStateNnm.split(",");316 for (int i = 0; i < 16; i++) {317 this.setNum(i, Integer.parseInt(numString[i]));318 }319 Log.d("DB:", "dbId-" + id + "");320 db.delete("GameRecord", "Id = ?", new String[]{id + ""});321 Log.d("DB:", "Back");322 }323 324 private void deleteOneDataFromDb() {325 Cursor c = db.rawQuery("select * from GameRecord order by Id desc limit 1", null);326 if (!c.moveToNext()) {327 return;328 }329 int id = c.getInt(c.getColumnIndex("Id"));330 db.delete("GameRecord", "Id = ?", new String[]{id + ""});331 Log.d("DB:", "DeleteOneNoUse");332 }333 334 private void setNum(int index, int num) {335 numData[index] = num;336 int colorIndex = (int) Math.log((double) num);337 if (colorIndex > 15) {338 colorIndex = 15;339 }340 if (num == 1) {341 allTextView[index].setText("");342 allTextView[index].setBackgroundColor(Color.parseColor(colorData[colorIndex]));343 } else {344 allTextView[index].setText("" + num);345 allTextView[index].setBackgroundColor(Color.parseColor(colorData[colorIndex]));346 if (num > 512) {347 allTextView[index].setTextSize(20);348 } else {349 allTextView[index].setTextSize(30);350 }351 }352 isDoAdd = true;353 }354 355 private void setColorData() {356 colorData = http://www.mamicode.com/new String[16];357 colorData[0] = "#cdc1b4";358 colorData[1] = "#eee4da";359 colorData[2] = "#ede0c8";360 colorData[3] = "#ece0c8";361 colorData[4] = "#ecd0c8";362 colorData[5] = "#ebe0c8";363 colorData[6] = "#ede0c0";364 colorData[7] = "#ede0c8";365 colorData[8] = "#aae0c8";366 colorData[9] = "#edaac8";367 colorData[10] = "#ede0aa";368 colorData[11] = "#99e0c8";369 colorData[12] = "#88e0c8";370 colorData[13] = "#77e0c8";371 colorData[14] = "#66e0c8";372 colorData[15] = "#55e0c8";373 }374 375 private void findAllTextView() {376 allTextView = new TextView[16];377 allTextView[0] = (TextView) findViewById(R.id.t0);378 allTextView[1] = (TextView) findViewById(R.id.t1);379 allTextView[2] = (TextView) findViewById(R.id.t2);380 allTextView[3] = (TextView) findViewById(R.id.t3);381 allTextView[4] = (TextView) findViewById(R.id.t4);382 allTextView[5] = (TextView) findViewById(R.id.t5);383 allTextView[6] = (TextView) findViewById(R.id.t6);384 allTextView[7] = (TextView) findViewById(R.id.t7);385 allTextView[8] = (TextView) findViewById(R.id.t8);386 allTextView[9] = (TextView) findViewById(R.id.t9);387 allTextView[10] = (TextView) findViewById(R.id.t10);388 allTextView[11] = (TextView) findViewById(R.id.t11);389 allTextView[12] = (TextView) findViewById(R.id.t12);390 allTextView[13] = (TextView) findViewById(R.id.t13);391 allTextView[14] = (TextView) findViewById(R.id.t14);392 allTextView[15] = (TextView) findViewById(R.id.t15);393 }394 395 396 @Override397 public boolean onCreateOptionsMenu(Menu menu) {398 // Inflate the menu; this adds items to the action bar if it is present.399 getMenuInflater().inflate(R.menu.my, menu);400 return true;401 }402 403 @Override404 public boolean onOptionsItemSelected(MenuItem item) {405 // Handle action bar item clicks here. The action bar will406 // automatically handle clicks on the Home/Up button, so long407 // as you specify a parent activity in AndroidManifest.xml.408 int id = item.getItemId();409 if (id == R.id.action_settings) {410 try {411 db.execSQL("delete from GameRecord");412 } catch (Exception e) {413 Log.d("DB:", e.getMessage());414 }415 416 Log.d("DB:", "Restart");417 gameStart();418 return true;419 }420 return super.onOptionsItemSelected(item);421 }422 423 @Override424 public boolean onTouch(View view, MotionEvent motionEvent) {425 426 return mGestureDetector.onTouchEvent(motionEvent);427 }428 }
忘了截图,喜欢的自己运行一下
给老婆写的带返回的2048(数据库存储)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。