Java 游戏正确结束时出现问题

Java 游戏正确结束时出现问题,java,Java,这是我在工作中遇到问题的代码 public void fight (Graphics canvas, int fightcount,int curloc) { if(curloc==10) { fightcount=fightcount-1; } else if (curloc==10 && fightcount==0) { JOptionPane.showMessageDialog(null, "You

这是我在工作中遇到问题的代码

public void fight (Graphics canvas, int fightcount,int curloc)
{

    if(curloc==10)
    {
        fightcount=fightcount-1;
    }
    else if (curloc==10 && fightcount==0)
    {
        JOptionPane.showMessageDialog(null, "You Win!");
    }
}
下面是代码的其余部分

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.applet.Applet;

import java.applet.*;
import java.awt.image.*;
import java.util.*;
import java.net.*;
public class AlcatrazEscape extends JApplet implements KeyListener, FocusListener
{
    int strength=0, health=100, curloc=1,randomnumber=0,fightcount=10;
    boolean focus = false;
    boolean left=false, right=false, up=false, down=false, space=false, enter=false;
    boolean start=false,train=false,showers=false,CBC=false,tunnel=false,SecRoom1=false,SecRoom2=false,courtyard=false,fight=false,free=false,GP=false,SolCon=false;
    boolean key1=false, key2=false;

    public void init()
    {

        addKeyListener(this);
        addFocusListener(this);
        play(getCodeBase(), "SpyHunter.mid");

    }
    public void paint(Graphics canvas)
    {
        clearScreen(canvas);

        canvas.setColor(Color.BLACK);  // Must do this so words will
                                       // display on the screen

         if (!focus)
         {
            canvas.setColor(Color.WHITE);
            canvas.drawString("Welcome to Alcatraz Breakout! The objective of the game is to escape Alcatraz.",10,10);
            canvas.drawString("Click the screen to begin the game.",10,30);
            return;
         }
         else
         {
             makeMove(canvas);
             dispLoc(canvas);
             stats(canvas);
             randomnumber=randomnum();
             ran(randomnumber,curloc,canvas);
             health(canvas, health);
             fight(canvas, curloc, fightcount);
             System.out.println(fightcount);
             left=right=up=down=space=enter=false;
         }


    }
    public void room1(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in your cell.", 10, 10);
        canvas.drawString("Left: To the Training Room", 10, 30);
        canvas.drawString("Right: To the Showers", 10, 50);

    }
    public void room2(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the Training Room.", 10, 10);
        canvas.drawString("Right: To your Cell", 10, 30);
    }
    public void room3(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the Showers.", 10, 10);
        canvas.drawString("Left: To your Cell", 10, 30);
        canvas.drawString("Up: To Cell Block C", 10, 50);
    }
    public void room4(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in Cell Block C.", 10, 10);
        canvas.drawString("Down: To the Showers", 10, 30);
        canvas.drawString("Up: To Security Room 1", 10, 50);
    }
    public void room5(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the first security room.", 10, 10);
        canvas.drawString("Left: To the Guard Post", 10, 30);
        canvas.drawString("Down: To Cell Block C", 10, 50);
    }
    public void room6(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the Guard Post.", 10, 10);
        canvas.drawString("Right: To Security Room 1", 10, 30);
        canvas.drawString("Left: To The Courtyard", 10, 50);
        canvas.drawString("Up: To Solitary Confinement", 10, 70);
    }
    public void room7(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the Courtyard.", 10, 10);
        canvas.drawString("Up: To the Guard Post", 10, 30);
        canvas.drawString("Down: To Security Room 2", 10, 50);
    }
    public void SolCon(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in Solitary Confinement.", 10, 10);
        canvas.drawString("Down: To the Guard Post", 10, 30);
    }
    public void room8(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in the second security room.", 10, 10);
        canvas.drawString("Right: Leave", 10, 30);
        canvas.drawString("Up: To The Couryard", 10, 50);
    }
    public void room9(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You walk by a blown up tank... weird.", 10, 10);
        canvas.drawString("Right: Freedom!", 10, 30);
    }
    public void room10(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are FREE!!.", 10, 10);

    }
    public void room11(Graphics canvas)
    {
        canvas.setColor(Color.WHITE);
        canvas.drawString("You are in SOLITARY CONFINEMENT: HOME OF THE FREAKS!!.", 10, 10);
        canvas.drawString("Down: To the Guard Post.", 10, 30);
    }
    public void guardFight1(Graphics canvas)
    {
        int GuardHP=75,GATK=10;
    }
    public void guardFight2(Graphics canvas)
    {
        int GuardHP=150,GATK=25;
    }
    public void makeMove(Graphics canvas)
    {
        if (curloc==1 && left)
        {
            curloc=2;
        }
        else if (curloc==1 && right)
        {
            curloc=3;
        }
        else if (curloc==2 && right)
        {
            curloc=1;
        }
        else if (curloc==3 && left)
        {
            curloc=1;
        }
        else if (curloc==3 && up)
        {
            curloc=4;
        }
        else if (curloc==4 && down)
        {
            curloc=3;
        }
        else if (curloc==4 && up)
        {
            curloc=5;
        }
        else if (curloc==5 && down)
        {
            curloc=4;
        }
        else if (curloc==5 && left)
        {
            curloc=6;
        }
        else if (curloc==6 && right)
        {
            curloc=5;
        }
        else if (curloc==6 && left)
        {
            curloc=7;
        }
        else if (curloc==6 && up)
        {
            curloc=11;
        }
        else if (curloc==7 && up)
        {
            curloc=6;
        }
        else if (curloc==7 && down)
        {
            curloc=8;
        }
        else if (curloc==8 && up)
        {
            curloc=7;
        }
        else if (curloc==8 && right)
        {
            curloc=9;
        }
        else if (curloc==9 && right)
        {
            curloc=10;
        }
        else if (curloc==10)
        {
            //freedom!
        }
        else if (curloc==11 && down)
        {
            curloc=6;
        }
    }
    public void ran(int randomnumber,int curloc ,Graphics canvas)
    {
        if (curloc==2 && randomnumber==1)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You have gained 10 health", 10, 100);
            health=health+10;
        }
        if (curloc==2 && randomnumber==2)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==3)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==4)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==5)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You have gained 10 strength", 10, 100);
            strength=strength+10;
        }
        if (curloc==2 && randomnumber==6)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==7)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==8)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==9)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==2 && randomnumber==10)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You trip and fall and break your ankle", 10, 100);
            canvas.drawString("You lose 5 health",10,120);
            health=health-5;
        }
        //showers
        if (curloc==3 && randomnumber==1)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==3 && randomnumber==2)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None",10,100);
        }
        if (curloc==3 && randomnumber==3)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You find an Energy Drink", 10, 100);
            canvas.drawString("You gain 10 strength",10,120);
            strength=strength+10;
        }
        if (curloc==3 && randomnumber==4)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==3 && randomnumber==5)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("None", 10, 100);
        }
        if (curloc==3 && randomnumber==6)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You trip and fall and break your ankle", 10, 100);
            canvas.drawString("You lose 5 health",10,120);
            health=health-5;
        }
        if (curloc==3 && randomnumber==7)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You find a First Aid Kit", 10, 100);
            canvas.drawString("You gain 25 health",10,120);
            health=health+25;
        }
        if (curloc==3 && randomnumber==8)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You trip and fall and break your ankle", 10, 100);
            canvas.drawString("You lose 5 health",10,120);
            health=health-5;
        }
        if (curloc==3 && randomnumber==9)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("none", 10, 100);
        }
        if (curloc==3 && randomnumber==10)
        {
            canvas.drawString("Random Events: ",10,80);
            canvas.drawString("You slip and fall and break your nose", 10, 100);
            canvas.drawString("You lose 5 health",10,120);
            health=health-5;
        }
        if (curloc==10 && randomnumber==1)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He dodges and you lose 5 health", 10, 100);
            health=health-5;
        }
        if (curloc==10 && randomnumber==2)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He dodges and you lose 5 health", 10, 100);
            health=health-5;
        }
        if (curloc==10 && randomnumber==3)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He dodges and you lose 0 health", 10, 100);
        }
        if (curloc==10 && randomnumber==4)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 5 health", 10, 100);
            health=health-5;
        }
        if (curloc==10 && randomnumber==5)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 0 health", 10, 100);
        }
        if (curloc==10 && randomnumber==6)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 5 health", 10, 100);
            health=health-5;
        }
        if (curloc==10 && randomnumber==7)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 0 health", 10, 100);
        }
        if (curloc==10 && randomnumber==8)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 5 health", 10, 100);
            health=health-5;
        }
        if (curloc==10 && randomnumber==9)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 0 health", 10, 100);
        }
        if (curloc==10 && randomnumber==10)
        {
            canvas.drawString("You lunge at the warden. ",10,80);
            canvas.drawString("He attacks and you lose 5 health", 10, 100);
            health=health-5;
        }


    }
    public void fight (Graphics canvas, int fightcount,int curloc)
    {

        if(curloc==10)
        {
            fightcount=fightcount-1;
        }
        else if (curloc==10 && fightcount==0)
        {
            JOptionPane.showMessageDialog(null, "You Win!");
        }
    }
    {

    }
    public void dispLoc(Graphics canvas)
    {
        if (curloc==1)
        {
            room1(canvas);
            //cell
        }
        if (curloc==2)
        {
            room2(canvas);
            //training
        }
        if (curloc==3)
        {
            room3(canvas);
            //showers
        }
        if (curloc==4)
        {
            room4(canvas);
            //Cell Block C
        }
        if (curloc==5)
        {
            room5(canvas);
            //Security Room1
        }
        if (curloc==6)
        {
            room6(canvas);
            //Guard Post
        }
        if (curloc==7)
        {
            room7(canvas);
            //Courtyard
        }
        if (curloc==8)
        {
            room8(canvas);
            //Security Room 2
        }
        if (curloc==9)
        {
            room9(canvas);
            //Tank
        }
        if (curloc==10)
        {
            room10(canvas);
            //Freedom
        }
        if (curloc==11)
        {
            room11(canvas);
            //Solitary Confinement
        }
    }
    public void stats(Graphics canvas)
    {
        canvas.drawString("Health: " + health, 750, 10);
        canvas.drawString("Strength: " + strength, 750, 30);
    }
    public void health(Graphics canvas, int health)
    {
        if (health==0)
        {
            JOptionPane.showMessageDialog(null,"You Died Game over!");
            System.exit(0);
        }
    }
     public void delayGame(double numSecs)
     {
        double delayTime = 1000 * numSecs;
        long startDelay = System.currentTimeMillis();
        long endDelay = 0;

        while (endDelay - startDelay < delayTime)
        {
          endDelay = System.currentTimeMillis();
        }
     }
     public int randomnum()
     {
         int n1=0;
         n1=(int) (Math.random()*10+1);
         return n1;
     }
     public void clearScreen(Graphics g)
     {
        g.setColor(Color.BLACK);
        g.fillRect(0,0,5000,5000);
     }
     public void keyPressed(KeyEvent e)
     {
      int key = e.getKeyCode();


      if (key == KeyEvent.VK_LEFT)
      {
        left = true;
        repaint();
      }

      if (key == KeyEvent.VK_DOWN)
      {
        down = true;
        repaint();
      }

      if (key == KeyEvent.VK_RIGHT)
      {
        right = true;
        repaint();
      }

      if (key == KeyEvent.VK_UP)
      {
        up = true;
        repaint();
      }

      if (key == KeyEvent.VK_SPACE)
      {
        space = true;
        repaint();
      }

      if (key == KeyEvent.VK_ENTER)
      {
        enter = true;
        repaint();
      }

     }
     public void focusGained(FocusEvent evt) {focus=true; repaint();}
     public void focusLost(FocusEvent evt) {focus=false;}
     public void keyReleased(KeyEvent e){}
     public void keyTyped(KeyEvent e) {}
     public void restart(Graphics g){}

}

在问题代码块中,如果第二个if为真,那么第一个if也总是真的,对吗?所以第一个会一直运行,而第二个会被else阻塞,永远不会运行。你可以把else条件放在第一位,或者更好的做法是

if(curloc==10)
{
    if (fightcount==0) {
        JOptionPane.showMessageDialog(null, "You Win!");
    } else {    
        fightcount=fightcount-1;
    }
}

好吧,我想你是在讨论fight方法中的fightcount变量吧?如果是这样的话,那么它不会改变,因为您正在减少传递的int,一旦该方法完成,这将没有任何效果

int fightcount;
public void fight (Graphics canvas, int curloc)
{
    if(curloc==10)
    {
        fightcount=fightcount-1;
    }
    else if (curloc==10 && fightcount==0)
    {
        JOptionPane.showMessageDialog(null, "You Win!");
    }
}
我并不是建议你真的这么做,因为这是一段糟糕的代码,上面只是一个例子,但是你需要更新一个在方法之外的fightcount字段。i、 e.不是方法参数…

战斗方法仅更改fightcount的本地副本。如果你通过10,那么它将变为9,但不会超出战斗方法

如果您想在全球范围内更改它,请声明它是静态的,不要将其传递给fight,这不会造成伤害,但会造成混乱

一些解释:

int是一个java原语,原语是通过值传递的。因此,实际上您将值10发送给该方法,而不是外部fightcount变量的引用。在该方法中,传入值10被分配给一个新的局部变量fightcount,该变量的值被递减

如上所述的快速修复:

替换

int strength=0, health=100, curloc=1,randomnumber=0,fightcount=10;

和方法签名

public void fight (Graphics canvas, int fightcount,int curloc)


Wow tl;博士你犯了什么错误?老板的战斗变量没有改变。我不知道怎么解决。游戏结束时有什么问题?当你粘贴这么多的代码时,如果有问题的话,你自然要多解释一些问题。MissingBossFightException-无法结束游戏。。。好的,boss fight变量在哪里?fightcount变量保持在10。我不明白你想说什么,所以我必须将其设置为int而不是void方法并返回fightcount。我相信他的意思是你需要在类中将其设置为静态字段,不是该方法的参数。@wardedmocha-我已经编辑了我的答案,并包含了修复您的问题的代码片段
public void fight (Graphics canvas, int fightcount,int curloc)
public void fight (Graphics canvas, int curloc)