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

2017/9/18 17:45:01 人评论 次浏览 分类:游戏开发

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

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游戏引擎andengine学习系列二简单的例子

    如何高效的学习,这才是我们最值得去学习的。 首先导入架包,下载:http://download.csdn.net/detail/duancanmeng/4060082 lib文件夹中像我们写Android程序entends Activity一样,我们一开始也要extends BaseGameActivity,而且实现四个必须被重载函数:[java] view plain co…

    2016/10/9 14:05:05
  • AndEngine游戏开发系列教程

    链接地址:http://www.apkbus.com/android-130403-1-1.html一、简介AndEngine基于libGDX框架开发,使用OpenGL ES进行图形绘制,底层使用C++编写,通过JNI调用来实现,因此比较高效,功能强大。同时集成了Box2D物理引擎,因此能实现一些较为复杂的物理效果。在Rokon(另一个Android …

    2016/10/9 13:59:41
  • 移植cocos2dAndroid包框架设计

    随着android平台的推广和android手机的大量推出,有人预言android将是一个嵌入式的统一平台。果真如此吗?Apple,Microsoft, nokia不会坐视不管的,在想想unix各种混乱的版本,总让人忧心忡忡。不过有google这位大神做东,至少在短期内,android会很稳定,市场会有一席之地。目…

    2016/10/7 12:53:02

共有访客发表了评论 网友评论

验证码: 看不清楚?