質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

5回答

635閲覧

オブジェクト指向でのゲーム

yukkuri

総合スコア624

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

1クリップ

投稿2018/10/15 10:53

前提・実現したいこと

オブジェクト指向について質問です。
たとえば、ドラクエみたいなゲームを作るとします。そこに、敵が200種類出てくるとします。

そうした際、Monsterクラスのインスタンスで普通のモンスター、Monsterクラスを継承したBossクラスのインスタンスでボスのデータ、というように200種類書くのでしょうか。
10種類とかだったらまだしくも、200とかだと実際に書くのか、何か技を使うのか知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

Monsterクラスに名前や属性、ステータスなどのフィールドを作れば良いです。
各モンスターのパラメータは外部ファイルで管理します。

Monsterクラスのインスタンスで普通のモンスター、Monsterクラスを継承したBossクラスのインスタンスでボスのデータ、というように200種類書くのでしょうか。

何らかの区分でクラスを分けるとしても、さすがにモンスター毎にはならないかと。

投稿2018/10/15 11:19

編集2018/10/15 11:25
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkuri

2018/10/15 11:23

ほう、外部ファイルで管理するのですね!そうすればソースに書き込む必要もないので、ソースを短くすることができますね!
guest

0

設計によります、が手っ取り早い回答ではあります。
1種類1種類異なる要素を持つなら200種類書かなければいけませんし、
全て同じ要素で済むなら1つだけの定義で済みます。

Slimeクラスなど種類ごとにクラスを作るのか、
Monster.name: "スライム"とするのかは設計次第です。

なるべく共通化させるのが良い設計と言えるので、200種類全部定義するのは
個人的にはあまり良くないと思いますね。

投稿2018/10/15 11:18

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報

  • 異なる種類の敵はクラスを分けるべきか

https://dixq.net/forum/viewtopic.php?t=14077

  • ゲームAIの基礎と事例

https://www.slideshare.net/misolmiso/ai-54367524

  • ストラテジーパターンを用いた、敵(Enemy)クラスの設計

https://qiita.com/zamaka9/items/34fea28861ec175ca30d

  • RPGのモンスターなどのキャラクターを作成するときに使うデザインパターン

https://qiita.com/what/items/9dee3d3f033e1b248336

投稿2018/10/15 15:49

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

次のような感じで抽象化します。
回答内容としては、LouiS0616さんと同じです。

名前だけでなく、耐性やAIなども抽象化して、メソッドやプロパティ、フィールドとして用意します。

c#

1public class Monster 2{ 3 public int Type = 0; 4 public string TypeName { get => GetMonstarTypeName(this.monsterType); } 5 public string InstName = "個体名ヌルポガ"; 6 public int Health = 100; 7 public Monster(int monsterType) 8 { 9 this.Type = monsterType; 10 this.InstName = GetMonstarInstName(this.Type); 11 this.Health = GetMonsterHealth(this.Type); 12 } 13}

投稿2018/10/15 12:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkuri

2018/10/15 13:02

ソースまで書いてくださり、ありがとうございます。てきぱきとベストアンサーを決めてしまったことを後悔しています。 質問なのですが、4列目の get => のような処理はどのような処理なのでしょうか。C#は触った程度でしかなくて…
dice142

2018/10/15 13:13

たしかベストアンサーって変更できましたよね? 私はざっくり回答しただけなので、変更できるならして大丈夫ですよ。
退会済みユーザー

退会済みユーザー

2018/10/15 13:36 編集

TypeNameは種族名のつもりで用意しました、この種族名を取得するのがstaticなメソッドであるGetMonsterTypeNameです(このあたりの定義は省略してます)。インスタンスごとに種族名を変数として持たせるより、get => と、プロパティとして持たせ、その実、取得はstaticメソッドにさせるのが筋かなーという発想でこのようにしました。(プロパティへのアクセスがかなり頻繁にあるような場合は、変数として持たせたほうがよいかもしれませんが…趣味で作ったことがある程度の知識なのでその点ご注意ください) get => というのはプロパティ-のsetter(値をセットする)、ゲッター(値を取得する)のうち、ゲッターを表す書き方です。詳細は、プロパティやアクセッサーというワードでぐぐってみてください。Javaなどにもある仕組みです。 ベストアンサーは変えなくても大丈夫ですよ~。
guest

0

Monstarクラスに何の特徴(プロパティ)と、どんな役割(メソッド)を持たせるか次第ではないかと思いますよ。

投稿2018/10/15 11:27

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問