🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1081閲覧

しっくりくる変数名。

Tomo0225

総合スコア67

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/12/13 12:09

変数名で悩んでいます。分かりやすいようにポケモンで例えます。
ポケモンで戦闘中麻痺しているポケモンは攻撃時1/4で麻痺して攻撃が失敗してしまいます。(自作中のゲームでは確率は1/2です)。
そこでMonsterクラスに以下のように変数とメソッドを配置しています。

Monster

1const int PARISEPROBABILITY = 5; //麻痺率を定義 2Abnormality Abnormality; //状態異常のenum値 3 4public bool isParise() 5{ 6 if (this.Abnormality == Abnormalitys.Parise) return true; 7 return false; 8} 9 10//モンスターが麻痺状態のとき麻痺が発生するかしないか判定 11public bool pariseJudge() 12{ 13 if(UnityEngine.Random.Range(0, PARISEPROBABILITY) == 0){ 14 return true; 15 } 16 return false; 17} 18 19//攻撃時に麻痺が発生したかどうかを判定するメソッド 20public bool isAttackMissForParise() 21{ 22 bool isParise = this.isParise(); 23 bool pariseJudge = this.pariseJudge(); 24 if(isParise && pariseJudge){ 25 return true; 26 } 27 return false; 28}

悩んでいるのは変数名の
PARISEPROBABILITY
とメソッド名の
pariseJudge()
isAttackMissForParise()
です。
メソッドの中身を見なくても使い方や意味が分かるものにしたいのですがいい名前が思いつきません。知恵をお貸しいただけないでしょうか。

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

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

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

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

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

Daregada

2020/12/13 12:19 編集

あの、「麻痺させる」(他動詞)の英単語は「paralyze」(または「paralyse」で、「麻痺」(名詞)なら「paralysis」、「麻痺した」(形容詞)なら「paralyzed」(または「paralysed」)です。 片仮名で書くと、「パラライズ」「パラリシス」「パラライズド」です。
fumu7

2020/12/13 12:20

無理に英語っぽい造語を作らずに、ローマ字を使うのが良いと思います。 例えば、関数mahiShiteiru() は、麻痺していたらTrue,していなかったらFalseを返すというように。 "麻痺している"という名前の関数なら、麻痺してたら真(True)が返されるだろうなと想像がつくでしょう。 日本人なら、大多数がローマ字を読めるでしょうし。
Tomo0225

2020/12/13 12:34

Daregadaさん Pariseという単語自体間違ってたんですね。ありがとうございます。 fumu7さん ローマ字で表現する方法もあるんですね。参考になりました。ありがとうございます。
Zuishin

2020/12/14 02:11

ローマ字の問題点は、日本人しか読めないし、漢字が使えないために同音異義語がわかりにくくなって日本人にも読みにくくなることです。 日本特有の言葉でなければ翻訳ツールを使ってでも英語表記に慣れるのが後々のためにはいいのではないでしょうか。 そうでなければむしろ漢字を使う方がまだ良いように思います。 でなければ日本人としかチームを組めないし、ソースを公開したくなった時に困ります。
guest

回答2

0

Abnormality

ゲームの状態異常は「バステ」とか呼ぶことが多いようなので,BadStatusとか.

で,
どういう感じでそれらのメソッドを使うのかわかりませんが,publicメソッドにしては細かい話なように思えます.

例えば,知りたいのが「(このターン?)に行動可能なのか行動不能であるか」なのであれば,

C#

1//行動可否をチェック. 2//行動可能な場合には,Item1がtrueである戻り値を返す. 3//行動不能の場合には,{Item1がfalse, Item2がその原因となった状態異常の種類を示す}なる戻り値を返す. 4public Tuple<bool,BadStatus> CanAct()

みたいなのがあれば良いように思えます.
(戻り値がダサい気もするが…)

public bool isParise()

も,
{状態異常の種類が複数個あって,知りたいのが「特定の状態異常にかかっているかどうか」}であれば,引数にBadStatus型を指定する形にすれば纏まるように思います.

C#

1//状態異常のチェック. 2//引数に指定した状態状態にかかっているか否かを返す 3public bool CheckBadStatus( BadStatus bs )

投稿2020/12/14 01:48

fana

総合スコア11985

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

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

Tomo0225

2020/12/14 02:08

ありがとうございます。大変参考になります。 状態異常はAbnormalityなんかよりBadStatusという言い方があるんですね。 Tupleは使ったことないですが、今後氷状態とか行動停止の原因が増えた場合にCanAct()のような書き型が有用そうですね。メソッド名も分かり安くて参考になります。 今は状態異常にパライズとポイズンがありisParise()とisPoison()メソッドを置いているのですがcheckBadStatus()も分かりやすいですね。どっちがいいかは読む人次第になりそうですね。
fana

2020/12/14 02:21

> isParise()とisPoison() という形だと,状態異常の種類が増える毎にメソッドが増える: 例えば,状態異常の個数分のメソッドが10個とか並んでる形になる.それを好むかどうか(?)ですかね. (私は回答のように纏めたい側)
fana

2020/12/14 02:32

> //攻撃時に麻痺が発生したかどうかを判定するメソッド みたいなのも,状態異常毎に個別にあるのだと 「麻痺で行動不能か?」 「氷で行動不能か?」 「HP0で行動不能か?」 … というチェックを呼び出し側でたくさん行う必要があって面倒そうだなぁ,と. それが必要なのだとしても,個別の異常専用のメソッドにせずに, bool CannotActBy( BadStatus reason ) //引数指定の状態異常のせいで行動不能なのであればtrueを返す とかに纏めたいかな.
guest

0

ベストアンサー

私ならば
isAttackMissForParise→isFreeze
とします。

PARISEPROBABILITY
pariseJudge
は、ここでしか使われないので、privateメソッド化することで、名前に拘りません。

投稿2020/12/13 12:21

HogeAnimalLover

総合スコア4830

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

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

Tomo0225

2020/12/13 12:34

回答ありがとうございます。isFreezを使わせさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問