突っ込みどころ満載?

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

突っ込みどころ満載?

投稿記事 by SAI » 14年前

ちびたれ探してきました。


うん、ないわ。

どこに行ってもリラックマばかりです。
普通のたれぱんだすらいない。

それを姉に言ったら、
「ブームは去った」
とのことです。


( ゚д゚ )



ちくっしょう・・・俺が何をしたというんだ・・・ orz


・・・でもリラックマもカワイイなあ。
そんなわけで本題です。
これは私のプログラムの一部を貼り付けたものです。自分で打ちながらこれはヒドイと思ったので。
突っ込みどころ満載です。プログラマーが見たらフルボッコされそうで怖いです。

CODE:

     for(int j = 0 ; j < MAX_ENEMY_SHOT ; j ++ )
	{
	     if( EnemyShot.EnemyTamaGraph[j]== enemy_shot_graph[19])
	     {
            EnemyShot.EnemyTamaPosition_x[j]=BossPosition_x+(EnemyShot.EnemyTamaCount[j]*2+EnemyShot.EnemyTamaFlag[j]*8)*cos(EnemyShot.EnemyTamaKacdo[j]+EnemyShot.EnemyTamaCount[j]*2*PI/500);
            EnemyShot.EnemyTamaPosition_y[j]=BossPosition_y+(EnemyShot.EnemyTamaCount[j]*2+EnemyShot.EnemyTamaFlag[j]*8)*sin(EnemyShot.EnemyTamaKacdo[j]+EnemyShot.EnemyTamaCount[j]*2*PI/500);
         }
    }
うん、動けばいいやもここまで来るとね。
次のゲームからはちゃんと修正しますよ?

ああ
記事: 49
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by ああ » 14年前

このfor(int j
for文内で変数宣言しない方が処理が早くなりますよ!

若干ですがw

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by ナムアニクラウド » 14年前

 変数名はプログラマーの自由だと思いますが、これはちょっと長いかも…?
枠外にはみ出して途中から見れませんw
自分としては、EnemyShotクラスのメンバ名に"EnemyTamaなんとか"、とつける必要はないと思います。
EnemyShot.メンバ と呼び出した時に「EnemyShotに関する変数だな」って分かりますからね。
今から修正するとプログラム全体の作業になりそうで怖いですが・・・

 しかし一番気になるのは

CODE:

cos( EnemyShot.EnemyTamaKacdo[j] + EnemyShot.EnemyTamaCount[j] * 2 * PI / 500 );
sin( EnemyShot.EnemyTamaKacdo[j] + EnemyShot.EnemyTamaCount[j] * 2 * PI / 500 );
でしょうか・・・(はみ出て見えていない部分です)
なぜこのようなことに・・・

アバター
あーる@Reputeless
記事: 84
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by あーる@Reputeless » 14年前

> NNK さん
このような単純なループでは、
少なくとも Visual C++ で最適化を有効にしてビルドすれば、ループカウンタ変数の宣言位置に依らず、同じ機械語が生成されるみたいです。

ちなみに、
プロジェクトのプロパティ→構成プロパティ→C/C++→出力ファイル→アセンブリの出力
を設定すれば、出力したアセンブリコードを読み比べることができます。

ああ
記事: 49
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by ああ » 14年前

>あーるさん
にわか知識ですいません。
あくまでも最適化の設定してないdebugぐらいでしか意味がないので、基本的には気にしてなくても良いらしいですね!

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

Re: 突っ込みどころ満載?

投稿記事 by SAI » 14年前

>ナムアニクラウドさん
EnemyShot.というクラス名がそもそも長いので、だいぶはみ出しちゃってますね。このクラスのオブジェクトは1つしか作ってないので、ESと省略しても紛らわしくありませんでした。(ここがおかしいのですが。)
そしてEnemyTamaなんとかとつける理由は、別のクラスのプログラムをコピーしてきた際に、変数が差すものが変わってしまうのを防ぐためです。でもこれはちょっと長いですよね。

そして
cos( Kacdo[j] + Count[j] * 2 * PI / 500 );
コイツ(長いのでいらないとこを省略)ですが、これはただ弾が回転してるだけです。
Kacdoにランダムな値が入っており、500フレームで1回転します。ボスの座標を中心に。

アバター
へろりくしょん
記事: 92
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by へろりくしょん » 14年前

言うほどの問題は無いと思いますが。
変数名を除いては。

>EnemyShot.というクラス名がそもそも長いので

オブジェクト名ですね。
別に長くは無いと思いますよ。
長いのはメンバ名です。
ただ今回は、メンバ名の長さより名前の付け方の方がやや問題かと。

原則的に、識別子名はその識別子が存在する階層で閉じられている事が理想です。

例えば、次のようなクラスがあったとして

class CShot{
int flag;
int count;
int xpos;
int ypos;
};

クラス CShot はあくまでもショットを管理するクラスであり、それを誰が保有するかを問うべきではありません。

道具が使い手を選ぶのではなく、使い手が道具を選ぶのです。

CShot をボスに持たせたい場合は

class CBoss{
CShot shot;
};

とすれば、

CBoss boss;
boss.shot.xpos; というコードは、ボスのショットの X 座標。 と読み下す事が出来ますね。


>ESと省略しても紛らわしくありませんでした。

これはちょっとどうかと。
クラス名や、グローバル変数名は識別子の階層においては最上位に位置します。 ここはしっかりと名前を付けたいところです。


>別のクラスのプログラムをコピーしてきた際に、変数が差すものが変わってしまうのを防ぐためです。

変数が指す物が変わってしまうというのがよく分かりませんが、いわゆるコピペ指向プログラミングはお勧めはしません。

構造化を意識して、識別子名が常に上流から下流へのみ流れるようにしてれば、無用な心配だと思うのですが、どうでしょうか。


まぁ、私見ですので異論がある場合は聞き流してください。

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

Re: 突っ込みどころ満載?

投稿記事 by SAI » 14年前

>へろりさん
プログラミングって難しいですね・・・。
クラスのメンバにクラスを使えるのをすっかり忘れてました。
弾の管理が大変そうですが、これは使ってみたいと思います。
いずれ。(いつだよ)
その場合にはクラス名を省略してしまうのはよくないですよね。
今回の場合は、だいぶ前にクラスの使い方を間違えて作ったので、クラス名はただの飾りになってしまったのです。
だから省略してもいいと思ったわけですね。
まあ、根本が間違ってるという(^_^;)

ISLe
記事: 2650
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by ISLe » 14年前

> 変数が差すものが変わってしまう
ザコキャラの動きの一部をボスキャラで使いたいと思ったときコピペしたあとEnemyをBossに書き換えたりするのは面倒臭くないですか?
キャラクタのクラスの内部構造はだいたい同じになるはずなので固有名詞を使わないほうがコードの流用が楽になると思いますけど。

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

Re: 突っ込みどころ満載?

投稿記事 by SAI » 14年前

>ISLeさん
実はその点は大丈夫なのです。
なぜなら、ボスもザコの一部としているからです。

アバター
ゆーずぃ
記事: 62
登録日時: 14年前

Re: 突っ込みどころ満載?

投稿記事 by ゆーずぃ » 14年前

>ボスもザコの一部としているからです。

吹きましたw
つまり突然弾幕を垂れ流す(本当の)ザコがいるかもしれないわけですね(о'д')bwww