java - 如何将以下 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);
解决方案
我不确定您为什么要在 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)
}
}
推荐阅读
- postgresql - 函数 pg_table_size 确实显示实际表大小
- python - 当一行上有多个导入时,如何使 isort 始终产生多行输出?
- c# - 更改列 ASP.NET Core MVC 的显示名称
- xml - 以表格形式列出ofbiz实体
- django - Django 自定义异常返回 503 并跳过发送管理员电子邮件
- c - C11 原子与序列点的关系
- sap-cloud-sdk - 目标服务 API 规范的 OpenAPI 生成器问题
- java - 传递 JVM 属性在 Dockerfile CMD 命令中包含空格
- databricks - 无法使用 GCP 在数据块中配置集群
- graphql - GraphQL Java 自定义标量的强制输入和输出类型应该是什么?