在原java me中通过这个例子是想要讲解RecordStore的使用,我在用了另外一种方式来实现同样的效果,就是用SharedPreferences, 然后用触屏点击事件替换了按键点击事件。
下面给出小效果图和源代码:
MainView
package com.wjh.demon_13;
import com.wjh.midp_me.AndroidSprite;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.Log;
import android.util.MonthDisplayHelper;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class MainView extends SurfaceView implements Callback,Runnable{
int keyCode = 0;
String keyAction = "";
Thread gameThread = null;
boolean isGame = true;
SurfaceHolder holder = null;
Paint backPaint = null;
Paint forePaint = null;
//具体游戏相关
public AndroidSprite m_spButton; //按钮对象
public RMSScore m_Score; //记录对象
public int m_nTimes = 0; //管理时间
public Typeface m_Font;
public MainView(Context context) {
super(context);
// TODO Auto-generated constructor stub
setFocusable(true);
getHolder().addCallback(this);
holder = this.getHolder();
backPaint = new Paint();
backPaint.setColor(Color.BLACK);
forePaint = new Paint();
m_Score = new RMSScore(context); //分配内存空间
m_Score.LoadHighScore(); //读取最高分
m_Font = Typeface.MONOSPACE;
forePaint = new Paint();
forePaint.setTypeface(m_Font);
forePaint.setTextSize(20);
forePaint.setColor(Color.WHITE);
backPaint = new Paint();
backPaint.setColor(Color.BLACK);
Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.button);
m_spButton = new AndroidSprite(bitmap, 25, 25 );
m_spButton.setFrame( 0 );
}
public void StartTime(){ //开始计时
m_nTimes = 600; //600*100=60000毫秒=1分钟
m_Score.m_nCurScore = 0;
}
@Override
public void run() {
//获取系统当前时间,并将时间换算成以毫秒为单位的数
long T1 = System.currentTimeMillis();
long T2 = T1;
while(isGame){
T2 = System.currentTimeMillis();
if( T2 - T1 > 100 ){ //间隔100毫秒
T1 = T2;
input();
logic();
doDraw();
}
}
}
//开始游戏主线程
public void start()
{
m_spButton.setPosition( getWidth()/2 - 12, 90 );
if(gameThread == null)
{
gameThread = new Thread(this);
gameThread.start();
}
}
//停止游戏主线程
public void stop()
{
isGame = false;
if(gameThread != null)
{
try {
gameThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//输入判断
public void input()
{
}
//逻辑判断
public void logic()
{
if( m_nTimes > 0 ){ //计时
m_nTimes --;
if( m_nTimes <= 0 ){ //结束游戏
m_Score.SaveHighScore();
}
}
}
public void doDraw()
{
Canvas c = null;
try
{
c = holder.lockCanvas();
synchronized (holder) {
paint(c);
}
}finally{
if(c != null)
{
holder.unlockCanvasAndPost(c);
}
}
}
//画图
public void paint(Canvas canvas)
{
//用黑色清屏
canvas.drawRect(0, 0, getWidth(), getHeight(), backPaint);
//设置当前颜色及当前字体
StringBuffer temp = new StringBuffer();
StringBuffer temp2 = new StringBuffer();
StringBuffer temp3 = new StringBuffer();
//拼接字符
temp2.append( "最高分:" );
temp2.append( m_Score.m_nHighScore );
temp3.append( "本次得分:" );
temp3.append( m_Score.m_nCurScore );
if( m_nTimes <= 0 )
temp.append( "滑动开始" );
else{
temp.append( "剩余时间" );
temp.append( m_nTimes / 10 );
temp.append( "秒" );
}
//显示文字信息
canvas.drawText(temp.toString(), 20, 30,forePaint);
canvas.drawText( temp2.toString(), 20, 50, forePaint );
canvas.drawText( temp3.toString(), 20, 70, forePaint );
//显示按钮
m_spButton.paint(canvas,forePaint);
m_spButton.setFrame( 0 );
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
stop();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
Log.d("ddd", ""+m_Score.m_nCurScore);
if( m_nTimes <= 0 &&event.getAction() == MotionEvent.ACTION_DOWN){ //计时尚未开始
StartTime();
return false;
}
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
m_Score.m_nCurScore ++; //增加分数
m_spButton.setFrame( 1 );
return true;
}else
{
return false;
}
}
}
RMSSCore.java
package com.wjh.demon_13;
import android.content.Context;
import android.content.SharedPreferences;
public class RMSScore {
public int m_nHighScore = 0; // 历史最高分
public int m_nCurScore = 0;// 当前得分
private SharedPreferences sharedPreferences = null;
public RMSScore(Context context)
{
sharedPreferences = context.getSharedPreferences("RsScore", Context.MODE_PRIVATE);
}
/********* 利用RMS系统存储最高得分 ************/
public void SaveHighScore() {
if (m_nCurScore <= m_nHighScore) // 如果本次得分低于历史最高分
{
return;
}// 直接返回
m_nHighScore = m_nCurScore; // 刷新记录
// 打开SharedPreferences,没有则新建
this.sharedPreferences.edit().putInt("highScore", m_nHighScore).commit(); // 更改第一条记录
}
/********* 利用RMS系统读取最高得分 ************/
public void LoadHighScore() {
m_nHighScore = this.sharedPreferences.getInt("highScore", -1);
}
}
apk文件(将后缀改为apk):Demon_13.zip
源代码文件:Demon_13.rar