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

📄 forground.java~311~

📁 手机上一个坦克游戏
💻 JAVA~311~
📖 第 1 页 / 共 2 页
字号:
        if(mapArray.m_nY == 0 ){
            return -1;
        }
        else{
            return mapArray.m_nY - 1;
        }
    }

    private int getUpNotNull(int x, int initY) { // 从送入的点的坐标求出向上第一个不为空的点的坐标 (包含送入的点)
        for (int i = initY - 1; i > mapArray.m_nY; i--) {
            if( i < mapArray.getHeight())
            if (x >= mapArray.m_nX && x < mapArray.getWidth()) {
                if (mapArray.get(x, i) == 1) { //mapArray[x - 1][i] == 1) {
                    //System.out.println("upNotNull: x : " + x + " y = " + i + " " + mapArray.get(x, i));
                    return i;
                }
            }
            /*else {
                return 1000;
            }*/
        }
        return -1;//********************
    }

    public int getDownNotNull(int x, int initY) {
        //System.out.println("in getDownNotNull() : x = " + x + "initY = " + initY );
        for (int i = initY;
             i < mapArray.getHeight() /*mapArray[0].length/**/; i++) {
            if (x >= mapArray.m_nX && x < mapArray.getWidth())
                if (mapArray.get(x, i) == 1) { //mapArray[x - 1][i] == 1) {
                    //System.out.println("mapArray[" + (x - 1) + "][" + i + "] = " + mapArray[x - 1][i]);
                    return i;
                }
        }
        return 1000; //到底都为空
    }

    public int getRightNotNull(int x, int y) {
        for (int i = x + 1; i < mapArray.getWidth(); i++) {
            if (i >= mapArray.m_nX) {
                if (mapArray.get(i, y) == 1) { //mapArray[i][y - 1] == 1) {
                    return i;
                }
            }
            /*else {
                return 1000;
            }*/
        }
        return 1000;
    }

    public int getLeftNotNull(int x, int y) {
        for (int i = x - 1; i >= mapArray.m_nX; i--) {
            if(i < mapArray.getWidth())
                if (mapArray.get(i, y ) == 1) { //mapArray[i][y] == 1) {
                    return i;
                }
        }
        return -1;
    }

    public int getTankY(Tank tank) { //
        int y = tank.tank_y + tank.TANK_VSCALE / 2; //坦克所在中心地面的y坐标
        int x = tank.tank_x; // + battleCanvas.SCREEN_X; //坦克相对于整个地图的x坐标
        /*System.out.println("getTankY x = " + x + " y = " + y);
        System.out.println("mapArray.getWidth() = " + mapArray.getWidth());
        System.out.println("mapArray.m_nX = " + mapArray.m_nX);
        System.out.println("mapArray.m_nY = " + mapArray.m_nY);
        System.out.println("mapArray.getHeight() = " + mapArray.getHeight());/**/
        if (x < mapArray.getWidth() && x  >= mapArray.m_nX && y  >= mapArray.m_nY &&
            y  < mapArray.getHeight()) {
            if (tank.direction == 1) { // 向右
                //System.out.println("mapArray.get(x, y - 1) = " + mapArray.get(x, y - 1 ));
                if (mapArray.get(x + 1, y) == 1) { //mapArray[x][y - 1] == 1) { // 向右水平,向上搜索
                    int upNull = getUpNull(x + 1, y); //送入的是坐标,不是数组索引,输出也是坐标
                    if (y - tank.grade > upNull) { //受到梯度限制,不能爬上去
                        //System.out.println("1");
                        return -1;
                    }
                    else {
                        //System.out.println("right upNull: " + upNull);
                        int upNotNull = getUpNotNull(x + 1, upNull);
                        //System.out.println("ritght upNotNull: " + upNotNull);
                        if (upNotNull > upNull) {
                            if ( (upNotNull - upNull + 1) >= tank.TANK_VSCALE) {
                                return upNull + 1 - tank.TANK_VSCALE / 2;
                            }
                            else {
                                //System.out.println("2");
                                return -1;
                            }
                        }
                        else {
                            if ( (upNull - upNotNull) >= tank.TANK_VSCALE) {
                                return upNull + 1 - tank.TANK_VSCALE / 2;
                            }
                            else {
                                //System.out.println("3");
                                return -1;
                            }
                        }
                    }
                }
                else { // 向右向下,向下搜索
                    //System.out.println("right down ");
                    if (x + tank.TANK_HSCALE / 2 >= mapImage.getWidth()) {
                        //System.out.println("4");
                        return -1;
                    }
                    //System.out.println("x = " + x);
                    int clip = getRightNotNull(x, y);
                    //System.out.println("clip = " + clip);
                    if (clip - x >= tank.TANK_HSCALE - 5) { //有足够的裂缝往下掉
                        int nextY = getDownNotNull(x + 1, y);
                        //System.out.println("in getTankY nextY = " + nextY);
                        if (nextY == 1000) {
                            //判断是否能够向下掉出屏幕
                            int gap = getRightNotNull(x + 1, mapArray.getHeight() - 1);
                            //System.out.println("right gap = " + gap);
                            if (gap > tank.TANK_HSCALE) {
                                return -2; //掉出屏幕,死亡!
                            }
                            else {
                                //System.out.println("before getDownNotNull x + tank.TANK_HSCALE / 2 = " + x + tank.TANK_HSCALE / 2);
                                int bb = Math.min( /*mapArray[0].length/**/
                                    mapArray.getHeight() - 1,
                                    getDownNotNull(x +
                                    tank.TANK_HSCALE / 2,
                                    y) -
                                    tank.TANK_HSCALE / 2);

                        //System.out.println("gg");
                                return bb;
                            }
                        }
                        else { // 地形没有被炸穿
                        //System.out.println("ff");
                            return Math.min( /*mapArray[0].length/**/mapArray.
                                getHeight() - 1,
                                getDownNotNull(x +
                                               tank.TANK_HSCALE / 2,
                                               y) - tank.TANK_VSCALE / 2);
                        }
                    }
                    else {
                        //System.out.println("ee");
                        return tank.tank_y;
                    }
                }
            }
            else {
                if (tank.direction == -1) { // 向左
                    //System.out.println("left!");
                    //System.out.println("x - 1 " + (x -1 ) + " y  = " + y);
                    //System.out.println("mapArray.get(x - 1, y) = " + mapArray.get(x - 1, y));
                    if (mapArray.get(x - 1, y) == 1) { //mapArray[x - 2][y - 1] == 1) { // 向左水平,向上搜索
                        int upNull = getUpNull(x - 1, y);
                        //System.out.println("left horizon upNull: " + upNull);
                        if (y - tank.grade > upNull) {
                            //System.out.println("5");
                            return -1;
                        }
                        else {
                            int upNotNull = getUpNotNull(x - 1, upNull);
                            //System.out.println("temp: " + upNotNull);
                            if (upNotNull > upNull) {
                                if ( (upNotNull - upNull + 1) >=
                                    tank.TANK_VSCALE) {
                                    return upNull + 1 - tank.TANK_VSCALE / 2;
                                }
                                else {
                                    //System.out.println("6");
                                    return -1;
                                }
                            }
                            else {
                                if ( (upNull - upNotNull) >= tank.TANK_VSCALE) {
                                    return upNull + 1 - tank.TANK_VSCALE / 2;
                                }
                                else {
                                    //System.out.println("7");
                                    return -1;
                                }
                            }
                        }
                    }
                    else { // 向左向下,向下搜索
                        //System.out.println("left down mapArray[" + (tank.tank_x - 2) + "][" +
                        //(y - 1) + "] = " + mapArray[tank.tank_x - 2][y -1]);
                        if (x - tank.TANK_HSCALE / 2 < 0) {
                            //System.out.println("8");
                            return -1;
                        }
                        //System.out.println("x = " + x);
                        int clip = getLeftNotNull(x, y);
                        //System.out.println("clip = " + clip);

                        if (x - clip >= tank.TANK_HSCALE - 5 /*|| clip >= 1000*/) { //有足够的裂缝往下掉
                            int nextY = getDownNotNull(x - 1, y);
                            //System.out.println("left nextY = " + nextY);
                            if (nextY == 1000) {
                                //判断是否能够向下掉出屏幕
                                int gap = getLeftNotNull(x - 1,
                                    mapArray.getHeight() - 1);
                                //System.out.println("left gap = " + gap);
                                if (gap > tank.TANK_HSCALE) {
                                    return -2; //掉出屏幕,死亡!
                                }
                                else {
                                    //System.out.println("before getDownNotNull x + tank.TANK_HSCALE / 2 = " + x + tank.TANK_HSCALE / 2);
                                    int bb = Math.min( /*mapArray[0].length/**/
                                        mapArray.getHeight() - 1,
                                        getDownNotNull(x -
                                        tank.TANK_HSCALE / 2, y) -
                                        tank.TANK_VSCALE / 2);
                                    //System.out.println("bb");
                                    return bb;
                                }
                            }
                            else { // 地形没有被炸穿
                                //System.out.println("cc");
                                return Math.min( /*mapArray[0].length/**/
                                    mapArray.getHeight() - 1,
                                    getDownNotNull(x -
                                    tank.TANK_HSCALE / 2,
                                    y) -
                                    tank.TANK_VSCALE / 2);
                            }
                        }
                        else { // 裂缝不够大
                            //System.out.println("dd");
                            return tank.tank_y;
                        }
                    }
                }
                else {
                    //System.out.println("9");
                    return -1;
                }
            }
        }
        else {
            //if (tank.tank_y == Main.displayable.MAP_HEIGHT) {
            //System.out.println("haha");
                return -2;
            //}
            //return -1;
        }
    }

    //判断是否有导弹碰撞
    public boolean isCollision(Missile e1) {
        int x = e1.m_x; //得到导弹的x坐标
        int y = e1.m_y; //得到导弹的y坐标
        //System.out.println("*******************************mappyArray[][] x = " +
        //x + " y = " + y + "  = " + mapArray[x][y]);
        /*if (mapArray.get(x - 1, y - 1) == 1) { //mapArray[x - 1][y - 1] == 1) {
            //System.out.println("crash No. " + e1.debug);
            //System.out.println("mappyArray[" + x + "][" + y + "] = " +);
            return true;
        }/*0310*/

         int k = Math.max(e1.m_x - 5, 0);
         int l = Math.max(e1.m_y - 5, 0);
         int m = Math.min(e1.m_x + 5, Main.displayable.MAP_WIDTH - 1);
         int n = Math.min(e1.m_y + 5, Main.displayable.MAP_HEIGHT - 1);
         for (int i = k; i < m; i++) {
             for (int j = l; j < n; j++) {
                 if (mapArray.get(i, j) == 1) {
                     //System.out.println("hit ground crash No. " + e1.debug);
                     //System.out.println("mappyArray[" + (i) + "][" + (j) + "] = " + mapArray.get(x, y));
                     exacuteCrash(i, j, e1.attackRadius);
                     return true;
                 }
            }
        }/**/
        return false;
    }
}

⌨️ 快捷键说明

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