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

📄 galaxywarcanvas.java

📁 经典的宇宙大战游戏代码(坦克大战)
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            else if (osY != offsetY)
                pY = p.y - osY;
            else
                pY = p.y - currentP.y + osY;
            if (pX < startMapPx - IMAGESIZE || pX > endMapPx
                || pY < startMapPy - IMAGESIZE || pY > endMapPy) {
                continue;
            }
            if (p.isHit) {
                //g.setClip(0,0,width,height);
                g.setClip(pX, pY, imageSize, imageSize);
                g.drawImage(smoke[p.counter],pX + (imageSize >> 1)
                    ,pY + (imageSize >> 1)
                    ,g.VCENTER | g.HCENTER);
                p.counter ++;
                if (p.counter == SMOKE - 1) {
                    p.isHit = false;
                    p.counter = 0;
                    if (p.hp <= 0) {
                        p.isDead = true;
                        if (p.rivalry == 0)
                            gameState = 0;//game over
                    }
                }
            }else {
                if (p.type == BOSS) {
                    g.setClip(pX, pY, imageSize, imageSize);
                    g.drawImage(boss, pX - getIcon(p) * bossWidth
                        , pY, g.LEFT | g.TOP);
                }
                else {
                    g.setClip(pX, pY, imageSize, imageSize);
                    g.drawImage(tank, pX - getIcon(p) * imageSize
                        , pY, g.LEFT | g.TOP);
                }
            }
        } //end for
        g.setClip(0, 0, width, height);//是否可以缩小?
    }


    private void drawItem(Graphics g) {
        Tank p = player[0];
        Item itm;
        int pX,pY;
        for (int i = 0; i < maxItem; i++) {
            itm = item[i];
            if (itm.isCollected) continue;
            if (osX == 0)
                pX = itm.x;
            else if (osX != offsetX)
                pX = itm.x - osX;
            else
                pX = itm.x - p.x + osX;
            if (osY == 0)
                pY = itm.y;
            else if (osY != offsetY)
                pY = itm.y - osY;
            else
                pY = itm.y - p.y + osY;
            if (pX < startMapPx - IMAGESIZE || pX > endMapPx
                || pY < startMapPy - IMAGESIZE || pY > endMapPy) {
                continue;
            }
            g.drawImage(cheese, pX,pY, g.VCENTER | g.HCENTER);
        } //end for
    }

    private void drawShot(Graphics g) {
        Tank p,p2 = player[0];
        int passPoint,totalPoint,x,y;
        int pX, pY;
        totalPoint = SHOT_AREA / SHOT_RATE;
        for (int i=0;i<maxPlayer;i++) {
            p = player[i];
            if (p.isArrived)
                continue;
            x = p.shotX;
            y = p.shotY;
            if (osX == 0)
                pX = p.shotX;
            else if (osX != offsetX)
                pX = p.shotX - osX;
            else
                pX = p.shotX - p2.x + osX;
            if (osY == 0)
                pY = p.shotY;
            else if (osY != offsetY)
                pY = p.shotY - osY;
            else
                pY = p.shotY - p2.y + osY;
            switch (p.direction) {
            case D_UP:
            case D_DOWN:
                //passPoint = Math.abs(y - p.shotTy) / SHOT_RATE;
                //if (passPoint <= totalPoint) {//&& (passPoint & 1) == 0) {
                    g.drawImage(shot[p.direction], pX, pY, g.LEFT | g.TOP);
                //}
                break;
            case D_LEFT:
            case D_RIGHT:
                //passPoint = Math.abs(x - p.shotTx) / SHOT_RATE;
                //if (passPoint <= totalPoint) {// && (passPoint & 1) == 0) {
                    g.drawImage(shot[p.direction], pX, pY, g.LEFT | g.TOP);
                //}
                break;
            }
        }
    }


    private void drawPanel(Graphics g) {
        //draw panel
        //g.setClip(0, 0, width, height);
        g.drawImage(panel, 0, viewHeight, g.LEFT | g.TOP);
    }

    //这里的坐标要特殊处理
    //也可以直接画数字
    private void drawInfo(Graphics g) {
        Tank p = player[0];
        String info = String.valueOf(p.hp);//debug:String.valueOf(round);
        int len = info.length();
        int digitWidth = digit.getWidth() / 10;
        int digitHeight = digit.getHeight();
        int x,y,num;
        y = viewHeight + ((height - viewHeight - digitHeight) >> 1);
        for (int i=0;i<len;i++) {
            x = i* digitWidth + DIGIT_LEFT;
            num = Integer.parseInt(info.substring(i,i+1));
            g.setClip(x,y,digitWidth,digitHeight);
            g.drawImage(digit,x - num * digitWidth,y,g.TOP | g.LEFT);
        }
        info = String.valueOf(p.score);
        len = info.length();
        for (int i=0;i<len;i++) {
            x = i* digitWidth + DIGIT_RIGHT;
            num = Integer.parseInt(info.substring(i,i+1));
            g.setClip(x,y,digitWidth,digitHeight);
            g.drawImage(digit,x - num * digitWidth,y,g.TOP | g.LEFT);
        }
    }


    private void drawScore(Graphics g) {
        String info,drawInfo,itemInfo;
        int start,end,scoreNum = getScoreNum(scoreInfo);
        int infoWidth,startX,startY;
        int index,drawIndex;
        boolean isStart,isEnd,isBreak = false;
        info = scoreInfo;
        g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
        if (info.length() == 0) return;
        end = currentScore + showedNum;
        if (end > scoreNum) {
            end = scoreNum;
        }
        start = end - showedNum;
        if (start < 0) start = 0;
        index = -1;
        drawIndex = -1;
        g.setColor(0x00FFFF00);
        for (int i=0;i<scoreNum;i++) {
            itemInfo = info.substring(0,info.indexOf(","));
            index ++;
            if (info.indexOf(",") == info.length() - 1)
                isBreak = true;
            else
                info = info.substring(info.indexOf(",") + 1);
            if (index < start || index >= end) continue;
            drawIndex ++;
            startX = (width / 3 - MEDAL_SIZE) >> 1;
            startY = panel_up.getHeight() + UP_SPACE
                + SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
            g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
            g.drawImage(ranking,startX - i * MEDAL_SIZE,
                startY,g.LEFT | g.TOP);//draw medal
            g.setClip(0,0,width,height);
            drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
            infoWidth = getStringWidth(drawInfo);
            startX = width / 3 + ((width / 3 - infoWidth) >> 1);
            startY = panel_up.getHeight() + UP_SPACE
                + SCORE_HEIGHT * drawIndex
                + ((SCORE_HEIGHT - font.getHeight()) >> 1);
            g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
            drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
            infoWidth = getStringWidth(drawInfo);
            startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
            g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
            if (isBreak) break;
        }
        if (start == 0 && end == scoreNum) return;
        if (start > 0)
            isStart = false;
        else
            isStart = true;
        if (end < scoreNum)
            isEnd = false;
        else
            isEnd = true;
        startX = (width - hint.getWidth()) >> 1;
        startY = height - 2 - hint.getHeight();
        if (!isStart && isEnd) {
            g.setClip(startX,startY,hint.getWidth(),hint.getHeight() >> 1);
        }
        else if (isStart && !isEnd) {
            g.setClip(startX,startY + (hint.getHeight() >> 1)
                ,hint.getWidth(),hint.getHeight() >> 1);
        }
        g.drawImage(hint,startX,startY,g.LEFT | g.TOP);
        g.setClip(0,0,width,height);
    }

    private void drawInternetRank(Graphics g) {
        String info,drawInfo = "",itemInfo;
        int start,end;
        int index,drawIndex,infoWidth,startX,startY;
        boolean isStart,isEnd,isBreak = false;
        info = rankInfo;
        g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
        if (info.length() == 0) {
            if (!isReaded)
                if (mode == MODE_UPLOAD)
                    drawInfo = "Uploading...";
                else
                    drawInfo = "Downloading...";
            else {
                rankInfo = ERRORINFO;
                rankNum = getScoreNum(rankInfo);
                return;
            }
            g.setColor(0x00FFFF00);
            infoWidth = getStringWidth(drawInfo);
            startX = (width - infoWidth) >> 1;
            startY = ((height - panel_up.getHeight() - font.getHeight()) >> 1)
                + panel_up.getHeight();
            g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
            return;
        }
        end = currentRank + showedNum;
        if (end > rankNum) {
            end = rankNum;
        }
        start = end - showedNum;
        if (start < 0) start = 0;
        index = -1;
        drawIndex = -1;
        for (int i=0;i<rankNum;i++) {
            itemInfo = info.substring(0,info.indexOf(","));
            index ++;
            if (info.indexOf(",") == info.length() - 1)
                isBreak = true;
            else
                info = info.substring(info.indexOf(",") + 1);
            if (index < start || index >= end) continue;
            drawIndex ++;
            g.setColor(0x00FFFF00);
            if (itemInfo.indexOf(58) == -1) {
                drawInfo = itemInfo;
                infoWidth = getStringWidth(drawInfo);
                startX = (width - infoWidth) >> 1;
                startY = panel_up.getHeight() + UP_SPACE
                    + SCORE_HEIGHT * drawIndex
                    + ((SCORE_HEIGHT - font.getHeight()) >> 1);
                g.drawString(drawInfo, startX, startY, g.LEFT | g.TOP);
            }else {
                startX = (width / 3 - MEDAL_SIZE) >> 1;
                startY = panel_up.getHeight() + UP_SPACE
                    + SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
                g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
                g.drawImage(ranking,startX - i * MEDAL_SIZE,
                    startY,g.LEFT | g.TOP);//draw medal
                g.setClip(0,0,width,height);
                drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
                infoWidth = getStringWidth(drawInfo);
                startX = width / 3 + ((width / 3 - infoWidth) >> 1);
                startY = panel_up.getHeight() + UP_SPACE
                    + SCORE_HEIGHT * drawIndex
                    + ((SCORE_HEIGHT - font.getHeight()) >> 1);
                g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
                drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
                infoWidth = getStringWidth(drawInfo);
                startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
                g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
            }
            if (isBreak) break;
        }
        if (start == 0 && end == rankNum) return;
        if (start > 0)
            isStart = false;
        else
            isStart = true;
        if (end < rankNum)
            isEnd = false;
        else
            isEnd = true;
        startX = (width - hint.getWidth()) >> 1;
        startY = height - 2 - hint.getHeight();
        if (!isStart && isEnd) {
            g.setClip(startX,startY,hint.getWidth(),hint.getHeight() >> 1);
        }
        else if (isStart && !isEnd) {
            g.setClip(startX,startY + (hint.getHeight() >> 1)
                ,hint.getWidth(),hint.getHeight() >> 1);
        }
        g.drawImage(hint,startX,startY,g.LEFT | g.TOP);
        g.setClip(0,0,width,height);
    }

    private void drawWritingScore(Graphics g) {
        String info,drawInfo,itemInfo;
        boolean isBreak = false;
        int start,end,scoreNum = getScoreNum(scoreInfo);
        int index,drawIndex,infoWidth,startX,startY;
        info = scoreInfo;
        g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
        g.setColor(0x00FFFF00);
        drawInfo = "Input your name";
        infoWidth = getStringWidth(drawInfo);
        startX = (width - infoWidth) >> 1;
        startY = panel_up.getHeight() + 2;
        g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
        end = currentScore + showedNum;
        if (end > scoreNum) {
            end = scoreNum;
        }
        start = end - showedNum;
        if (start < 0) start = 0;
        index = -1;
        drawIndex = -1;
        for (int i=0;i<scoreNum;i++) {
            itemInfo = info.substring(0,info.indexOf(","));
            index ++;
            if (info.indexOf(",") == info.length() - 1)
                isBreak = true;
            else
                info = info.substring(info.indexOf(",") + 1);
            if (index < start || index >= end) continue;
            if (index == currentScore)
                g.setColor(0x00FF0000);
            else
                g.setColor(0x00FFFF00);
            drawIndex ++;
            startX = (width / 3 - MEDAL_SIZE) >> 1;
            startY = panel_up.getHeight() + UP_SPACE
                + SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
            g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
            g.drawImage(ranking,startX - i * MEDAL_SIZE,
                startY,g.LEFT | g.TOP);//draw medal
            g.setClip(0,0,width,height);
            drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
            infoWidth = getStringWidth(drawInfo);
            if (!drawInfo.substring(drawInfo.length() -1).equals("|"))
                infoWidth += font.charWidth('|');
            startX = width / 3 + ((width / 3 - infoWidth) >> 1);
            startY = panel_up.getHeight() + UP_SPACE
                + SCORE_HEIGHT * drawIndex
                + ((SCORE_HEIGHT - font.getHeight()) >> 1);
            g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
            drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
            infoWidth = getStringWidth(drawInfo);
            if (!drawInfo.substring(drawInfo.length() -1).equals("|"))
                infoWidth += font.charWidth('|');
            startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
            g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);

            if (isBreak) return;
        }
    }

    private void drawOption(Graphics g) {
        int menuID;
        String info = "";
        int infoWidth;
        int startX,startY;
        //panel的尺寸必须于屏幕实际尺寸相符
        g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
        for (int i=0;i<showedNum;i++) {
            menuID = menu[i];
            if (menuID == currentMenu)
                g.setColor(0x00FF0000);
            else

⌨️ 快捷键说明

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