⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvasobj.java

📁 包内有打鼹鼠手机游戏的源代码
💻 JAVA
字号:
package tilelayer;

import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.*;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;

public class GameCanvasOBJ extends GameCanvas implements Runnable {

    TileLayerTest MIDletObj;

    Thread thread; //, thread1;
    Random RandomObj = new Random();
    boolean HitSign = true; //判断击中
    boolean PauseSign = false; //判断暂停
    boolean GameOver = false; //判断游戏结束
    int GameGread = 10;
    int GameMark = 20;
    int[] myAnimatedTileIndex = {0, 0, 0, 0, 0, 0, 0, 0, 0};
    final int S_WIDTH = getWidth(); //屏幕宽
    final int S_HEIGHT = getHeight(); //屏幕高

    /*
     * 地图信息
     */
    final int MAP_TOTALWIDTH = 280; //总地图宽
    final int MAP_WIDTH = 70; //单位地图宽
    final int MAP_HEIGHT = 58; //单位地图高

    int map_x = 0;//(S_WIDTH - 210) / 2; //地图相对x坐标
    int map_y = 0;//(S_HEIGHT - 174) / 2;
    //int map_step = 40; //地图相对移动x坐标
    int Index = 0;
    LayerManager layerMan; //图层管理
    TiledLayer map_layer; //地图图层
    Image map_img; //地图对象
    static final int[] FRAME_SEQUENCE = {2, 1};
    static final int[] FRAME_SEQUENCE1 = {3, 1};
    static final int[] FRAME_SEQUENCE2 = {4, 1};
    public GameCanvasOBJ(boolean suppressKeyEvents) {
        super(suppressKeyEvents);
        //System.out.println(Integer.toString(S_HEIGHT));
        //this.setTitle("分数:0  等级:10");
        this.setTitle("分数:" + Integer.toString(GameMark) + "等级:" +
                      Integer.toString(GameGread));
        final int MAP_ROW = 3; //地图行
        final int MAP_COL = 3; //地图列
        try {
            map_img = Image.createImage("/res/A.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
        layerMan = new LayerManager();
        map_layer = new TiledLayer(MAP_COL, MAP_ROW, map_img, MAP_WIDTH,
                                   MAP_HEIGHT); //切割背景地图
        for (int i = 0; i < 9; i++) {
            myAnimatedTileIndex[i] = map_layer.createAnimatedTile(1);
        }

        int IndexObj = 0;
        for (int i = 0; i < MAP_ROW; i++) {
            for (int j = 0; j < (MAP_COL); j++) {
                map_layer.setCell(j, i, myAnimatedTileIndex[IndexObj]);
                IndexObj++;
            }
        }

        layerMan.append(map_layer);

        thread = new Thread(this);
        thread.start();

        // thread1 = new Thread(this);
        // thread1.start();
        /// drawMap();
    }

    private void drawMap() {
        Graphics g = getGraphics();
        Index = RandomObj.nextInt(9);
        for (int x = 0; x < 2; x++) {
            map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
                                      FRAME_SEQUENCE[x]);
            layerMan.paint(g, map_x, map_y);
            flushGraphics();

            if (x == 0) {
                try {
                    thread.sleep(GameGread * 100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        if ((GameMark - 20) >= (11 - GameGread) * 5) {
            GameGread--;
        } else if (GameMark <= 0) {
            GameOver = true;
            this.setTicker(new Ticker("Game over"));
            ChangeCommand();
        }

        GameMark--;
        this.setTitle("分数:" + Integer.toString(GameMark) + "等级:" +
                      Integer.toString(GameGread));
    }

    private void drawError(int Index) {
        Graphics g = getGraphics();
        // System.out.println(Integer.toString(Index));
//map_layer.setCell(Index, Index, map[Index][Index]);
        for (int x = 0; x < 2; x++) {
            map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
                                      FRAME_SEQUENCE2[x]);
            layerMan.paint(g, map_x, map_y);
            flushGraphics();
            if (x == 0) {
                try {
                    thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    private void drawhit() {
        Graphics g = getGraphics();
        for (int x = 0; x < 2; x++) {
            map_layer.setAnimatedTile(myAnimatedTileIndex[Index],
                                      FRAME_SEQUENCE1[x]);
            layerMan.paint(g, map_x, map_y);
            flushGraphics();
            if (x == 0) {
                try {
                    thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                HitSign = true;
            }
        }
    }

    private void updata() {
        // map_x -= map_step;
        // map_x = map_x % MAP_TOTALWIDTH;
        drawMap();
    }

    public void run() {
        if (Thread.currentThread() == thread) {
            while (true) {
                if (!PauseSign && !GameOver) { //非暂停或者输了
                    if (HitSign) {
                        updata();
                        /*try {
                            Thread.sleep(20);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }*/
                    } else if (!HitSign) {
                        drawhit();
                    }
                }
            }
        }
    }

    public void keyPressed(int keyCode) {
        //int keystates = getGameAction(keyCode);
        //Graphics g = getGraphics();
        //System.out.println(Integer.toString(keyCode));
        if (keyCode == (Index + 49) && HitSign) {
            //System.out.println("press" + Integer.toString(keyCode));
            GameMark += 2;
            HitSign = false;
        } else if (keyCode == KEY_STAR) {
            UpGread();
            //System.out.println("press" + Integer.toString(keyCode));
        } else if (keyCode == KEY_POUND) {
            ReduceGread();
            //System.out.println("press dowm");
        } else if (keyCode >= KEY_NUM1 && keyCode <= KEY_NUM9) {
            drawError(keyCode - KEY_NUM1);
        }
        //this.setTitle("分数:" +Integer.toString(GameMark)+  "等级:"+Integer.toString(GameGread));

    }

    public void UpGread() {
        GameGread--;
        if (GameGread <= 0) {
            GameGread = 1;
        }
    }

    public void ReduceGread() {
        GameGread++;
        if (GameGread >= 10) {
            GameGread = 10;
        }
    }

    public void GamePause() {
        PauseSign = !PauseSign;
    }

    public void GetMiDletObj(TileLayerTest MIDletobj) {
        MIDletObj = MIDletobj;
    }

    public void ChangeCommand() {
        MIDletObj.ChangeCommand();
    }

    public void RestartGame() {
        GameGread = 10;
        GameMark = 20;
        GameOver = false;
         this.setTicker(null);
    }

    public void GoonGame() {
        GameMark = 20;
        GameOver = false;
         this.setTicker(null);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -