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

📄 maincanvas.java

📁 Java ME手机应用开发大全一书的配套光盘上的源码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
import java.io.InputStream;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.rms.RecordStore;
import javax.microedition.io.file.FileConnection;

public class MainCanvas extends GameCanvas implements Runnable {
    public static final int STATUS_MAINMENU = 0;
    public static final int STATUS_MISSION_SELECTING = 1;
    public static final int STATUS_MISSION_RUNNING = 2;
    public static final int STATUS_OPTION = 3;
    public static final int MISSION_PAUSE = 0;
    public static final int MISSION_RUNNING = 1;
    public static final int MISSION_FAIL = 2;
    public static final int MISSION_COMPLETED = 3;
    public static final int RIVER = 2;
    public static final int TARGET = 3;
    public static final int TOOL_POWER = 4; //无敌魔法
    public static final int TOOL_TORCH = 5; //闪电魔法
    public static final int TOOL_HAMMER = 6;
    public static final int TOOL_WRENCH_CW = 7;  //顺时针
    public static final int TOOL_WRENCH_CCW = 8; //逆时针
    public static final int TOOL_BOMB = 9;
    public static final int TOOL_LASER_UP = 14;
    public static final int TOOL_LASER_RIGHT = 15;
    public static final int TOOL_LASER_DOWN = 16;
    public static final int TOOL_LASER_LEFT = 17;
    public static final int TOOL_MIRROR_CW = 18; //+45度
    public static final int TOOL_MIRROR_CCW = 19; //-45度
    public static final int STUFF_BOMB = 25;
    public static final int STUFF_LASER_UP = 30;
    public static final int STUFF_LASER_RIGHT = 31;
    public static final int STUFF_LASER_DOWN = 32;
    public static final int STUFF_LASER_LEFT = 33;
    public static final int STUFF_MIRROR_CW = 34;
    public static final int STUFF_MIRROR_CCW = 35;
    public static final int STUFF_STONE = 36;
    public static final int LASER = 64;
    //当前屏幕显示状态
    public int status;
    //是否正在连接上网
    public boolean isLinking = true;
    //任务的当前执行状态
    public static int missionStatus;
    //游戏循环线程
    private volatile Thread thread;
    //副菜单显示状态
    private static boolean subMenuVisible;
    //主菜单当前选中的菜单项索引
    private int mainMenuIndex;
    //任务的页号
    private int missionPageNum;
    //当前选中的任务索引
    private int missionSelectedIndex;
    //副菜单当前选中的菜单项索引
    private static int subMenuIndex;
    //光标行位置
    private int cursorRow;
    //光标列位置
    private int cursorColumn;
    //主菜单菜单项的图片
    private Image[] mainMenuItems = new Image[5];
    //副菜单菜单项的图片
    private static Image[] subMenuItems;
    private Graphics g;
    //游戏中需要使用的图片
    public static Image[] number = new Image[11];
    public static Image[] image_floors = new Image[2];
    public static Image[] image_tools = new Image[16];
    public static Image word_start;
    public static Image word_continue;
    public static Image word_setting;
    public static Image word_option;
    public static Image word_quit;
    public static Image word_mission;
    public static Image word_success;
    public static Image word_failure;
    public static Image word_back;
    public static Image word_retry;
    public static Image word_nextMission;
    public static Image word_mainMenu;
    public static Image image_logo;
    public static Image image_hand;
    public static Image image_cup;
    public static Image image_explode;
    public static Image image_ice;
    public static Image image_target;
    public static Image image_bomb;
    public static Image image_mirror;
    public static Image image_laser;
    public static Image image_stone;
    public static Image image_broking;
    public static Image image_otta;
    public static Image image_firing;
    public static Image image_description;
    public static Image image_toolbar;
    public static Image image_infobar;
    public static Image image_menubar;
    public static Image image_bottom;
    public static Image background;
    public static Image window;
    public static Image word2;
    public static Image link;
    public static Image select;
    public static Image menub;
    public static Image num;
    public static Image hand;
    public static Image level;
    public static Image chen;
    //读取文件的文件流
    public InputStream input;
    //任务开始的时间
    private long startTime;
    //一些动画精灵
    private Sprite iceFloor;
    private Sprite targetFloor;
    private Sprite back;
    //存储按键信息
    private int keyPressed;
    //任务描述的显示位置
    private int descriptionX;
    //使用的字体
    private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
    //一个增量用于实现闪现效果
    private int incr;
    //任务的总数
    public static int missionCount = 6;
    //玩家记录
    public static byte[] record;
    //选中的工具索引
    public static int selectedToolIndex = -1;
    //地图信息
    public static byte[] temp = new byte[120];
    //当前任务号
    public static int missionNum;
    //地面上的元素
    public static int[][] base = new int[12][10];
    //物体元素
    public static Magic[][] stuffs = new Magic[12][10];
    //道具包中的道具
    public static int[] tools = new int[9];
    //背景图片序列
    public static int[] serial = new int[]
    {0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,6,6,5,5,4,4,3,3,2,2,1,1};
    //地面风格
    public static int floor = 0;
    //精灵
    public static Otta otta;
    //精灵初始行位置
    public static int initRow;
    //精灵初始列位置
    public static int initColumn;
    //道具包中预置的工具
    public static byte[] initTools;
    //默认播放器
    public static Player[] players = new Player[3];
    //自定义播放器
    public static Player player_custom;
    //声音播放器
    public static Player playerWin;
    //当前正在播放的播放器
    public static Player nowPlayer;
    //地图文件
    public static Info info;
    
    public MainCanvas() {
        super(false);
        try {
            setFullScreenMode(true);
            for (int i=0; i<players.length; i++) {
                players[i] = Manager.createPlayer(
                        getClass().getResourceAsStream("/Sound/"+ (i+1) + ".mid"), "audio/midi");
            }
            
            nowPlayer = players[0];
            playerWin = Manager.createPlayer(
                    getClass().getResourceAsStream("/Sound/win.mid"), "audio/midi");
            
            initial();
            info = new Info();
            iceFloor = new Sprite(image_ice, 16, 16);
            iceFloor.setFrameSequence(new int[] { 0, 1, 2, 1, 0 });
            targetFloor = new Sprite(image_target, 16, 16);
            targetFloor.setFrameSequence(new int[] { 0, 1, 1, 0 });
            otta = new Otta();
            back = new Sprite(background, 176, 220);
            back.setFrameSequence(serial);
            
            RecordStore recordStore = RecordStore.openRecordStore("Otta", 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) {
            System.out.print(e.toString());
        }
    }
    
    protected void showNotify() {
        thread = new Thread(this);
        thread.start();
        playSound(nowPlayer, -1);
    }
    
    protected void hideNotify() {
        thread = null;
    }
    
    protected void keyPressed(int keyCode) {
        keyPressed = keyCode;
    }
    
    public void run() {
        g = getGraphics();
        while (thread == Thread.currentThread()) {
            try {
                Thread.sleep(Start.gameLoop);
                incr = (incr + 1) % 8;
                //清屏
                if (status != STATUS_MISSION_RUNNING) {
                    g.setColor(0xFFFFFF);
                    g.fillRect(0, 0, 176, 220);
                    g.setColor(0x000000);
                    g.drawString("asda",0,0,0);
                }
                int lastKeyPressed = keyPressed;
                keyPressed = 0;
                
                switch (status) {
                    case STATUS_MAINMENU:  // 主菜单
                        int menuCount = (missionStatus == MISSION_RUNNING) ? 5 : 4;
                        int menuS = 5 - menuCount;
                        switch (lastKeyPressed) {
                            case -2:
                                mainMenuIndex = (mainMenuIndex + 1) % menuCount;
                                break;
                            case -1:
                                mainMenuIndex = (mainMenuIndex - 1 + menuCount) % menuCount;
                                break;
                            case -5:
                            case -6:
                                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)
                                    Start.showSetting();
                                else if (selectedImage == word_option)
                                    status = STATUS_OPTION;
                                else if (selectedImage == word_quit)
                                    Start.quitApp();
                                break;
                        }
                        back.paint(g);
                        back.nextFrame();
                        // 绘制LOGO
                        g.drawImage(image_logo, 21, 21, 20);
                        // 绘制光标
                        g.drawImage(select, 57, 120 + mainMenuIndex * 14, 20);
                        // 绘制菜单项
                        for (int i = menuS; i < mainMenuItems.length; i ++)
                            g.drawImage(mainMenuItems[i], 75, 120 + (i - menuS)* 14, 20);
                        break;
                        
                    case STATUS_MISSION_SELECTING: // 任务选择菜单
                        switch(lastKeyPressed) {
                            case -1:
                                if (missionSelectedIndex > 0)
                                    missionSelectedIndex--;

⌨️ 快捷键说明

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