您的位置:首页 > 移动开发 > Android开发

Android学习 游戏开发之打地鼠(四,游戏结束和数据存储)

2016-04-27 14:17 639 查看
游戏结束弹出保存玩家姓名和分数的窗口,玩家输入姓名后点击确定保存到数据库中。玩家可以通过主界面的排行榜可以查看到分数从高到低排行的榜单。





建立一个玩家类用来处理玩家的信息,该类实现类序列化接口,实例可以被序列化便于数据的传递。代码如下:

package cn.com.cyj.mouse.enity;

import java.io.Serializable;
/**
* 玩家信息类,可以被序列化
* @author cyj
*
*/
public class Gamer implements Serializable{
// 玩家姓名
private String name;
// 玩家分数
private int score;

public Gamer(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
@Override
public String toString() {
return "Gamer [name=" + name + ", score=" + score + "]";
}
}
游戏窗口是一个Activity,将主题样式设置成Dialog即在清单文件中GameOver设置属性android:theme="@android:style/Theme.Dialog"。代码如下:
package cn.com.cyj.mouse.services;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import cn.com.cyj.mouse.R;
import cn.com.cyj.mouse.enity.Gamer;
import cn.com.cyj.mouse.ui.BaseActivity;
import cn.com.cyj.mouse.ui.MouseStart;
/**
* 游戏结束窗口
* @author cyj
*
*/
public class GameOver extends BaseActivity {
// 确定按钮
Button confirm;
// 取消按钮
Button cancel;
// 姓名输入框
EditText name;
// 显示分数
TextView finalScore;
Intent intent;
// 玩家的分数
int nowScore;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gameover);

init();
intent = getIntent();
nowScore = Integer.parseInt(intent.getStringExtra("score"));
// 显示分数
finalScore.setText(nowScore+"");
// 设置点击其他位置不关闭窗口 ,最低版本API11
this.setFinishOnTouchOutside(false);
}
/**
* 初始化组件
*/
private void init() {
confirm = (Button) findViewById(R.id.confirm);
cancel = (Button) findViewById(R.id.cancel);
name = (EditText) findViewById(R.id.name);
finalScore = (TextView) findViewById(R.id.finalscore);
/**
* 给按钮设置点击事件
*/
confirm.setOnClickListener(new MyOnClick());
cancel.setOnClickListener(new MyOnClick());
}
class MyOnClick implements OnClickListener{
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.confirm:
// 判断输入内容是否为空
if(!TextUtils.isEmpty(name.getText().toString())){
Gamer gamer = new Gamer(name.getText().toString(), nowScore);
// 添加数据到数据库
MouseStart.controller.insert(gamer);
// 关闭窗口
finish();
}else{
Toast.makeText(GameOver.this, "姓名不能为空", Toast.LENGTH_SHORT).show();
}
break;
case R.id.cancel:
finish();
break;
default:
break;
}

}
}
}
数据库中存储玩家的姓名和分数,建立MouseSqlite类通过继承SQLiteOpenHelper来建立数据库和处理数据库升级等操作。package cn.com.cyj.mouse.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 玩家信息数据库的api
* @author cyj
*
*/
public class MouseSqlite extends SQLiteOpenHelper {

public MouseSqlite(Context context) {
super(context, "gamer.db", null, 1);

}
/**
* 创建gamer.db表
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table gamer (id integer primary key autoincrement, name varchar(20), score integer);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
}
}
本游戏对数据库的操作主要有添加一条玩家信息和查询所有玩家信息,查询的时候按照分数从高到低排列。对数据库操作一定要关闭数据库。代码如下:
package cn.com.cyj.mouse.database;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.com.cyj.mouse.enity.Gamer;
/**
* 对gamer表进行操作,数据库使用完毕必须关闭
* @author cyj
*
*/
public class GamerDatabase {

MouseSqlite mouseSqlite;
SQLiteDatabase db;
// 所有玩家信息
ArrayList<Gamer> gamerList;
public GamerDatabase(Context context) {
mouseSqlite = new MouseSqlite(context);
}
/**
* 插入一条数据
* @param gamer 玩家信息
* @return
*/
public Boolean insertGamer(Gamer gamer){
// 获得可写数据库
db = mouseSqlite.getWritableDatabase();
// 用于保存玩家信息到数据库
ContentValues values = new ContentValues();
String name = gamer.getName();
int score = gamer.getScore();
values.put("name", name);
values.put("score", score);
// 插入数据到数据库
long res = db.insert("gamer", null, values);
// 关闭数据库
db.close();
if(res != -1)
return true;
return false;
}
/**
* 查询所有数据
* @return 所有玩家信息
*/
public ArrayList<Gamer> queryGamerAll(){
// 获得可读数据库
db = mouseSqlite.getReadableDatabase();
gamerList = new ArrayList<Gamer>();
// 查询所有玩家信息,按分数从高到低排序
Cursor cursor = db.query("gamer", null, null, null, null, null, "score desc");
while(cursor.moveToNext()){
// 获得当前游标所指向数据的姓名
String name = cursor.getString(cursor.getColumnIndex("name"));
// 获得当前游标所指向数据的分数
int score = cursor.getInt(cursor.getColumnIndex("score"));
Gamer gamer = new Gamer(name, score);
// 添加到集合里
gamerList.add(gamer);
}
// 关闭数据库
db.close();
return gamerList;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息