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

📄 main.java

📁 这是一个RPG的小游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                            break;
                        case TOOL_FAN_RIGHT:
                            g.drawRegion(image_fan, 72, 0, 18, 21,
                                    Sprite.TRANS_NONE, cursorX - 1, cursorY - 8,
                                    20);
                            break;
                        case TOOL_FAN_DOWN:
                            g.drawRegion(image_fan, 126, 0, 18, 21,
                                    Sprite.TRANS_NONE, cursorX - 1, cursorY - 8,
                                    20);
                            break;
                        case TOOL_FAN_LEFT:
                            g.drawRegion(image_fan, 72, 0, 18, 21,
                                    Sprite.TRANS_MIRROR, cursorX - 1, cursorY - 8,
                                    20);
                            break;
                        case TOOL_LASER_UP:
                            g.drawRegion(image_laser, 0, 0, 24, 20,
                                    Sprite.TRANS_NONE, cursorX - 4, cursorY - 4,
                                    20);
                            break;
                        case TOOL_LASER_RIGHT:
                            g.drawRegion(image_laser, 48, 0, 24, 20,
                                    Sprite.TRANS_NONE, cursorX - 4, cursorY - 4,
                                    20);
                            break;
                        case TOOL_LASER_DOWN:
                            g.drawRegion(image_laser, 96, 0, 24, 20,
                                    Sprite.TRANS_NONE, cursorX - 4, cursorY - 4,
                                    20);
                            break;
                        case TOOL_LASER_LEFT:
                            g.drawRegion(image_laser, 48, 0, 24, 20,
                                    Sprite.TRANS_MIRROR, cursorX - 4, cursorY - 4,
                                    20);
                            break;
                        case TOOL_MIRROR_CW:
                            g.drawRegion(image_mirror, 0, 0, 16, 24,
                                    Sprite.TRANS_MIRROR, cursorX, cursorY - 8,
                                    20);
                            break;
                        case TOOL_MIRROR_CCW:
                            g.drawRegion(image_mirror, 0, 0, 16, 24,
                                    Sprite.TRANS_NONE, cursorX, cursorY - 8,
                                    20);
                            break;
                        default:
                            g.drawImage(image_tools[type - 4], cursorX,
                                    cursorY, 20);
                        }
                        
                    }
                    
                    //***绘制工具栏***//
                    g.drawImage(image_toolbar, 160, 0, 20);
                    for (int i = 0; i < 9; i++) {
                        int y = i * 19 + 3;
                        int toolType = tools[i];
                        if (toolType > 0)
                            g.drawImage(image_tools[toolType - 4], 160, y, 20);

                    }
                    
                    
                    //***绘制时间***//
                    g.drawImage(image_infobar, 0, 192, 20);
                    int interval = (int) ((System.currentTimeMillis() - startTime)/1000);
                    int onesDigit = interval % 10;
                    int tensDigit = (interval / 10) % 10;
                    int hundredDigit = (interval / 100) % 10;
                    int thousandDigit = (interval / 100) % 10;
                    g.drawImage(word_numbers[thousandDigit], 3, 192, 20);
                    g.drawImage(word_numbers[hundredDigit], 15, 192, 20);
                    g.drawImage(word_numbers[tensDigit], 27, 192, 20);
                    g.drawImage(word_numbers[onesDigit], 39, 192, 20);
                    
                    //***绘制任务描述****//
                    int descWidth = image_description.getWidth();
                    int lx = descriptionX - 121;
                    int ly = descriptionX;
                    if (ly > descWidth)
                        ly = descWidth;
                    int s = 55;
                    if (lx < 0) {
                        lx = 0;
                        s = 176 - descriptionX;
                    } 
                    
                    g.drawRegion(image_description, lx, 1, ly - lx, image_description.getHeight() - 1, Sprite.TRANS_NONE , s, 192, 20);
                    descriptionX = (descriptionX + 2) % (descWidth + 121);
                    
                    // 绘制菜单
                    if (subMenuVisible) {
                        g.drawImage(image_menubar, 48, 56, 20);
                        // 绘制菜单项
                        int y = ((70 - subMenuItems.length * 15) >> 1) + 56;
                        for (int i = 0; i < subMenuItems.length; i++) {
                            int x = 48 + ((80 - subMenuItems[i].getWidth()) >> 1);
                            g.drawImage(subMenuItems[i], x, y + i * 15, 20);
                        }
                        
                        if (incr <= 3)
                            g.drawImage(image_arrow,
                                    32 + ((80 - subMenuItems[subMenuIndex]
                                            .getWidth()) >> 1), y + 2
                                            + subMenuIndex * 15, 20);
                    }
                    
                	break;
                }
                
                //输出缓冲
                flushGraphics();
                
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    
    /**
     * 此方法将绘制一个3D效果的水平线或者垂直线
     * @param x 起点x坐标
     * @param y 起点y坐标
     * @param l 长度
     * @param isVertical true 垂直,false 水平
     */
    private void draw3DLine(int x, int y, int l, boolean isVertical, Graphics g) {
        int ex = x, ey = y;
        int cx = 0, cy = 0;
        if (isVertical) {
            ey += l;
            cx = 1;
        } else {
            ex += l;
            cy = 1;
        }
        
        g.setColor(0x0086CEFF);//高亮度颜色
        g.drawLine(x - cx, y - cy, ex - cx, ey - cy);
        g.setColor(0x000099FF);//中亮度颜色
        g.drawLine(x, y, ex, ey);
        g.setColor(0x00005B99);//低亮度颜色
        g.drawLine(x + cx, y + cy, ex + cx, ey + cy);
    }
    
    /**
     * 绘制激光束,这是一个递归方法
     */
    private void paintLaser(Stuff stuff, int direction, Graphics g) {
        g.setColor(0x0000FF00);
        int fromRow = stuff.row, fromColumn = stuff.column;
        int incr = (direction == 0 || direction == 3) ? -1 : 1;

        // 沿激光方向读取物体
        int row = fromRow, column = fromColumn;
        Stuff e = null;
        int t = -1;
        int dweepX = dweep.getRefPixelX();
        int dweepY = dweep.getRefPixelY();
        loop: while (true) {
            if (direction == 3 || direction == 1)
                column += incr;
            else
                row += incr;
            if (row < 0 || column < 0 || row >= 12 || column >= 10)
                break loop;
            int x = column << 4;
            int y = row << 4;
            if (dweepX > x - 8 && dweepX < x + 8 &&
                dweepY > y - 8 && dweepY < y + 8
                    && dweep.status < 3) {
                if (dweepX == column * 16 && dweepY == row * 16)
                    dweep.laser();
                t = 0;
                break loop;
            }
            // 获取物体
            e = stuffs[row][column];
            // 物体不存在,接着获取下一个位置的物体
            if (null == e)
                continue;
            t = e.type;
            switch (t) {
            case STUFF_STONE: // 假如是石头,激光就应该终止了.
                break loop;
            case STUFF_MIRROR_CCW:
                if (stuff.status != Stuff.STATUS_DYING)
                    paintLaser(e, 3 - direction, g);
                break loop;
            case STUFF_MIRROR_CW: // 假如是镜子,就反射激光
                // 确定反射后的方向
                if (stuff.status != Stuff.STATUS_DYING)
                    paintLaser(e, (5 - direction) % 4, g);
                break loop;
            case STUFF_BOMB:
                // 假如是炸弹,点燃它
                e.apply(TOOL_TORCH);
                break;
            default:
                e.apply(LASER);
                break loop;
            }
        }
        int fromX = fromColumn << 4;
        int fromY = fromRow << 4;
        int startX = fromX + 8, startY = fromY + 3;
        int endX = startX, endY = startY;

        switch (stuff.type) {
        case STUFF_LASER_UP:
            startY = fromY - 5;
            break;
        case STUFF_LASER_RIGHT:
            startX =fromX + 21;
            break;
        case STUFF_LASER_DOWN:
            startY = fromY + 15;
            break;
        case STUFF_LASER_LEFT:
            startX =fromX - 5;
            break;
        case STUFF_MIRROR_CW:
            switch (direction) {
            case 0:
                startY = fromY - 7;
                break;
            case 1:
                startX =fromX + 8;
                break;
            case 2:
                startY = fromY + 3;
                break;
            case 3:
                startX =fromX;
                break;
            }
            break;
        case STUFF_MIRROR_CCW:
            switch (direction) {
            case 0:
                startY = fromY - 7;
                break;
            case 1:
                startX =fromX + 16;
                break;
            case 2:
                startY = fromY + 3;
                break;
            case 3:
                startX =fromX + 8;
                break;
            }
            break;
        }
        
        int ex = column << 4;
        int ey = row << 4;
        switch (t) {
        case STUFF_MIRROR_CW:
            switch (direction) {
            case 0:
                endY = ey + 3;
                break;
            case 1:
                endX = ex;
                break;
            case 2:
                endY = ey - 7;
                break;
            case 3:
                endX = ex + 8;
                break;
            }
            break;
        case STUFF_MIRROR_CCW:
            switch (direction) {
            case 0:
                endY = ey + 3;
                break;
            case 1:
                endX = ex + 8;
                break;
            case 2:
                endY = ey - 7;
                break;
            case 3:
                endX = ex + 16;
                break;
            }
            break;
        case STUFF_STONE:
            switch (direction) {
            case 0:
                endY = ey + 9;
                break;
            case 1:
                endX = ex + 3;
                break;
            case 2:
                endY = ey - 4;
                break;
            case 3:
                endX = ex + 13;
                break;
            }
            break;
        case 0:
            switch (direction) {
            case 0:
                endY = ey + 16;
                break;
            case 1:
                endX = ex;
                break;
            case 2:
                endY = ey;
                break;
            case 3:
                endX = ex + 16;
                break;
            }
        default:
            switch (direction) {
            case 0:
                endY = ey + 14;
                break;
            case 1:
                endX = ex + 2;
                break;
            case 2:
                endY = ey + 2;
                break;
            case 3:
                endX = ex + 14;
                break;
            }
        }

⌨️ 快捷键说明

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