使用Android studio开发一个数独游戏APP 系列第二讲
游戲主界面類名稱:MainActivity.java,負責顯示游戲主操作界面,提供調用其他類的接口。
其中issave變量用于控制是否顯示繼續游戲按鈕,當第一次運行游戲時,不顯示該按鈕,所以設置一個boolean量issave用于控制主界面顯示的Button,當暫停游戲或者退出游戲時,設置issave變量為true,當完成游戲后設置為false。
在onResume()中判斷issave的值通過對數據庫的訪問判斷issave的值,去設置是否顯示繼續游戲的按鈕是否為可見。
其中定義一個廣播接受者用來接收是否已完成數獨。完成的話從當前表中刪除。同時設置butt_backgame不可見。
?
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("cn.abel.action.over"); this.registerReceiver(new MyBroadcastReciver(), intentFilter);//創建一廣播類并繼承BroadcastReceiverprivate class MyBroadcastReciver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if(action.equals("cn.abel.action.over")) {String author = intent.getStringExtra("author");issave=false;//設置標記量為假System.out.println("mianzhong jieshoh");Button butt_backgame=(Button) findViewById(R.id.butt_backgame);butt_backgame.setVisibility(View.INVISIBLE);}}}(1)游戲難度選擇
游戲關卡選擇模塊主要包括游戲難度等級選擇。游戲難度等級選擇如圖4.5所示。
游戲難度選擇通過實例化一個AlertDialog來實現,傳入定義好的難度數組XML,監聽選擇的項,將索引值傳遞給游戲開始類GameActivity.java。
protected Dialog onCreateDialog(int id) {Dialog dialog = null;switch (id) {case LISTDIALOG:Builder builder = new AlertDialog.Builder(this);builder.setTitle("難度選擇");DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int which) {if (which == 4) {Intent intent = new Intent();intent.setClass(MainActivity.this, MyGameActivity.class);startActivity(intent);} else {String Str_nandu = getResources().getStringArray(R.array.hobby)[which];Intent intent = new Intent();intent.putExtra("nandu", String.valueOf(which));intent.setClass(MainActivity.this, GameActivity.class);startActivity(intent);}}};builder.setItems(R.array.hobby, listener);dialog = builder.create();break;}return dialog;}點擊繼續游戲按鈕,進入繼續游戲模塊。
(1)定義一個廣播接收,接收是否完成游戲。從數據庫獲取當前游戲時間,并開啟線程計時。
DataBaseHelper dbHelper = new DataBaseHelper(BackgameActivity.this, "save_table", null,1);SQLiteDatabase db = dbHelper.getWritableDatabase();Cursor cursor = db.query("save_table", new String[] { "id","sshudu", "mshudu","time"},null,null, null, null, null);while (cursor.moveToNext()) {t = cursor.getString(cursor.getColumnIndex("time"));}int a[]=Timer.getTime(t);h=a[0];m=a[1];s=a[2]; handler.post(HandlerThread); Runnable HandlerThread = new Runnable() {public void run() {if (s < 60){s += 1;} else if (m < 60) {m += 1;s = 1;} else {h += 1;m = 1;s = 1;}handler.postDelayed(HandlerThread, 1000);}};(2)在onPause()中停止計時,以及判斷是否完成游戲,完成則發送廣播到MainActivity,否則保存數據到數據庫。
protected void onPause() {
???????????? // TODO Auto-generated method stub
???????????? handler.removeCallbacks(HandlerThread);
???????????? if(!is_over){
??????????????????? save();
???????????? }else{
???????????? ??? Intent overintent = new Intent();
???????????? ??? overintent.setAction("cn.abel.action.over");
??????????????????? ?? //要發送的內容
???????????? ??? overintent.putExtra("author", "true");
??????????????????? ?? //發送 一個無序廣播
???????????? ??? BackgameActivity.this.sendBroadcast(overintent);
???????????? }
???????????? super.onPause();
????? }
保存游戲執行save()方法:得到一個可寫的數據save_table用來存儲當前進行的游戲進度及所用時間。插入時先把之前的數據刪除并存入當前數據,關閉數據庫。
public void save(){
???????????? String save_shudu=BackView.tiles;
???????????? String msave_shudu=BackView.newtiles;
???????????? DataBaseHelper dbHelper = new DataBaseHelper(BackgameActivity.this, "save_table", null,1);
???????????? // 得到一個可寫的數據庫
???????????? SQLiteDatabase db = dbHelper.getWritableDatabase();
???????????? String whereClauses = "id=?";
???????????? String[] whereArgs = { String.valueOf(0) };
???????????? // 調用delete方法,刪除數據
???????????? db.delete("save_table", whereClauses, whereArgs);
???????????? System.out.println("刪除ID為0");
???????????? // 生成ContentValues對象 //key:列名,value:想插入的值
???????????? ContentValues cv = new ContentValues();
???????????? // 往ContentValues對象存放數據,鍵-值對模式
???????????? cv.put("id", 0);
???????????? cv.put("sshudu", save_shudu);
???????????? cv.put("mshudu", msave_shudu);
???????????? // 調用insert方法,將數據插入數據庫
???????????? db.insert("save_table", null, cv);
???????????? // 關閉數據庫
???????????? db.close();
????? }
總結
以上是生活随笔為你收集整理的使用Android studio开发一个数独游戏APP 系列第二讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何缩放图像?
- 下一篇: Android检测系统的摄像头是否可用