当前位置: 首页 > 知识库问答 >
问题:

口袋妖怪课程中的健康调整问题

祝宏放
2023-03-14

我有两门课叫口袋妖怪。java和Move。java,其中包含创建和修改口袋妖怪及其移动的方法。我已经创建了所有必需的方法,但我在攻击方法上遇到了问题,攻击方法应该是在对手受到攻击时减去对手的生命值。

以下是口袋妖怪的代码。java类:

import java.util.ArrayList;
public class Pokemon
{
    // Copy over your code for the Pokemon class here
    // Private constants
    private static final int MAX_HEALTH = 100;
    private static final int MAX_MOVES = 4;
    private String name;
    private int health;
    private int opponentHealth;
    public static int numMovesForPokemon = Move.getNumOfMoves();
    private Move move;
    private static ArrayList<Move> moveListForPokemon = new ArrayList<Move>();
    private String pokemonImage;

    // Write your Pokemon class here
    public Pokemon(String theName, int theHealth)
    {
        name = theName;
        if(theHealth <= MAX_HEALTH)
        {
            health = theHealth;
        }
    }

    public Pokemon(String name, String image)
    {
        this.name = name;
        health = 100;
        pokemonImage = image;
    }

    public Pokemon(String theName)
    {
        name = theName;
    }    

    public void setImage(String image)
    {
        pokemonImage = image;
    }

    public String getImage()
    {
        return pokemonImage;
    }

    public String getName()
    {
        return name;
    }

    public int getHealth()
    {
        return health;
    }

    public boolean hasFainted()
    {
        if(health <= 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean canLearnMoreMoves()
    {
        if(numMovesForPokemon < 4)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean learnMove(Move other)
    {
        if(canLearnMoreMoves())
        {
            moveListForPokemon = Move.getList();
            moveListForPokemon.add(other);
            numMovesForPokemon++;
            return true;
        }
        else
        {
            return false;
        }
    }

    public void forgetMove(Move other)
    {
            moveListForPokemon.remove(other);
    }

    public static ArrayList<Move> displayList()
    {
        return moveListForPokemon;
    }

    public boolean knowsMove(Move move)
    {
        if(moveListForPokemon.contains(move))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean knowsMove(String moveName)
    {
        if(moveListForPokemon.contains(move.getName()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean attack(Pokemon opponent, Move move)
    {
        if(knowsMove(move))
        {
            opponentHealth = opponent.getHealth();
            opponentHealth -= move.getDamage();
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean attack(Pokemon opponent, String moveName)
    {
        if(knowsMove(moveName))
        {
            opponentHealth = opponent.getHealth();
            opponentHealth -= move.getDamage();
            return true;
        }
        else
        {
            return false;
        }
    }    

    public String toString()
    {
        return pokemonImage + "\n" + name + " (Health: " + health + " / " + MAX_HEALTH + ")";
    }
    // Add the methods specified in the exercise description
}

这是搬家的代码。java类:

import java.util.ArrayList;
public class Move
{
    // Copy over your code for the Move class here
    private static final int MAX_DAMAGE = 25;
    private String name;
    private int damage;
    public static int numMoves;
    private static ArrayList<Move> moveList = new ArrayList<Move>();

    public Move(String theName, int theDamage)
    {
        name = theName;
        if(theDamage <= MAX_DAMAGE)
        {
            damage = theDamage;
        }
    }

    public String getName()
    {
        return name;
    }

    public int getDamage()
    {
        return damage;
    }

    public static int getNumOfMoves()
    {
        return numMoves;
    }

    public static ArrayList<Move> getList()
    {
        return moveList;
    }    

    public String toString()
    {
        return name + " (" + damage + " damage)";
    }    
    // Add an equals method so we can compare Moves against each other

    public boolean equals(Move other)
    {
        if(name.equals(other.getName()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }     
}

最后,这里是口袋妖怪的代码。java,我在这里测试这些方法:

public class PokemonTester extends ConsoleProgram
{
    private PokemonImages images = new PokemonImages();
    public void run()
    {
        // Test out your Pokemon class here!
        Pokemon p1 = new Pokemon("Charrizard", 100);
        Pokemon p2 = new Pokemon("Pikachu", 100);
        Move m1 = new Move("Flamethrower", 20);
        Move m2 = new Move("Fire Breath", 15);
        p1.learnMove(m1);
        System.out.println(p1.knowsMove(m1));
        System.out.println(p1.knowsMove("Flamethrower"));
        System.out.println(p1.attack(p2, m1));
        System.out.println(p2.getHealth());
    }
}

共有2个答案

松刚豪
2023-03-14

首先分配opont的值。getHealth()到int变量oponentHealth,然后对其进行修改,但是此修改不会影响对手的健康,而是只影响oponentHealth变量,你要么直接访问并修改对手的生命值字段,要么在口袋妖怪类中实现某种setHealth(int health)方法

蒙墨竹
2023-03-14

我想你的问题是:

opponentHealth = opponent.getHealth();
opponentHealth -= move.getDamage();

此代码有几个问题:

  • 我建议使用局部变量来表示opponentHealth,而不是类级别字段
 类似资料:
  • 我创建了一个口袋妖怪应用程序,但当我试图运行它时,它总是崩溃。应用程序只需要移动地图上的口袋妖怪。使用的IDE是Kotlin。请帮助我找到为什么我的应用程序崩溃的错误。代码是:class MapsActivity:AppCompatActivity(),OnMapReadyCallback{ } 我的名字是Aakarsh Kamboj,我最近开始了android的开发

  • 我试图通过GKE部署应用程序。到目前为止,我为应用程序的前端和后端创建了两个服务和两个部署。我使用“gce”控制器创建了一个ingress ressource,并映射了服务,如图所示 它几乎工作得很好(不是所有映射正确的根,但它工作得很好)。我在代码上添加了修改(只有应用程序的代码),我重建了图像并重新创建了服务,但入口似乎对我添加的修改和 我所有的服务都处于不健康状态 这是前台服务 当我描述时,

  • 设置-1:(不工作) 我有一个任务正在ECS集群中运行。但由于在它开始后立即进行了健康检查,它正在下降。 我的服务是基于spring boot的,它有流量(用于服务调用)和管理端口(用于健康检查)。我有“*/health”路径的“权限。 PFA:我也通过在TG运行状况检查选项卡中选择覆盖端口选项进行了相同的配置。 因此,我尝试在容器部分的任务定义上配置管理端口。我尝试为TD的最新版本更新相应的服务

  • 问题内容: 我遵循了负载均衡器教程:https : //cloud.google.com/container- engine/docs/tutorials/http-balancer 在使用Nginx映像时,当尝试使用自己的应用程序映像时,它工作正常后端切换为不正常。 我的应用程序重定向到/(返回302),但在pod定义中添加了一个: 我的入口看起来像: 服务配置为: 后端健康状况如下: 入口的规

  • 我遵循了负载均衡器教程:https://cloud.google.com/container-engine/docs/tutorials/http-balancer当我使用Nginx映像时工作正常,当我尝试使用我自己的应用程序映像时,尽管后端切换到不健康。 我的应用程序重定向到/(返回302),但我在pod定义中添加了一个livenessProbe: 我的入口看起来像: 服务配置为: 入口中的后端

  • 我们正在使用confluent kafka control center,但out system health页面不起作用,总是显示重试。 我通过了文档,验证了设置是相同的,但仍然面临这个问题。 它抛出的错误是无法检查ulimited:无法运行程序ulimited错误=2没有这样的文件或目录(io.confluent.controlcenter.healthcheck.HealthCheck) 除