`
一口三个汉堡
  • 浏览: 112912 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    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 锁屏 九宫格 实例项目

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

    利用Proteus的仿真实例

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

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

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

    飞机大战-python 实现.rar

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

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时...

    网络监测实例

    3G,全称为第三代移动通信技术,是移动通信的一个阶段,提供比2G更高的数据传输速度,支持语音、数据和多媒体服务。 2. **Android网络权限**: 在Android上进行网络监测,首先需要在`AndroidManifest.xml`文件中...

    转盘抽奖实例

    本实例主要关注的是如何实现一个功能完善的幸运转盘抽奖系统,该系统已经经过测试并确认正常运行。下面我们将详细探讨这个系统可能涉及的关键知识点。 1. **前端技术**:转盘抽奖通常由前端实现,使用HTML、CSS和...

    WAP建站技术详解与实例(PDG)

    **WAP建站技术详解与实例** WAP(Wireless Application Protocol)建站技术是针对无线通信设备,如早期的手机和平板电脑,提供的一种网页访问标准。它使得用户可以通过移动设备浏览网页、获取信息,甚至进行交互...

    易语言程序免安装版下载

    修改文本语音转换支持库,增加“机读文本.重新创建并初始化()”方法。 8. 修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。 9. 修改...

    行业文档-设计装置-一种伸缩式触摸笔疲劳测试装置.zip

    8. **电子控制**:测试装置可能包含电子控制系统,用于自动控制测试过程,如设置点击速度、间隔时间等,并实时监控和记录测试数据。 9. **用户体验**:测试不仅关注设备的物理耐久性,还应考虑用户在长时间使用下的...

    selenium 自动化测试

    Node需要配置相应的浏览器环境,并注册到Hub,这样就可以在多个浏览器实例上并行执行测试,极大地提高了测试效率。 以下是一些使用Selenium自动化测试的关键知识点: 1. **元素定位**:Selenium 提供了多种方法来...

Global site tag (gtag.js) - Google Analytics