这个第四个实例,我只是单纯的把j2me的代码换成android的,所以屏幕的大小的适应性和好不好看,我都没有考虑。

下面给出第四个实例的MainView的代码

效果图:



package com.wjh.demon_4;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;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;public char m_achWords[][] = //存储原始字符矩阵{{'H','R','T','W','T'},{'E','I','H','O','H'},{'L','G','I','R','R'},{'L','H','N','L','E'},{'O','T','G','D','E'} };public int m_nCurLine= 0;//记录当前行public int m_anDis[] = { 0,1,2,3,4 };public boolean m_bGameOK = false;//组合成功的标志public MainView(Context context) {super(context);// TODO Auto-generated constructor stubsetFocusable(true);getHolder().addCallback(this);holder = this.getHolder();}@Overridepublic void run() {// TODO Auto-generated method stubwhile(isGame){input();logic();doDraw();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//开始游戏主线程public void start(){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 blocke.printStackTrace();}}}//输入判断public void input(){}//逻辑判断public void logic(){if( m_bGameOK )return;m_bGameOK = true;for( int n = 0; n < 5; n ++ ){if( m_anDis[n] != 0 ){m_bGameOK = false;break;}}}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){Paint backGround = new Paint();backGround.setColor(Color.BLACK);//清屏canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);//设置画笔颜色Paint cPaint = new Paint();//显示字符//realCol为所显示的字符在原始矩阵中的列数int realCol = 0;//row为行数,col为列数for( int row = 0; row < 5; row ++ ){if( row == m_nCurLine )//当前行的字符用黄色显示cPaint.setColor(Color.YELLOW);elsecPaint.setColor(Color.WHITE); //非当前行的字符用白色显示for( int col = 0; col < 5; col ++ ){//利用偏位数得到与当前位置对应的原始矩阵中的位置realCol = m_anDis[row] + col; if( realCol > 4 )realCol = realCol - 5;canvas.drawText(""+m_achWords[row][realCol], 30 + col * 15, 30+row * 15, cPaint);}}cPaint.setColor(Color.WHITE);if( m_bGameOK )canvas.drawText("真棒,完全正确", 50, 120, cPaint);elsecanvas.drawText("左右移动字符,使纵向拼写正确", 40, 120, cPaint);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubstart();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}public boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif( m_bGameOK )return true;//得到当前按键状态//如果按下方向键的上键,则调整当前行的位置if( keyCode == KeyEvent.KEYCODE_DPAD_UP )m_nCurLine --; //如果按下方向键的下键,则调整当前行的位置if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN)m_nCurLine ++;//调整当前行的值,使它在0到4之间if( m_nCurLine < 0 )m_nCurLine += 5;if( m_nCurLine > 4) m_nCurLine -= 5;//如果按下方向键的左键,则当前行的字符左移if( keyCode == KeyEvent.KEYCODE_DPAD_LEFT)m_anDis[m_nCurLine] ++;//如果按下方向键的右键,则当前行的字符右移        if( keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)        m_anDis[m_nCurLine] --;                if( m_anDis[m_nCurLine] < 0 )        m_anDis[m_nCurLine] += 5;        if( m_anDis[m_nCurLine] > 4 )        m_anDis[m_nCurLine] -= 5;        return super.onKeyDown(keyCode, event);}}

apk文件(将后缀改为apk):Demon_4.zip

源代码文件:Demon_4.rar

更多相关文章

  1. android中BaseActivity的公共方法
  2. Android(安卓)error 处理-有空就更新
  3. android XML转义字符
  4. Android报错解决 UIL doesn't support scheme(protocol) by defa
  5. TextUtils
  6. AutoCompleteTextView 无限制输入字符及获得焦点时显示
  7. Android字符串资源
  8. Android(安卓)实现TextView字符串关键字变色
  9. android—OpenGL—GL10方法解析

随机推荐

  1. Android(安卓)- Intent基础
  2. 关于android WebViewClient和WebChromeCl
  3. 在SQLite数据库中获取新插入数据自增长的
  4. [android]转发andorid基础知识
  5. Android(安卓)JNI和NDK学习(09)--JNI实例
  6. Android中浏览器UA的生成策略
  7. Python+Android进行TensorFlow开发
  8. Android(安卓)App监听软键盘按键的方式与
  9. 重温Android——调节屏幕亮度
  10. Ubuntu操作系统配置阿里云镜像方法一