游戏设计思路:
主界面点击开始游戏:进入打地鼠界面游戏中有12个地洞,游戏时间为30s(可以自己设置),每0.5s会有地鼠随机出现在一个地洞中,玩家触摸屏幕,打到地鼠加10分,否则不加分。30s后游戏结束,弹出窗口显示获得分数,需要玩家输入姓名后,点击确定保存到本地数据库中。
设计实现:每个地洞为一个ImageButton,开始设置背景为地洞图片,地鼠出现则设置为地鼠图片,给每个按钮添加点击事件,当玩家点击按钮时,如果打到地鼠,该按钮设置打中地鼠图片,否则设置没打中地鼠的图片。游戏结束开启记录窗口,记录玩家信息。
主界面点击排行榜:如果没有记录,提示暂无排行,有记录就跳转界面,按分数从高到低显示玩家信息。
设计实现:通过对数据库的查询操作,返回一个ArrayList,如果ArrayList长度为0,则提示“暂无排行”,否则开启一个新的Activity显示玩家信息。
主界面点击关于:显示游戏的相关信息。
设计实现:Activity跳转。
主界面点击退出:游戏退出
设计实现:调用finish()函数。
主界面点击音乐图标:游戏打开默认播放音乐,点击图标背景音乐和音效会关闭,再次点击会播放背景音乐和音效。
设计实现:一个ToggleButton(开关按钮)背景设置成音乐图标,点击会触发响应事件。
按物理返回键游戏停止,在onDestroy()方法中做释放资源等操作。
注:游戏中所写的Activity继承BaseActivity,自己实现的一个继承Activity的类。那么为什么要实现这么一个类呢?在游戏的后期添加音效时,程序进入后台,背景音乐会一直播放,因为背景音乐在所有的Activity中都会播放,所以要在每个Activity的生命周期的回调函数中对音乐操作无疑是比较麻烦的,所以继承自一个我们自己实现的BaseActivity,只需要在BaseActivity中来操作即可。
BaseActivity的代码如下:
- package cn.com.cyj.mouse.ui;
- import android.app.Activity;
- import android.os.Bundle;
- /**
- *
- * @author cyj
- *
- */
- public class BaseActivity extends Activity {
- // 音乐播放标记
- protected Boolean isLive = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 如果进入后台前音乐是播放的,进入前台时继续播放
- if (isLive) {
- MouseStart.controller.continuePlay();
- }
- }
- // 进入后台时系统调用
- @Override
- protected void onUserLeaveHint() {
- super.onUserLeaveHint();
- // 如果音乐在播放就暂停
- if (MouseStart.controller.isPlay()) {
- MouseStart.controller.pauseMusic();
- isLive = true;
- } else {
- isLive = false;
- }
- }
- }
主界面代码如下:
- package cn.com.cyj.mouse.ui;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.View.OnTouchListener;
- import android.widget.ImageButton;
- import android.widget.Toast;
- import android.widget.ToggleButton;
- import cn.com.cyj.mouse.R;
- import cn.com.cyj.mouse.controller.Controller;
- import cn.com.cyj.mouse.services.GameRun;
- /**
- * 游戏主界面
- *
- * @author cyj
- *
- */
- public class MouseStart extends BaseActivity {
- // 开始游戏按钮
- ImageButton start;
- // 排行榜按钮
- ImageButton rank;
- // 关于按钮
- ImageButton about;
- // 退出按钮
- ImageButton exit;
- // 音乐开关
- ToggleButton music;
- Intent intent;
- // 只有能一个controller定义成静态共别的Activity调用,之前在BaseActivity创建controller的对象每个子类都会有一个controller,出现问题
- public static Controller controller;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_gamestart);
- controller = new Controller(this);
- /*
- * 初始化各个按钮
- */
- start = (ImageButton) findViewById(R.id.startgame);
- rank = (ImageButton) findViewById(R.id.rank);
- about = (ImageButton) findViewById(R.id.about);
- exit = (ImageButton) findViewById(R.id.exit);
- music = (ToggleButton) findViewById(R.id.musical);
- /*
- * 给每个按钮添加点击事件
- */
- GameStartOnClick game = new GameStartOnClick();
- start.setOnClickListener(game);
- start.setOnTouchListener(game);
- rank.setOnClickListener(game);
- rank.setOnTouchListener(game);
- about.setOnClickListener(game);
- about.setOnTouchListener(game);
- exit.setOnClickListener(game);
- exit.setOnTouchListener(game);
- music.setOnClickListener(game);
- // 游戏开启默认播放背景音乐
- controller.play();
- }
- class GameStartOnClick implements OnClickListener, OnTouchListener {
- @Override
- public void onClick(View v) {
- int id = v.getId();
- switch (id) {
- case R.id.startgame:
- // 进入开始游戏Activity
- intent = new Intent(MouseStart.this, GameRun.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
- MouseStart.this.startActivity(intent);
- break;
- case R.id.rank:
- // 通过控制类对象查询全部玩家信息
- if (!controller.query()) {
- Toast.makeText(MouseStart.this, "暂无排行", Toast.LENGTH_SHORT)
- .show();
- }
- break;
- case R.id.about:
- // 打开关于Activity
- intent = new Intent(MouseStart.this, About.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
- startActivity(intent);
- break;
- case R.id.exit:
- // 关闭Activity
- finish();
- break;
- case R.id.musical:
- if (music.isChecked()) {
- controller.stop();
- } else {
- controller.play();
- }
- break;
- default:
- break;
- }
- }
- /**
- * 设置按钮按下和抬起的效果
- */
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- int id = v.getId();
- switch (id) {
- case R.id.startgame:
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- start.setBackgroundResource(R.drawable.startgamean);
- }
- if (event.getAction() == MotionEvent.ACTION_UP) {
- start.setBackgroundResource(R.drawable.startgame);
- }
- break;
- case R.id.rank:
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- rank.setBackgroundResource(R.drawable.rankan);
- }
- if (event.getAction() == MotionEvent.ACTION_UP) {
- rank.setBackgroundResource(R.drawable.rank);
- }
- break;
- case R.id.about:
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- about.setBackgroundResource(R.drawable.aboutan);
- }
- if (event.getAction() == MotionEvent.ACTION_UP) {
- about.setBackgroundResource(R.drawable.about);
- }
- break;
- case R.id.exit:
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- exit.setBackgroundResource(R.drawable.exitan);
- }
- if (event.getAction() == MotionEvent.ACTION_UP) {
- exit.setBackgroundResource(R.drawable.exit);
- }
- break;
- default:
- break;
- }
- return false;
- }
- }
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- controller.close();
- }
- }
顺便贴一下About中的代码:这个类比较简单直接加载对应的xml文件就可以,一些介绍的话在xml中写。
- package cn.com.cyj.mouse.ui;
- import android.os.Bundle;
- import cn.com.cyj.mouse.R;
- /**
- * 关于界面
- * @author cyj
- *
- */
- public class About extends BaseActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_about);
- }
- }
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。