使用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);
		//创建一广播类并继承BroadcastReceiver
	 private class MyBroadcastReciver extends BroadcastReceiver {  @Override
		  public 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() {
				@Override
				public 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();

      }

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值