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

📄 main.java

📁 这是一个RPG的小游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.InputStream;
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;

/**
 * <p>Title: 游戏的画布</p>
 *
 * <p>Description: 负责绘制游戏的画面,接受用户的按键事件</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: wodead</p>
 *
 * @author wodead
 * @version 1.0
 */
public class Main 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_ABOUT = 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 FLOOR_HOT = 1;
    public static final int FLOOR_ICE = 2;
    public static final int FLOOR_TARGET = 3;
    public static final int TOOL_BUCKET = 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_FAN_UP = 10;
    public static final int TOOL_FAN_RIGHT = 11;
    public static final int TOOL_FAN_DOWN = 12;
    public static final int TOOL_FAN_LEFT = 13;
    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;
    public static final int TOOL_MIRROR_CCW = 19;
    public static final int STUFF_BOMB = 25;
    public static final int STUFF_FAN_UP = 26;
    public static final int STUFF_FAN_RIGHT = 27;
    public static final int STUFF_FAN_DOWN = 28;
    public static final int STUFF_FAN_LEFT = 29;
    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 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;
    //游戏中需要使用的图片
    public static Image[] word_numbers = new Image[10]; 
    public static Image word_start;
    public static Image word_continue;
    public static Image word_setting;
    public static Image word_about;
    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_arrow;
    public static Image image_cup;
    public static Image image_invalid;
    public static Image image_explode;
    public static Image[] image_floors = new Image[2];
    public static Image image_hot;
    public static Image image_ice;
    public static Image image_target;
    public static Image[] image_tools = new Image[16];
    public static Image image_bomb;
    public static Image image_mirror;
    public static Image image_laser;
    public static Image image_fan;
    public static Image image_stone;
    public static Image image_broking;
    public static Image image_dweep;
    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;
    //任务开始的时间
    private long startTime;
    //一些动画
    private Sprite iceFloor;
    private Sprite hotFloor;
    private Sprite targetFloor;
    //存储按键信息
    private int keyPressed;
    //任务描述的显示位置,用于实现跑马灯效果
    private int descriptionX;
    //关于的文本
    private static final String[] about = {"作者","wodead","版权","wodead,playxp@sohu.com","声明","创意、部分图片源于", "dexterity"};
    //使用的字体
    private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL);
    //一个增量用于实现闪现效果
    private int incr;
    //任务的总数
    public static int missionCount;
    //玩家记录
    private static byte[] record;
    //选中的工具索引
    public static int selectedToolIndex = -1;
    //地图信息
    private static byte[] missionData = new byte[120];
    //当前任务号
    public static int missionNum;
    //任务描述
    public static String description;
    //地面上的元素
    public static int[][] base = new int[12][10];
    //物体元素    
    public static Stuff[][] stuffs = new Stuff[12][10];
    //道具包中的道具
    public static int[] tools = new int[9];
    //地面风格
    public static int floor = 0;
    //精灵
    public static Dweep dweep;
    //精灵初始行位置
    public static int initRow;
    //精灵初始列位置
    public static int initColumn;
    //道具包中预置的工具
    public static byte[] initTools;
    static Player[] players = new Player[5];
    static int playersCount;
    static Player player_win; 
    static Player nowPlayer;
    /**
     * 构造一个游戏任务界面
     */
    public Main() {
        super(false);
        try {
            // 全屏显示
            setFullScreenMode(true);
            for (int i = 0; i < players.length; i++) {
                try {
                    players[playersCount] = Manager.createPlayer(getClass()
                            .getResourceAsStream(i + ".mid"), "audio/midi");
                    playersCount++;
                } catch (Exception e) {
                }
            }
            nowPlayer = players[0];
            player_win = Manager.createPlayer(getClass().getResourceAsStream(
                    "win.mid"), "audio/midi");
            
            // 初始化图片资源
            // LOGO
            image_logo = Image.createImage("/logo.png");
            image_dweep = Image.createImage("/dweep.png");
            // 文字和数字
            Image words = Image.createImage("/words.png");
            Image others = Image.createImage("/images.png");
            image_stone = Image.createImage("/stone.png");
            image_explode = Image.createImage("/explode.png");
            image_fan = Image.createImage("/fan.png");
            Image mirror = Image.createImage("/mirror.png");
            image_laser = Image.createImage("/laser.png");
            image_firing = Image.createImage("/firing.png");
            image_toolbar = Image.createImage("/toolbar.png");
            image_broking = Image.createImage(mirror, 0, 0, 96, 24,
                    Sprite.TRANS_NONE);
            image_mirror = Image.createImage(mirror, 96, 0, 16, 24,
                    Sprite.TRANS_NONE);
            word_start = Image.createImage(words, 0, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_continue = Image.createImage(words, 26, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_setting = Image.createImage(words, 52, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_about = Image.createImage(words, 78, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_quit = Image.createImage(words, 104, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_mission = Image.createImage(words, 130, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_success = Image.createImage(words, 156, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_failure = Image.createImage(words, 182, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_retry = Image.createImage(words, 208, 0, 26, 13,
                    Sprite.TRANS_NONE);
            word_nextMission = Image.createImage(words, 234, 0, 39, 13,
                    Sprite.TRANS_NONE);
            word_mainMenu = Image.createImage(words, 273, 0, 39, 13,
                    Sprite.TRANS_NONE);
            for (int i = 0; i < 10; i++)
                word_numbers[i] = Image.createImage(words, 312 + i * 12, 0, 12,
                        12, Sprite.TRANS_NONE);
            // 元素
            image_hot = Image.createImage(others, 0, 0, 48, 16,
                    Sprite.TRANS_NONE);
            image_ice = Image.createImage(others, 48, 0, 48, 16,
                    Sprite.TRANS_NONE);
            image_target = Image.createImage(others, 96, 0, 32, 16,
                    Sprite.TRANS_NONE);
            image_tools[0] = Image.createImage(others, 128, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[1] = Image.createImage(others, 144, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[2] = Image.createImage(others, 160, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[4] = Image.createImage(others, 176, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[3] = Image.createImage(others, 176, 0, 16, 16,
                    Sprite.TRANS_MIRROR);
            image_bomb = Image.createImage(others, 192, 0, 32, 16,
                    Sprite.TRANS_NONE);
            image_tools[5] = Image.createImage(others, 192, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_hand = Image.createImage(others, 224, 2, 12, 14,
                    Sprite.TRANS_NONE);
            image_cup = Image.createImage(others, 236, 3, 12, 13,
                    Sprite.TRANS_NONE);
            image_arrow = Image.createImage(others, 248, 6, 10, 10,
                    Sprite.TRANS_NONE);
            image_invalid = Image.createImage(others, 258, 5, 11, 11,
                    Sprite.TRANS_NONE);
            image_floors[0] = Image.createImage(others, 269, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_floors[1] = Image.createImage(others, 285, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[6] = Image.createImage(image_fan, 1, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[7] = Image.createImage(image_fan, 73, 2, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[8] = Image.createImage(image_fan, 127, 4, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[9] = Image.createImage(image_tools[7], 0, 0, 16, 16,
                    Sprite.TRANS_MIRROR);
            image_tools[10] = Image.createImage(image_laser, 4, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[11] = Image.createImage(image_laser, 56, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[12] = Image.createImage(image_laser, 100, 4, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[13] = Image.createImage(image_tools[11], 0, 0, 16, 16,
                    Sprite.TRANS_MIRROR);
            image_tools[15] = Image.createImage(image_mirror, 0, 0, 16, 16,
                    Sprite.TRANS_NONE);
            image_tools[14] = Image.createImage(image_tools[15], 0, 0, 16, 16,
                    Sprite.TRANS_MIRROR);


            Graphics ig = null;
            image_infobar = Image.createImage(176, 14);
            ig = image_infobar.getGraphics();
            ig.setColor(0x000099FF);
            ig.fillRect(0, 0, 176, 14);
            draw3DLine(1, 0, 13, true, ig);
            draw3DLine(53, 0, 13, true, ig);
            image_menubar = Image.createImage(80, 72);
            ig = image_menubar.getGraphics();
            // 绘制边框,产生立体效果
            ig.setColor(0x00C8E9FF);
            ig.drawLine(0, 0, 79, 0);
            ig.drawLine(0, 0, 0, 71);
            ig.setColor(0x00004675);
            ig.drawLine(0, 71, 79, 71);
            ig.drawLine(79, 0, 79, 71);
            // 绘制背景,产生十级渐进效果
            int rc = 0x75;
            int gc = 0xC6;
            for (int i = 0; i < 10; i++, rc -= 0xD, gc -= 0x5) {
                ig.setColor((rc << 16) + (gc << 8) + 0xFF);
                ig.fillRect(1, 1 + i * 7, 78, 7);
            }

            mainMenuItems[0] = word_continue;
            mainMenuItems[1] = word_start;
            mainMenuItems[2] = word_setting;
            mainMenuItems[3] = word_about;
            mainMenuItems[4] = word_quit;
            iceFloor = new Sprite(image_ice, 16, 16);
            iceFloor.setFrameSequence(new int[] { 0, 1, 2, 1, 0 });
            hotFloor = new Sprite(image_hot, 16, 16);
            hotFloor.setFrameSequence(new int[] { 2, 1, 0, 1 });
            targetFloor = new Sprite(image_target, 16, 16);
            targetFloor.setFrameSequence(new int[] { 0, 1, 1, 0 });
            dweep = new Dweep();
            System.gc();

            InputStream input = getInputStream();
            missionCount = input.read();
            input.close();

⌨️ 快捷键说明

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