直した方がいいとこ見てもらえませんか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
パコネコ
記事: 139
登録日時: 13年前
住所: 大阪

直した方がいいとこ見てもらえませんか?

#1

投稿記事 by パコネコ » 13年前

いろいろと気に食わない部分があるので、プレイヤーのプログラムを書き換えようと思うのですが、
せっかくなので、「ここも直しといた方がいいと思うよ」ってところがあったら教えてほしいです。
ちょっとだけ長いかもなので、ヘッダだけコピペです。
cppファイルは付加しときます。
プレイヤーのヘッダです。

コード:

#ifndef DEF_PLAYER_H //二重include防止
#define DFE_PLAYER_H
enum POSE{
	POSE_LEFT_STOP,
	POSE_LEFT_RUN,
	POSE_LEFT_ATTACK,
	POSE_RIGHT_STOP,
	POSE_RIGHT_RUN,
	POSE_RIGHT_ATTACK,
	POSE_MAX,
};
#define MOTION_MAX 8
struct MOTION{
	int		Max;
	float	Speed;
};

class c_PLAYER{
private:
    int PlayerImg[POSE_MAX][MOTION_MAX];    //PAKO0621_プレイヤーの画像入れ
	Point2D Point;			//プレイヤーの座標
	Point2D Speed;			//プレイヤーのスピード
	Point2D TempSpeed;		//プレイヤーのスピード(ただし毎回0に初期化される)
	POSE	Pose;			//ポーズは向きなどの情報?もしくは状態?
	MOTION	Motion[POSE_MAX];//プレイヤーのモーションの情報(モーションの速さと、最大数)
	float	MotionCount;	//プレイヤーの現在のモーション(小数点以下切り捨て)
	Ball2D	body,			//プレイヤーの体
			food1,			//プレイヤーの足1
			food2;			//プレイヤーの足2
	int		JumpCount,		//プレイヤーの連続ジャンプ数(地面に付いたら0になる)
			JumpMax;		//プレイヤーの連続ジャンプ最大数
	float	JumpPower;		//プレイヤーのジャンプ力(大きいほど高く飛ぶ)
public:
	void PoseChange(POSE);	//プレイヤーのポーズ(状態?)を安全に変更する。

	void M_Init(void);		//プレイヤーのモーションの初期設定を行う
	void M_Count(void);		//プレイヤーのモーションをカウントする?
	Ball2D R_body(void);	//プレイヤーの体の座標を得る
	Ball2D R_food1(void);	//プレイヤーの足1の座標を得る
	Ball2D R_food2(void);	//プレイヤーの足2の座標を得る

	int H_food1(void);		//プレイヤーの足1の当たり判定を行う
	int H_food2(void);		//プレイヤーの足2の当たり判定を行う
	int H_food(void);		//プレイヤーの足1及び足2の当たり判定を行う


	void P_Init(void);		//パラメータの初期化
    void P_ImgLode(void);      //PAKO0621_画像のロード
	POSE R_POSE(void);		//現在のポーズを得る
	int R_Motion(void);		//現在のモーションを得る

	float R_PointX(void);		//x座標を得る
	float R_PointY(void);		//y座標を得る
	Point2D R_Point(void);		//座標を得る
	float R_SpeedX(void);		//xの移動量を得る
	float R_SpeedY(void);		//yの移動量を得る
	Point2D R_Speed(void);		//移動量を得る

	void SetPointX(float);			//X座標をセットする
	void SetPointY(float);			//Y座標をセットする
	void SetPoint(float,float);		//座標をセットする。
	void SetSpeedX(float);			//Xの移動量をセットする
	void SetSpeedY(float);			//Yの移動量をセットする
	void SetSpeed(float,float);		//移動量をセットする。

	void InputMove(void);
	void Movement(void);			//座標を動かす。
};
extern c_PLAYER Player;
#endif
プレイヤー部分だけではおそらく分からない部分もたくさんあると思いますが、
書き方ややめた方がいい場所など指摘していただければうれしいです。

自分で書き換えたいなと思ってるのは、インクルードしないと逝けないものがおおいと言うことです。
ですが当たり判定とかを行おうと思うとインクルードしないと難しい気がします。
(逆にマップの方でやろうと思うとマップの方でインクルードしなければならなくなります。)
やはりその辺は専用の物で行うべきなのでしょうか?

後は何カ所かロード化させるつもりです。(ここについては、ノーコメントでいいです。)
いろいろ至らない部分もありますが、少し気になった所などでもいいのでお願いします。
添付ファイル
Player.zip
Player.cpp&.hです
(4.01 KiB) ダウンロード数: 97 回
ニャン!!\(゜ロ\)(/ロ゜)/

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 直した方がいいとこ見てもらえませんか?

#2

投稿記事 by Dixq (管理人) » 13年前

ざっと見ですが、思った事を書いてみます。

●関数の数
クラス一つに収める関数が多すぎませんか?
Playerは何かから継承出来ると思います。
雑魚的やボス、プレイヤーなどは共通する部分があることでしょう。
それを省けばPlayer自体の変数や関数も少なくなると思いますよ。

●XとY
XとYって、別々に取得したい事が多いんですか?
もしそうでないなら、分ける必要はないと思います。

●命名規則
関数名を見ても中で何が行われているか想像できないものがあります。
例えば「P_」と書いても何の事かわかりません。位置を表すPointのPかもしれません。
パラメータなら、Paramなどと略すのが一般的でありましょう。
長すぎる単語は、先頭、中間、末尾の3つをとったりすることがあります。例えばManagerならMgr等。
略すにしても、単語が想像できるものが良いかと思います。

●誤字
ロードはLodeではなくLoadかと思います。

●役割り
一つのクラスの中に、
・状態
・カウンタ
の組み合わせがいくつも現れているのは、役割分担が出来ていないあらわれになっている可能性が高いです。
もっと役割分担出来ないか考えてみてはどうでしょう。

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: 直した方がいいとこ見てもらえませんか?

#3

投稿記事 by tk-xleader » 13年前

細かいところですが、スピードや移動量をPoint2Dという構造体で管理するよりも、Vector2D構造体とかを別に定義してそれで管理するほうがいいと思います。
「Point」という単語は座標とか位置という意味を持ちますし、「Vector」はベクトルという意味を持ちます。ベクトルは移動を表すにはいいと思います。

アバター
パコネコ
記事: 139
登録日時: 13年前
住所: 大阪

Re: 直した方がいいとこ見てもらえませんか?

#4

投稿記事 by パコネコ » 13年前

>>qさん
>関数の数
少し多いのかな?
継承は実はまだちゃんと勉強してなかったり...この機会に使ってみたいと思います。
>xとy
必要になりそうなのはとりあえず返しとこう。
ってことで分けました。
でも、アドレス放り込んで中でxとyの値を入れてもらえば十分だった気がしてきました...
その場合は、構造体(Vectr)の値を返す子は必要なくなるのでしょうか...
それとも、両方用意しといた方がいいのでしょうか?
(どっちでも一回代入すれば使えますが...)
どっちにしても、xとyを単体で返す子は必要なさそうですね。
>命名規制
コレはPlayerのPですね...
自分でも途中で嫌になってほかのクラスでは付けてなかったり
今度は、できるだけ気をつけたいと思います。
>誤字
ごめんなさい
もう誤字は許してw
(つづりが覚えられないんです)
>役割り
役割分担に付いてもっと考えてみます。

>>tkmakwins15さん
そうですね。
参考にしたことのあるプログラムでも分けていましたし。
次からは分けたいと思います。

お早い解答ありがとうございました。
(私の返信遅かったですが...)
アドバイスを生かしてより良いプログラムに書き換えれるようにがんばります。
問題点が少しは見えてきたので、
解決にさせていただきます。
(もっとあるという方がいれば書き込んでいただけるとうれしいです。)
ありがとうございました。
ニャン!!\(゜ロ\)(/ロ゜)/

wing
記事: 18
登録日時: 13年前

Re: 直した方がいいとこ見てもらえませんか?

#5

投稿記事 by wing » 13年前

誤字で申し訳ないんですが、
food1, //プレイヤーの足1
food2; //プレイヤーの足2
foodを足と勘違いしているようですが、
足ではありません。

しひ

Re: 直した方がいいとこ見てもらえませんか?

#6

投稿記事 by しひ » 13年前

こんばんわ。
もう、本人の好みによるところが大きくなってしまいますが
・コンストラクタが無いこと
・足を意味するならfoodではなくfootかfeetと書いたほうが良いのではないか
・セッターはSetXXX、ゲッターはR_XXXと命名がばらばらなので揃えたほうが良いのではないか(GetXXXとか、ただのXXXとか)
の3つが気になりました。

アバター
パコネコ
記事: 139
登録日時: 13年前
住所: 大阪

Re: 直した方がいいとこ見てもらえませんか?

#7

投稿記事 by パコネコ » 13年前

解決つけ忘れてました...

>>wingさん
もう許してください...(確か足の一部のどっかだったはず...英語苦手です...)
勉強しときます^^;
>>しひさん
やっぱりコンストラクタは必要ですかね...
タイトル画面に行ったときに初期化をし直したかったので初期化を別で創ってコンストラクタ創りませんでしたが、
在った方が良かったでしょうか?
RはリターンのつもりでしたがGetの方が良かったですね。

ご意見ありがとうございます。
ニャン!!\(゜ロ\)(/ロ゜)/

閉鎖

“C言語何でも質問掲示板” へ戻る