给老婆写的带返回的2048(数据库存储)
2014-11-11 15:02
363 查看
给老婆写的的带返回的2048(数据库存储),虽然很烂。但是还是贴出来了
java代码
忘了截图,喜欢的自己运行一下
import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import java.util.Random; public class MyActivity extends ActionBarActivity implements GestureDetector.OnGestureListener, View.OnTouchListener { private TextView[] allTextView; private int[] numData; private String[] colorData; private TextView score; SQLiteDatabase db; int scoreNum = 0; boolean isDoAdd; private GestureDetector mGestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); init(); mGestureDetector = new GestureDetector(this, this); LinearLayout gameView = (LinearLayout) findViewById(R.id.gameView); score = (TextView) findViewById(R.id.score); score.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { backStateFromDb(); return false; } }); gameView.setOnTouchListener(this); gameView.setClickable(true); } @Override protected void onPause() { saveStateToDb(); db.close(); super.onPause(); } @Override protected void onResume() { super.onResume(); backStateFromDb(); } private void gameStart() { this.scoreNum = 0; this.setScore(0); for (int i = 0; i < 16; i++) { setNum(i, 1); } addOneNum(); addOneNum(); } @Override public boolean onDown(MotionEvent motionEvent) { return false; } @Override public void onShowPress(MotionEvent motionEvent) { } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return false; } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { return false; } @Override public void onLongPress(MotionEvent motionEvent) { } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { isDoAdd = false; saveStateToDb(); if (Math.abs(velocityX) > Math.abs(velocityY)) { if (velocityX > 0) { moveRight(); } else { moveLeft(); } } else { if (velocityY > 0) { moveDown(); } else { moveTop(); } } if (isDoAdd) { addOneNum(); } else { deleteOneDataFromDb(); } return false; } private void addOneNum() { int[] nullCell = new int[16]; int count = 0; for (int i = 0; i < 16; i++) { if (numData[i] == 1) { nullCell[count] = i; count++; } } if (count == 0) { return; } Random r = new Random(); int index = r.nextInt(count); int data = r.nextInt(10); data = data == 0 ? 1 : 0; setNum(nullCell[index], (data + 1) * 2); } private void moveDown() { //Toast.makeText(getApplicationContext(),"下",Toast.LENGTH_SHORT).show(); for (int y = 0; y < 4; y++) { for (int x = 3; x > 0; x--) { int p = (x * 4) + y; for (int z = 1; z < 4; z++) { int q = (x - z) * 4 + y; if (q < y) { break; } if (numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] != 1) { setNum(p, numData[q]); setNum(q, 1); continue; } else if (numData[p] != numData[q]) { break; } else { setNum(p, numData[p] * 2); setScore(numData[p] * 2); setNum(q, 1); break; } } } } } private void moveTop() { //Toast.makeText(getApplicationContext(),"上",Toast.LENGTH_SHORT).show(); for (int y = 0; y < 4; y++) { for (int x = 0; x < 3; x++) { int p = (x * 4) + y; for (int z = 1; z < 4; z++) { int q = (x + z) * 4 + y; if (q > 12 + y) { break; } if (numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] != 1) { setNum(p, numData[q]); setNum(q, 1); continue; } else if (numData[p] != numData[q]) { break; } else { setNum(p, numData[p] * 2); setScore(numData[p] * 2); setNum(q, 1); break; } } } } } private void moveLeft() { // Toast.makeText(getApplicationContext(),"左",Toast.LENGTH_SHORT).show(); for (int x = 0; x < 4; x++) { for (int y = 0; y < 3; y++) { int p = (x * 4) + y; for (int z = 1; z < 4; z++) { int q = p + z; if (q > (x + 1) * 4 - 1) { break; } if (numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] != 1) { setNum(p, numData[q]); setNum(q, 1); continue; } else if (numData[p] != numData[q]) { break; } else { setNum(p, numData[p] * 2); setScore(numData[p] * 2); setNum(q, 1); break; } } } } } private void moveRight() { //Toast.makeText(getApplicationContext(),"右",Toast.LENGTH_SHORT).show(); for (int x = 0; x < 4; x++) { for (int y = 3; y > 0; y--) { int p = (x * 4) + y; for (int z = 1; z < 4; z++) { int q = p - z; if (q < x * 4) { break; } if (numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] == 1) { continue; } else if (numData[p] == 1 && numData[q] != 1) { setNum(p, numData[q]); setNum(q, 1); continue; } else if (numData[p] != numData[q]) { break; } else { setNum(p, numData[p] * 2); setScore(numData[p] * 2); setNum(q, 1); break; } } } } } private void setScore(int s) { scoreNum += s; score.setText(scoreNum + ""); } private void init() { dbCreate(); findAllTextView(); setColorData(); numData = new int[16]; } private void dbCreate() { db = openOrCreateDatabase("My2048Database.db", Context.MODE_PRIVATE, null); db.execSQL("create table if not exists GameRecord(" + "Id INTEGER PRIMARY KEY,\n" + " Game VARCHAR NOT NULL,\n" + " Score INTEGER NOT NULL )"); } private void saveStateToDb() { String gameNumState = ""; for (int i = 0; i < 16; i++) { gameNumState += (numData[i] + ","); } db.execSQL("insert into GameRecord(Game,Score) values('" + gameNumState + "','" + scoreNum + "')"); Log.d("DB:", "Save"); } private void backStateFromDb() { Cursor c = db.rawQuery("select * from GameRecord order by Id desc limit 1", null); if (!c.moveToNext()) { gameStart(); return; } int id = c.getInt(c.getColumnIndex("Id")); String gameStateNnm = c.getString(c.getColumnIndex("Game")); int score = c.getInt(c.getColumnIndex("Score")); this.scoreNum = 0; this.setScore(score); Log.d("DB:", "Score-" + score); Log.d("DB:", "gameDb-" + gameStateNnm); String[] numString = gameStateNnm.split(","); for (int i = 0; i < 16; i++) { this.setNum(i, Integer.parseInt(numString[i])); } Log.d("DB:", "dbId-" + id + ""); db.delete("GameRecord", "Id = ?", new String[]{id + ""}); Log.d("DB:", "Back"); } private void deleteOneDataFromDb() { Cursor c = db.rawQuery("select * from GameRecord order by Id desc limit 1", null); if (!c.moveToNext()) { return; } int id = c.getInt(c.getColumnIndex("Id")); db.delete("GameRecord", "Id = ?", new String[]{id + ""}); Log.d("DB:", "DeleteOneNoUse"); } private void setNum(int index, int num) { numData[index] = num; int colorIndex = (int) Math.log((double) num); if (colorIndex > 15) { colorIndex = 15; } if (num == 1) { allTextView[index].setText(""); allTextView[index].setBackgroundColor(Color.parseColor(colorData[colorIndex])); } else { allTextView[index].setText("" + num); allTextView[index].setBackgroundColor(Color.parseColor(colorData[colorIndex])); if (num > 512) { allTextView[index].setTextSize(20); } else { allTextView[index].setTextSize(30); } } isDoAdd = true; } private void setColorData() { colorData = new String[16]; colorData[0] = "#cdc1b4"; colorData[1] = "#eee4da"; colorData[2] = "#ede0c8"; colorData[3] = "#ece0c8"; colorData[4] = "#ecd0c8"; colorData[5] = "#ebe0c8"; colorData[6] = "#ede0c0"; colorData[7] = "#ede0c8"; colorData[8] = "#aae0c8"; colorData[9] = "#edaac8"; colorData[10] = "#ede0aa"; colorData[11] = "#99e0c8"; colorData[12] = "#88e0c8"; colorData[13] = "#77e0c8"; colorData[14] = "#66e0c8"; colorData[15] = "#55e0c8"; } private void findAllTextView() { allTextView = new TextView[16]; allTextView[0] = (TextView) findViewById(R.id.t0); allTextView[1] = (TextView) findViewById(R.id.t1); allTextView[2] = (TextView) findViewById(R.id.t2); allTextView[3] = (TextView) findViewById(R.id.t3); allTextView[4] = (TextView) findViewById(R.id.t4); allTextView[5] = (TextView) findViewById(R.id.t5); allTextView[6] = (TextView) findViewById(R.id.t6); allTextView[7] = (TextView) findViewById(R.id.t7); allTextView[8] = (TextView) findViewById(R.id.t8); allTextView[9] = (TextView) findViewById(R.id.t9); allTextView[10] = (TextView) findViewById(R.id.t10); allTextView[11] = (TextView) findViewById(R.id.t11); allTextView[12] = (TextView) findViewById(R.id.t12); allTextView[13] = (TextView) findViewById(R.id.t13); allTextView[14] = (TextView) findViewById(R.id.t14); allTextView[15] = (TextView) findViewById(R.id.t15); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { try { db.execSQL("delete from GameRecord"); } catch (Exception e) { Log.d("DB:", e.getMessage()); } Log.d("DB:", "Restart"); gameStart(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { return mGestureDetector.onTouchEvent(motionEvent); } }
java代码
忘了截图,喜欢的自己运行一下
相关文章推荐
- 返回数据库数据的存储过程函数(3个参数)(SQL Server)
- 在数据库里执行 返回参数时,不是存储过程返回的值,而是跟在存储过程后面的那个@output变量
- 返回数据库数据的存储过程函数(5个参数)(SQL Server)
- ASP 调用带返回参数和记录集的存储过程二次访问数据库服务器的解决办法
- php实现post请求 接收android客户端json数据 存储数据库 并返回json
- ORACLE ADF11g: AM 代码返回存储过程数据库对象数组
- MFC调用postgres数据库返回游标存储过程的疑惑
- 数据库操作--获取存储过程的返回值
- c#调用数据库中的带返回(output参数形式)存储过程的demo
- 返回数据库数据的存储过程函数(4个参数)(SQL Server)
- c#关于数据库自定义类型在存储过程中返回服务器端的问题
- js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中
- 通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录
- 数据库存储的奇怪问题!
- 读取数据库时进行分页的存储过程(sqlserver版)
- MSSQL数据库:存储过程学习
- 利用存储过程来消除数据库中冗余的数据
- 用.NET调用oracle的存储过程返回记录集
- 如何使用Sybase ASE数据库的扩展存储过程?
- ASP无组件文件上传[数据库存储]