? 這個第四個實例,我只是單純的把j2me的代碼換成android的,所以屏幕的大小的適應(yīng)性和好不好看,我都沒有考慮。
下面給出第四個實例的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; //記錄當(dāng)前行 public int m_anDis[] = { 0,1,2,3,4 }; public boolean m_bGameOK = false; //組合成功的標志 public MainView(Context context) { super(context); // TODO Auto-generated constructor stub setFocusable(true); getHolder().addCallback(this); holder = this.getHolder(); } @Override public void run() { // TODO Auto-generated method stub while(isGame) { input(); logic(); doDraw(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.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 block e.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); //設(shè)置畫筆顏色 Paint cPaint = new Paint(); //顯示字符 //realCol為所顯示的字符在原始矩陣中的列數(shù) int realCol = 0; //row為行數(shù),col為列數(shù) for( int row = 0; row < 5; row ++ ){ if( row == m_nCurLine ) //當(dāng)前行的字符用黃色顯示 cPaint.setColor(Color.YELLOW); else cPaint.setColor(Color.WHITE); //非當(dāng)前行的字符用白色顯示 for( int col = 0; col < 5; col ++ ){ //利用偏位數(shù)得到與當(dāng)前位置對應(yīng)的原始矩陣中的位置 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); else canvas.drawText("左右移動字符,使縱向拼寫正確", 40, 120, cPaint); } @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(); } public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if( m_bGameOK ) return true; //得到當(dāng)前按鍵狀態(tài) //如果按下方向鍵的上鍵,則調(diào)整當(dāng)前行的位置 if( keyCode == KeyEvent.KEYCODE_DPAD_UP ) m_nCurLine --; //如果按下方向鍵的下鍵,則調(diào)整當(dāng)前行的位置 if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) m_nCurLine ++; //調(diào)整當(dāng)前行的值,使它在0到4之間 if( m_nCurLine < 0 ) m_nCurLine += 5; if( m_nCurLine > 4) m_nCurLine -= 5; //如果按下方向鍵的左鍵,則當(dāng)前行的字符左移 if( keyCode == KeyEvent.KEYCODE_DPAD_LEFT) m_anDis[m_nCurLine] ++; //如果按下方向鍵的右鍵,則當(dāng)前行的字符右移 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
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
