0
私はECS/Composition over inheritanceで読書をしていましたが、私が現在取り組んでいるコンセプトを理解するために、現在取り組んでいるテキストアドベンチャーゲームを変更することに決めました。javaで簡単なテキストアドベンチャーゲームを実装する(インターフェイスで作業する)
私はゲームで特定の武器を使って試してみることに決めました。
私のゲームでは、すべての武器がIGameObjectと見なされるというロジックがあります。
武器インタフェース:
public interface IWeapon {
int getWeaponDamage();
}
武器クラス:
public class Weapon implements IWeapon {
private int damage;
public Weapon(int damage)
{
this.damage = damage;
}
@Override
public int getWeaponDamage() {
return this.damage;
}
IGameObjectインタフェース:
public interface IGameObject {
String getGameObjectID();
String getGameObjectName();
String getGameObjectDescription();
}
ゲームオブジェクトクラス:
念頭に置いてこのすべてで、私は、次のを思い付きましたpublic class GameObject implements IGameObject {
private String ID;
private String name;
private String Desc;
public GameObject(String ID, String name, String Desc)
{
this.ID = ID;
this.name = name;
this.Desc = Desc;
}
このすべて使用抽象クラス:
public abstract class GameGun implements IGameObject, IWeapon {
IGameObject gameObj;
IWeapon weaponObj;
//Left out getters to keep it simple and easy to read.
public GameGun(IGameObject game, IWeapon weapon)
{
this.gameObj = game;
this.weaponObj = weapon;
}
public void fire()
{
System.out.println("Shot Fired");
}
public void reload()
{
//implementation for reload method
}
はすべて一緒にそれを置くことを:
主な方法:
GameObject sleep = new GameObject("SLP-1","Sleep Weapon","A Custom Made Gun");
Weapon sleepDamage = new Weapon(10);
GameGun sleepWeapon = new SleepWeapon(sleep,sleepDamage);
質問:
- 私はただ望みました私の実装が正しいかどうかを知る
- そうでない場合は、どうすれば修正できますか?
あなたはgamegunオブジェクトを必要とする理由私は理解していませんでしたか?だからbetterCode()の例で私はそれを使用していない!例を見てください!お楽しみください:D – jeorfevre
これは多くのありがとう!私が正しい道を歩いているのを見てうれしかった。すべての武器が銃であるわけではないので、私はGameGun抽象クラスを持っていました。私はまた剣が欲しいかもしれない。 GameGunはガンの基本的なアクションを処理します。一方、武器は戻ってダメージを受けます。 –
コードの90%が機能していました。私はGameGunクラスをやっていません。なぜなら、関数の戻り値を渡すためには、定型コードを何度も繰り返すからです。あなたはゲームを書くためにスカラーを考えてきましたか?コードはリーンで清潔です。それに見えるコストの価値がある!また、解決策があなたのために良かったかどうかを検討する:)。 – jeorfevre