首页 > 解决方案 > 如何将以下 C++ 代码编写为 java 类文件(名为 Monstor)

问题描述

#ifndef MONSTOR_H_INCLUDED
#define MONSTOR_H_INCLUDED
#include "Player.h"


class Monstor : public Creature
{
public:
enum Type
{
    DRAGON,
    ORC,
    SLIME,
    MAX_TYPES
};
struct MonstorData
{
    const char *name;
    char symbol;
    int health;
    int damage;
    int gold;
};

static MonstorData monstorData[Monstor::MAX_TYPES];

Monstor(Type type):
    Creature(monstorData[type].name, monstorData[type].symbol, monstorData[type].health, monstorData[type].damage, monstorData[type].gold)
{
}

static int getRandomNumber( int min, int max)
{
    static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
    return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}

static Monstor getRandomMonstor()
{
    int temp = getRandomNumber(0, MAX_TYPES - 1);

    return Monstor(static_cast<Type>(temp));
}
void levelUp()
{
    m_damage++;
}
};

Monstor::MonstorData Monstor::monstorData[Monstor::MAX_TYPES]
{
{"dragon", 'D', 20, 10, 100},
{"orc", 'o', 4, 5, 25},
{"slime", 's', 1, 3, 10}
};
//Monstor::monstorData[0].damage++;


#endif // MONSTOR_H_INCLUDED

最挑战我的是 Struct 数组,枚举类型到目前为止我已经创建了一个名为 Monster 的类,它扩展了 Creature,但是生物需要一个名称作为参数传递,该名称是从底部的枚举数组中获得的。

请帮忙

这是我在下面的尝试,我在 monsterData[0]、[1]、[2] 上遇到错误

class MonsterData {
String name;
char symbol;
int health;
int damage;
int gold;
MonsterData(String name, char symbol, int health, int damage, int gold){
    this.name=name;
    this.symbol=symbol;
    this.health=health;
    this.damage=damage;
    this.gold=gold;
}

}

public class Monstor extends Creature {
public enum Type{
    DRAGON("0"),
    ORC("1"),
    SLIME("2"),
    MAX_TYPES("3");

    private String value;

    Type(String value){
        this.value = value;
    }
    @Override
    public String toString() {
        return value;
    }
}

   public MonsterData[] monsterData = new MonsterData[Integer.parseInt(Type.MAX_TYPES.toString())];

   monsterData[0] = new MonsterData("Dragon", 'D', 20, 10, 100);
    monsterData[1] = new MonsterData("orc", 'O', 4, 5, 25);
    monsterData[2] = new MonsterData("slime", 'S', 1, 3, 10);

标签: javac++

解决方案


我不确定您为什么要在 C++ 或 Java 中创建单独的 Monstor 类和 MonstorData 类/结构。面向对象编程的全部意义在于您将数据和行为封装在同一个类中。

Java 有看起来像 C++ 的枚举,可能需要一个额外的分号,但如果你在另一个类中定义它们,你想让它们成为静态的。

在 Java 中,您可以拥有一个类数组,但通常使用 Collection 更好。然而,在java中,数组并不包含整个对象,只是对对象的一个​​空引用。所以,要定义数组,你仍然需要调用 new。

class Thing {
    private int intVal;
    private String name;
    public Thing(String name, int intVal) {
        this.name = name;
        this.intVal = intVal;
    }

    private static Thing[] theThings{
        new Thing("Thing 1", 1), 
        new Thing("Thing 2", 2)
    }
}

推荐阅读