10回に1回方向を変える

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みじんこ

10回に1回方向を変える

#1

投稿記事 by みじんこ » 7年前

ループ{

コード:

if(tama.tag == 2){
        int rand = arc4random() % 10;
        float x;
        
        if(rand == 1){
            x = -1 * x;
        }

        tama.position = ccp(tama.position.x - x, tama.position.y - 5.0f);

    }
}

1/10の確率でxの方向を変えたいのですが、xにローカル変数を使うと毎回値が更新されうまくいきません。
グローバル変数を使えばできるのは分かるですが、なんか納得いきません。
上手な書き方を教えてください。よろしくお願いします。

(objective-c,xcode)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 10回に1回方向を変える

#2

投稿記事 by softya(ソフト屋) » 7年前

tamaの構造体に保存してはどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

みじんこ

Re: 10回に1回方向を変える

#3

投稿記事 by みじんこ » 7年前

構造体に保存とは初期化の時にするのですか?
このif文内でしか使わないので、できればこの中だけの変数ですませたいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 10回に1回方向を変える

#4

投稿記事 by softya(ソフト屋) » 7年前

コードの使い回しが制限されますが、変数xをstaticする手はあると思います。
初期値は与えて下さい。

【補足】
この方法は、後でYuOさんが書いているように上手な書き方とは言えない方法だと私は思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 10回に1回方向を変える

#5

投稿記事 by YuO » 7年前

みじんこ さんが書きました:構造体に保存とは初期化の時にするのですか?
初期値の設定は初期化で行いますが,方向転換はこの関数内で行います。
みじんこ さんが書きました:このif文内でしか使わないので、できればこの中だけの変数ですませたいです。
そもそも,このベクトル値 (-x, -5.0f) は「tama」というインスタンスの持っている,例えば「speed」という属性ではないのですか。
そういう考え方に立てば,tamaというインスタンスが持つ方が自然に思えます。

みじんこ

Re: 10回に1回方向を変える

#6

投稿記事 by みじんこ » 7年前

お二方、ありがとうございます。

-(id)init{
tama.speed = 5.0f;
}

(void)a{
if(tama.tag == 2){
int rand = arc4random() % 10;

if(rand == 1){
tama.speed = -1 * tama.speed;
}

tama.position = ccp(tama.position.x - tama.speed, tama.position.y - 5.0f);

}
}

こういう解釈であってますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 10回に1回方向を変える

#7

投稿記事 by softya(ソフト屋) » 7年前

codeタグを使ってくださいね。
みじんこ さんが書きました:お二方、ありがとうございます。

コード:

-(id)init{
       tama.speed = 5.0f;
}

(void)a{
if(tama.tag == 2){
        int rand = arc4random() % 10;
        
        if(rand == 1){
            tama.speed = -1 * tama.speed;
        }
 
        tama.position = ccp(tama.position.x - tama.speed, tama.position.y - 5.0f);
 
    }
}
こういう解釈であってますか?
はい。
綺麗に書くなら、以下のように書くと統一性が取れると思います。
※ インデントも直しました。

コード:

-( id )init {
	tama.vx = 5.0f;
	tama.vy = 5.0f;
}

( void )a {
	if( tama.tag == 2 ) {
		int rand = arc4random() % 10;
		if( rand == 1 ) {
			tama.vx = -1 * tama.vx;
		}

		tama.position = ccp( tama.position.x - tama.vx, tama.position.y - tama.vy );
	}
}
ところでObjective-Cって
tama.vx = -tama.vx;
と書けないんでしたっけ?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

みじんこ

Re: 10回に1回方向を変える

#8

投稿記事 by みじんこ » 7年前

とても見やすいです。
みじんこ さんが書きました:ところでObjective-Cって
tama.vx = -tama.vx;
と書けないんでしたっけ?
その書き方忘れていました!
何度もありがとうございました。またお願いします。

閉鎖

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