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

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

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

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

Java代码
  1. package cn.com.cyj.mouse.enity;    
  2.     
  3. import java.io.Serializable;    
  4. /**  
  5.  * 玩家信息类,可以被序列化  
  6.  * @author cyj  
  7.  *  
  8.  */    
  9. public class Gamer implements Serializable{    
  10.     // 玩家姓名    
  11.     private String name;    
  12.     // 玩家分数    
  13.     private int score;    
  14.         
  15.     public Gamer(String name, int score) {    
  16.         this.name = name;    
  17.         this.score = score;    
  18.     }    
  19.     public String getName() {    
  20.         return name;    
  21.     }    
  22.     public int getScore() {    
  23.         return score;    
  24.     }    
  25.     @Override    
  26.     public String toString() {    
  27.         return "Gamer [name=" + name + ", score=" + score + "]";    
  28.     }    
  29. }

  游戏窗口是一个Activity,将主题样式设置成Dialog即在清单文件中GameOver设置属性android:theme="@android:style/Theme.Dialog"。代码如下:

Java代码
  1. package cn.com.cyj.mouse.services;    
  2.     
  3. import android.content.Intent;    
  4. import android.os.Bundle;    
  5. import android.text.TextUtils;    
  6. import android.view.View;    
  7. import android.view.View.OnClickListener;    
  8. import android.widget.Button;    
  9. import android.widget.EditText;    
  10. import android.widget.TextView;    
  11. import android.widget.Toast;    
  12. import cn.com.cyj.mouse.R;    
  13. import cn.com.cyj.mouse.enity.Gamer;    
  14. import cn.com.cyj.mouse.ui.BaseActivity;    
  15. import cn.com.cyj.mouse.ui.MouseStart;    
  16. /**  
  17.  * 游戏结束窗口  
  18.  * @author cyj  
  19.  *  
  20.  */    
  21. public class GameOver extends BaseActivity {    
  22.     // 确定按钮    
  23.     Button confirm;    
  24.     // 取消按钮    
  25.     Button cancel;    
  26.     // 姓名输入框    
  27.     EditText name;    
  28.     // 显示分数    
  29.     TextView finalScore;    
  30.     Intent intent;    
  31.     // 玩家的分数    
  32.     int nowScore;    
  33.     @Override    
  34.     protected void onCreate(Bundle savedInstanceState) {    
  35.         super.onCreate(savedInstanceState);    
  36.         setContentView(R.layout.activity_gameover);    
  37.             
  38.         init();    
  39.         intent = getIntent();    
  40.         nowScore = Integer.parseInt(intent.getStringExtra("score"));    
  41.         // 显示分数    
  42.         finalScore.setText(nowScore+"");    
  43.         // 设置点击其他位置不关闭窗口 ,最低版本API11    
  44.         this.setFinishOnTouchOutside(false);      
  45.     }    
  46.     /**  
  47.      * 初始化组件  
  48.      */    
  49.     private void init() {    
  50.         confirm = (Button) findViewById(R.id.confirm);    
  51.         cancel = (Button) findViewById(R.id.cancel);    
  52.         name = (EditText) findViewById(R.id.name);    
  53.         finalScore =  (TextView) findViewById(R.id.finalscore);    
  54.         /**  
  55.          * 给按钮设置点击事件  
  56.          */    
  57.         confirm.setOnClickListener(new MyOnClick());    
  58.         cancel.setOnClickListener(new MyOnClick());    
  59.     }    
  60.     class MyOnClick implements OnClickListener{    
  61.         @Override    
  62.         public void onClick(View v) {    
  63.             int id = v.getId();    
  64.             switch (id) {    
  65.             case R.id.confirm:    
  66.                 // 判断输入内容是否为空    
  67.                 if(!TextUtils.isEmpty(name.getText().toString())){    
  68.                     Gamer gamer = new Gamer(name.getText().toString(), nowScore);    
  69.                     // 添加数据到数据库    
  70.                     MouseStart.controller.insert(gamer);    
  71.                     // 关闭窗口    
  72.                     finish();    
  73.                 }else{    
  74.                     Toast.makeText(GameOver.this"姓名不能为空", Toast.LENGTH_SHORT).show();    
  75.                 }    
  76.                 break;    
  77.             case R.id.cancel:    
  78.                 finish();    
  79.                 break;    
  80.             default:    
  81.                 break;    
  82.             }    
  83.                 
  84.         }    
  85.     }    
  86. }    

  数据库中存储玩家的姓名和分数,建立MouseSqlite类通过继承SQLiteOpenHelper来建立数据库和处理数据库升级等操作。

Java代码
  1. package cn.com.cyj.mouse.database;    
  2.     
  3. import android.content.Context;    
  4. import android.database.sqlite.SQLiteDatabase;    
  5. import android.database.sqlite.SQLiteOpenHelper;    
  6. /**  
  7.  * 玩家信息数据库的api  
  8.  * @author cyj  
  9.  *  
  10.  */    
  11. public class MouseSqlite extends SQLiteOpenHelper {    
  12.     
  13.     public MouseSqlite(Context context) {    
  14.         super(context, "gamer.db"null1);    
  15.             
  16.     }    
  17.     /**  
  18.      * 创建gamer.db表  
  19.      */    
  20.     @Override    
  21.     public void onCreate(SQLiteDatabase db) {    
  22.         db.execSQL("create table gamer (id integer primary key autoincrement, name varchar(20), score integer);");    
  23.     }    
  24.     
  25.     @Override    
  26.     public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {    
  27.     }    
  28. }    

  本游戏对数据库的操作主要有添加一条玩家信息和查询所有玩家信息,查询的时候按照分数从高到低排列。对数据库操作一定要关闭数据库。代码如下:

Java代码
  1. package cn.com.cyj.mouse.database;    
  2.     
  3. import java.util.ArrayList;    
  4.     
  5. import android.content.ContentValues;    
  6. import android.content.Context;    
  7. import android.database.Cursor;    
  8. import android.database.sqlite.SQLiteDatabase;    
  9. import cn.com.cyj.mouse.enity.Gamer;    
  10. /**  
  11.  * 对gamer表进行操作,数据库使用完毕必须关闭  
  12.  * @author cyj  
  13.  *  
  14.  */    
  15. public class GamerDatabase {    
  16.         
  17.     MouseSqlite mouseSqlite;    
  18.     SQLiteDatabase db;    
  19.     // 所有玩家信息    
  20.     ArrayList<Gamer> gamerList;    
  21.     public GamerDatabase(Context context) {    
  22.         mouseSqlite = new MouseSqlite(context);    
  23.     }    
  24.     /**  
  25.      *  插入一条数据  
  26.      * @param gamer 玩家信息  
  27.      * @return  
  28.      */    
  29.     public Boolean insertGamer(Gamer gamer){    
  30.         // 获得可写数据库    
  31.         db = mouseSqlite.getWritableDatabase();    
  32.         // 用于保存玩家信息到数据库    
  33.         ContentValues values = new ContentValues();    
  34.         String name = gamer.getName();    
  35.         int score = gamer.getScore();    
  36.         values.put("name", name);    
  37.         values.put("score", score);    
  38.         // 插入数据到数据库    
  39.         long res = db.insert("gamer"null, values);    
  40.         // 关闭数据库    
  41.         db.close();    
  42.         if(res != -1)    
  43.             return true;    
  44.         return false;    
  45.     }    
  46.     /**  
  47.      * 查询所有数据  
  48.      * @return 所有玩家信息  
  49.      */    
  50.     public ArrayList<Gamer> queryGamerAll(){    
  51.         // 获得可读数据库    
  52.         db = mouseSqlite.getReadableDatabase();    
  53.         gamerList = new ArrayList<Gamer>();    
  54.         // 查询所有玩家信息,按分数从高到低排序    
  55.         Cursor cursor = db.query("gamer"nullnullnullnullnull"score desc");    
  56.         while(cursor.moveToNext()){    
  57.             // 获得当前游标所指向数据的姓名    
  58.             String name = cursor.getString(cursor.getColumnIndex("name"));    
  59.             // 获得当前游标所指向数据的分数    
  60.             int score = cursor.getInt(cursor.getColumnIndex("score"));    
  61.             Gamer gamer = new Gamer(name, score);    
  62.             // 添加到集合里    
  63.             gamerList.add(gamer);    
  64.         }    
  65.         // 关闭数据库    
  66.         db.close();    
  67.         return gamerList;    
  68.     }    
  69. }
本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/game/653.html
2017年2月22日
发布:鸡啄米 分类:Android游戏开发 浏览: 评论:1