`
一口三个汉堡
  • 浏览: 115308 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

实例13---点击速度测试机

阅读更多

  在原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

  • 大小: 2.6 KB
  • 大小: 2.6 KB
0
0
分享到:
评论

相关推荐

    QTP飞机订票测试实例.pdf

    - **执行速度**:相比于人工测试,QTP能够更快地执行测试。 - **可靠性**:每次执行相同的操作时都能保持一致性和准确性,避免人为错误。 - **可重复性**:同一套测试脚本可以在不同的测试周期中多次运行。 - **可...

    联众识别V2-手机按键-实例.rar

    例如,手机游戏自动点击器就需要类似的技术来识别并模拟点击操作;另外,在手机界面的UI测试中,自动识别按键能大幅提升测试效率,减少人工介入。 总之,联众识别V2-手机按键实例展示了图像识别技术在移动设备领域...

    Python游戏源码实例-开心消消乐.zip

    在本资源"Python游戏源码实例-开心消消乐.zip"中,我们主要探讨的是使用Python编程语言进行游戏开发,特别是针对"开心消消乐"这款游戏的实现。Python以其简洁明了的语法和丰富的库支持,成为了初学者和专业开发者...

    微信小程序项目实例-别踩白块

    “别踩白块”是一款简单而富有挑战性的游戏,它包含无尽模式、计时模式和急速模式三种玩法,旨在测试玩家的反应速度和手眼协调能力。游戏中,用户需点击屏幕上不断移动的黑色方块,一旦误触白色的方块,游戏即宣告...

    微信小程序项目实例-二维码生成器

    本项目实例——“二维码生成器”是基于微信小程序平台实现的一个实用工具,允许用户快速生成和读取二维码。 在微信小程序中,二维码生成器的实现涉及到几个关键的技术点: 1. **数据编码**:二维码生成器首先需要...

    OpenStack web界面使用ISO镜像安装启动实例

    在Horizon的“计算”或“实例”页面,点击“创建实例”。在“源”选项中,选择你刚才创建的ISO镜像。设置实例的名称、Flavor和其他配置,如安全组规则。然后,点击“创建服务器”以启动实例。 启动实例后,...

    vc++ 开发实例源码包

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    Quest3D 2个动画相机切换实例

    此外,还可以通过运行实例来测试交互性,确保相机切换的流畅性和响应性。 这个实例对学习Quest3D的动画相机控制、用户交互和3D场景构建非常有帮助。它展示了如何将多种元素整合到一个交互式3D项目中,包括相机动画...

    U盘测试 虚拟机用

    在IT行业中,虚拟机是一种非常重要的技术,它允许我们在一台物理计算机上运行多个独立的操作系统实例,每个实例都像一个独立的计算机一样工作。虚拟机的使用极大地提高了资源利用率,简化了软件测试和开发环境的搭建...

    IBM portel 主题实例

    7. **测试与调试**:在开发过程中,不断进行测试以确保所有功能正常运行,同时解决可能出现的样式冲突和功能问题。 通过这个"ET20 new 1104"主题实例,初级portlet开发人员可以逐步掌握IBM Portlet主题开发的核心...

    MMI实例傅贵培训教程

    【MMI实例傅贵培训教程】是一份专为开发者设计的深入解析MMI(Man-Machine Interface,人机交互界面)开发的专业教程。MMI在IT行业中扮演着至关重要的角色,因为它涉及到用户与设备之间的交互体验,是产品易用性和...

    Android高级应用源码-手机拍照.zip

    - **配置Camera2**:需要创建`CameraManager`实例来获取相机列表,并选择一个合适的设备。 - **创建CameraDevice**:通过`CameraManager.openCamera()`方法打开相机设备。 - **设置预览流**:创建`Surface`对象,...

    android 锁屏 九宫格 实例项目

    注释可以帮助理解代码的功能和实现思路,加快学习速度。 9. **分享与开源** - 开发者分享了这个项目,意味着其他开发者可以学习、修改和再利用。开源社区如GitHub是很好的平台,可以让开发者互相交流,共同进步。 ...

    利用Proteus的仿真实例

    总结,Proteus仿真实例是电子学习和设计的重要工具,通过它,我们可以无需物理硬件就能进行电路设计和测试,降低了实验成本,提高了学习效率。熟练掌握Proteus的使用,无论是对初学者还是专业工程师,都将极大地提升...

    cpp-使用STM32CubeMX的一个实例包含了USBCDC串口FreeRTOS等

    在本文中,我们将深入探讨如何使用STM32CubeMX创建一个包含USB CDC串口和FreeRTOS的项目实例。STM32CubeMX是一款强大的图形配置工具,由STMicroelectronics开发,用于初始化和配置STM32微控制器。这个实例将帮助...

    飞机大战-python 实现.rar

    《飞机大战-Python实现》是一款基于Python编程语言开发的经典游戏,它通过实例展示了对象导向编程的概念,让初学者能够深入理解面向对象编程的基本原理。在这个项目中,开发者使用了Pygame模块,这是一个Python库,...

Global site tag (gtag.js) - Google Analytics