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

📄 main.java~2~

📁 J2ME手机游戏紫色精灵的源代码及资源文件
💻 JAVA~2~
📖 第 1 页 / 共 4 页
字号:
            RecordStore recordStore = RecordStore.openRecordStore("JDweep",
                    true);
            int num = recordStore.getNumRecords();
            if (num < 1) {
                record = new byte[4];
                recordStore.addRecord(record, 0, record.length);
            } else {
                record = recordStore.getRecord(1);
            }
            recordStore.closeRecordStore();
            System.gc();

        } catch (Exception e) {
        }
    }

    /**
     * 当游戏画布显示到屏幕时就开始线程
     */
    protected void showNotify() {
        thread = new Thread(this);
        thread.start();
        playSound(nowPlayer, 1);
   }

    /**
     * 画布离开屏幕时停止线程
     */
    protected void hideNotify() {
        thread = null;
    }


    protected void keyPressed(int keyCode) {
        keyPressed = keyCode >= GameCanvas.KEY_STAR ? keyCode
                : getGameAction(keyCode);
    }

    /**
     * 线程执行体
     */
    public void run() {
        //画布
        Graphics g = getGraphics();
        int screenWidth = g.getClipWidth();
        int screenHeight = g.getClipHeight();

        while (thread == Thread.currentThread()) {
            try {
                //延时
                Thread.sleep(MainMIDlet.gameLoop);
                incr = (incr + 1)%8;
                //清屏
                if (status != STATUS_MISSION_RUNNING) {
                    g.setColor(0x00E6EFF8);
                    g.fillRect(0, 0, screenWidth, screenHeight);
                }

                //得到最新的按键信息,如果一个游戏循环中用户按了多个键以最新的一次为准.
                //注意,此处可能发生以下意外情况
                //int lastKeyPressed = keyPressed;执行完以后,用户又按了一次键,keyPressed被执行,接下来
                //执行keyPressed = -1;会造成此次击键信息的丢失.
                //可以通过加锁来解决,但加锁对性能有影响
                int lastKeyPressed = keyPressed;
                keyPressed = 0;
                //绘制不同状态时的画面
                switch (status) {
                case STATUS_MAINMENU:
                        // 处理按键
                    int menuCount = (missionStatus == MISSION_RUNNING) ? 5 : 4;
                    int menuS = 5 - menuCount;
                    switch (lastKeyPressed) {
                    case GameCanvas.DOWN:
                        mainMenuIndex = (mainMenuIndex + 1) % menuCount;
                        break;
                    case GameCanvas.UP:
                        mainMenuIndex = (mainMenuIndex - 1 + menuCount) % menuCount;
                        break;
                    case GameCanvas.FIRE:
                        Image selectedImage = mainMenuItems[mainMenuIndex + menuS];
                        if (selectedImage == word_start)
                            status = STATUS_MISSION_SELECTING;
                        else if (selectedImage == word_continue)
                            status = STATUS_MISSION_RUNNING;
                        else if (selectedImage == word_setting)
                            MainMIDlet.showSetting();
                        else if (selectedImage == word_about)
                            status = STATUS_ABOUT;
                        else if (selectedImage == word_quit)
                            MainMIDlet.quitApp();
                        break;
                    }

                        // 绘制LOGO
                    g.drawImage(image_logo, 28, 32, 20);
                    // 绘制菜单项
                    for (int i = menuS; i < mainMenuItems.length; i ++)
                        g.drawImage(mainMenuItems[i], 75, 100 + (i - menuS)* 14, 20);
                    // 绘制光标
                    if (incr <= 3)
                        g.drawImage(image_arrow, 60, 102 + mainMenuIndex * 14, 20);

                    break;
                case STATUS_MISSION_SELECTING:
                        //处理按键
                    switch(lastKeyPressed) {
                    case GameCanvas.RIGHT:
                        if (missionPageNum < missionCount / 10) {
                                                missionPageNum++;
                                                missionSelectedIndex = missionPageNum * 10;
                        }
                        break;
                    case GameCanvas.LEFT:
                                        if (missionPageNum > 0) {
                                                missionPageNum--;
                                                missionSelectedIndex = missionPageNum * 10;
                                        }
                        break;
                    case GameCanvas.UP:
                        if (missionSelectedIndex > 0) {
                            missionSelectedIndex--;
                            missionPageNum = missionSelectedIndex / 10;
                        }
                        break;
                    case GameCanvas.DOWN:
                        if (missionCount - 1 > missionSelectedIndex) {
                            missionSelectedIndex++;
                            missionPageNum = missionSelectedIndex / 10;
                        }
                        break;
                    case GameCanvas.FIRE:
                        loadMission(missionSelectedIndex);
                        status = STATUS_MISSION_RUNNING;
                        break;
                    }

                        //绘制画面
                    for (int i = 0; i < 10; i ++) {
                        int curNum = missionPageNum * 10 + i;
                        if (curNum >= missionCount)
                                break;
                        int y = 32 + i * 14;
                        int disno = curNum + 1;
                        g.drawImage(word_mission, 66, y, 20);
                        g.drawImage(word_numbers[disno / 10], 92, y, 20);
                        g.drawImage(word_numbers[disno % 10], 105, y, 20);

                        //假如该任务完成过就显示一个奖杯
                        if ((record[curNum / 8] & (0x01 << curNum % 8)) != 0)
                            g.drawImage(image_cup, 118, y, 20);

                    }

                    if (incr <= 3)
                        g.drawImage(image_arrow, 52, 32 + missionSelectedIndex % 10 * 14, 20);
                    break;
                case STATUS_ABOUT:
                    if(lastKeyPressed != 0)
                        status = STATUS_MAINMENU;
                    g.setColor(0x000000);
                    for (int i = 0; i < about.length; i++)
                        g.drawString(about[i], 2, i*font.getHeight() + 1, 20);

                        break;
                case STATUS_MISSION_RUNNING:

                    // 处理按键
                    if (subMenuVisible) {
                        int size = subMenuItems.length;
                        switch(lastKeyPressed) {
                        case GameCanvas.UP:
                            subMenuIndex = (--subMenuIndex + size) % size;
                            break;
                        case  GameCanvas.DOWN:
                            subMenuIndex = ++subMenuIndex % size;
                            break;
                        case GameCanvas.FIRE:
                            Image item = subMenuItems[subMenuIndex];
                            subMenuVisible = false;
                            if (item == word_mainMenu) {
                                status = STATUS_MAINMENU;
                                continue;
                            } else if (item == word_nextMission)
                                loadMission(missionNum + 1);
                            else if (item == word_retry)
                                reload();
                            break;
                        }
                    } else {
                        switch (lastKeyPressed) {
                        case GameCanvas.LEFT:
                            cursorColumn = (--cursorColumn + 10) % 10;
                            break;
                        case GameCanvas.RIGHT:
                            cursorColumn = ++cursorColumn % 10;
                            break;
                        case GameCanvas.UP:
                            cursorRow = (--cursorRow + 12) % 12;
                            break;
                        case GameCanvas.DOWN:
                            cursorRow = ++cursorRow % 12;
                            break;
                        case GameCanvas.KEY_STAR:
                            showMenu();
                            break;
                        case GameCanvas.KEY_NUM0:
                            selectedToolIndex = -1;
                            break;
                        case GameCanvas.FIRE:
                            // 没有工具时,则可以移动dweep
                            // 有工具选时,如果dweep在光标处,如果对dweep应用工具,否则对光标处的物体应用工具,
                            // 如果也不存在物体,且选中的工具为炸弹,风扇等物体时,就新建一个物体到地图上。
                            if (selectedToolIndex == -1) {
                                if (canCross(cursorRow, cursorColumn))
                                    dweep.setPath(cursorRow, cursorColumn);
                            } else {
                                int toolType = tools[selectedToolIndex];
                                Stuff stuff = stuffs[cursorRow][cursorColumn];
                                int dweepX = dweep.getRefPixelX();
                                int dweepY = dweep.getRefPixelY();

                                //判断Dweep是不是处于光标之下
                                int cursorX = cursorColumn << 4;
                                int cursorY = cursorRow << 4;
                                if (dweepX > cursorX - 8
                                        && dweepX < cursorX + 8
                                        && dweepY > cursorY - 8
                                        && dweepY < cursorY + 8
                                        && stuff == null) {

                                    if (dweep.apply(toolType)) {
                                        removeSelectedTool();
                                    }

                                } else if (stuff != null) {
                                    if (stuff.apply(toolType)) {
                                        removeSelectedTool();
                                    }
                                } else if (toolType >= TOOL_BOMB && base[cursorRow][cursorColumn] == 0) {
                                    stuff = new Stuff(toolType + 16, cursorRow,
                                            cursorColumn);
                                    stuffs[cursorRow][cursorColumn] = stuff;
                                    removeSelectedTool();
                                }
                            }
                            break;
                        default:
                            int i = lastKeyPressed - GameCanvas.KEY_NUM1;
                            if (i >= 0 && i <= 9 && tools[i] != 0)
                                    selectedToolIndex = i;
                        }
                    }

                    // ***绘制地图***//
                    iceFloor.nextFrame();
                    hotFloor.nextFrame();
                    targetFloor.nextFrame();
                    for (int i = 0; i < 12; i++) {
                        for (int j = 0; j < 10; j++) {
                            int type = base[i][j];
                            int x = j * 16;
                            int y = i * 16;
                            switch (type) {
                            case 0:
                                g.drawImage(image_floors[floor], x, y, 20);
                                break;
                            case FLOOR_HOT:
                                hotFloor.setPosition(x,y);
                                hotFloor.paint(g);
                                break;
                            case FLOOR_ICE:
                                iceFloor.setPosition(x,y);
                                iceFloor.paint(g);
                                break;
                            case FLOOR_TARGET:
                                targetFloor.setPosition(x,y);
                                targetFloor.paint(g);
                                break;
                            default:
                                g.setColor(0x0099FF);
                                g.fillRect(x, y, 16, 16);
                                g.drawImage(image_tools[type - 4], x, y,
                                                20);
                                g.setColor(0x0000FF00);
                                g.drawRect(x,y,15,15);
                            }

                        }
                    }

                    int cursorX = cursorColumn << 4;
                    int cursorY = cursorRow << 4;
                    g.setColor(0x00FF0000);
                    g.drawRect(cursorX, cursorY, 15, 15);
                    boolean dweepUndrawn = true;
                    for (int i = 0; i < 12; i++) {
                        for (int j = 0; j < 10; j++) {
                            Stuff stuff = stuffs[i][j];
                            if (stuff != null) {
                                stuff.draw(g);
                                if (stuff.status == Stuff.STATUS_DEAD)
                                    stuffs[i][j] = null;
                            }
                            if (dweep.getRefPixelY() <= i <<4 && dweepUndrawn && dweep.status != Dweep.STATUS_HOT) {
                                dweep.draw(g);
                                dweepUndrawn = false;
                            }
                        }
                    }



                    //绘制激光
                    for (int i = 0; i < 12; i++) {
                        for (int j = 0; j < 10; j++) {
                            Stuff stuff = stuffs[i][j];
                            if (stuff != null
                                    && stuff.type >= STUFF_LASER_UP
                                    && stuff.type <= STUFF_LASER_LEFT
                                    && stuff.status != Stuff.STATUS_DYING) {
                                paintLaser(stuff, stuff.type - STUFF_LASER_UP, g);
                            }

                        }
                    }

                    if (dweepUndrawn) dweep.draw(g);

                    //***绘制光标***//
                    if (selectedToolIndex == -1) {
                        g.drawImage(image_hand, cursorX + 1, cursorY + 5, 20);
                    } else {
                        int type = tools[selectedToolIndex];
                        switch(type) {
                        case TOOL_FAN_UP:
                            g.drawRegion(image_fan, 0, 0, 18, 21,
                                    Sprite.TRANS_NONE, cursorX - 1, cursorY - 8,
                                    20);

⌨️ 快捷键说明

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