ページ 1 / 1
押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 22:13
by 史上最悪のデスペナ
Shiftを押さないでQかWを押すとFlagは1
Shiftを押しながらQかWを押すとFlagは2
WもSも押されてないならFlagは0
としたいです。
現在、押下キーは
コード:
char Key[256]; //キーが押されているかいないかを格納する
Flag = 0;
if( Key[KEY_INPUT_Q] == 1 )
{
Flag = 1;
if( Key[KEY_INPUT_LSHIFT] == 1 )
{
Flag = 2;
}
}
if( Key[KEY_INPUT_W] == 1 )
{
Flag = 1;
if( Key[KEY_INPUT_LSHIFT] == 1 )
{
Flag = 2;
}
}
としていますが、同じような形が2個もあるため、もっと簡単に出来ないかと思いましたが方法が思いつきません
このあと、E,R,T・・・・と増えていった場合、見にくくなってしょうがないと思うので
いい方法があったら教えてください
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 22:24
by softya(ソフト屋)
先にKEY_INPUT_LSHIFTをチェックしてFlagに状態を代入せずにFlagに代入する値を作るのがひとつの方法です。
int FlagType = Key[KEY_INPUT_LSHIFT]==1 ? 2 : 1;
って感じですね。
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 22:28
by Tatu
こういうことですか?
コード:
char Key[256]; //キーが押されているかいないかを格納する
Flag = 0;
if( Key[KEY_INPUT_Q] == 1 || Key[KEY_INPUT_W] == 1 )
{
Flag = 1;
if( Key[KEY_INPUT_LSHIFT] == 1 )
{
Flag = 2;
}
}
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 22:55
by beatle
史上最悪のデスペナ さんが書きました:WもSも押されてないならFlagは0
これは、QもWも、の間違いでしょうか。
一つ疑問なのは、どうしてQとWで違う値ではなく同じ値をFlagに設定するのでしょう。
QとWは区別しなくていいのでしょうか。
それとも、何か本当の目的は違うところにあるのでしょうか。
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 23:15
by 史上最悪のデスペナ
beatle さんが書きました:これは、QもWも、の間違いでしょうか。
その通りです
beatle さんが書きました:一つ疑問なのは、どうしてQとWで違う値ではなく同じ値をFlagに設定するのでしょう。
QとWは区別しなくていいのでしょうか。
それとも、何か本当の目的は違うところにあるのでしょうか。
簡単に言うと
Wで前進、Sで後退しますが(Qはまた別の動きですが説明しにくいのでWとSでやり直し)
Shiftを押しながらだと歩き、Shiftを押さないと走ります。
Flagはモーション用であり、1で走るモーション、2で歩くモーション、0で立っているモーションとさせたいのです
softya(ソフト屋) さんが書きました:先にKEY_INPUT_LSHIFTをチェックしてFlagに状態を代入せずにFlagに代入する値を作るのがひとつの方法です。
int FlagType = Key[KEY_INPUT_LSHIFT]==1 ? 2 : 1;
って感じですね。
何をしているのかが分からないのでちょっと調べてきます
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 23:19
by softya(ソフト屋)
これは条件演算子(三項演算子)ですよ。
条件式 ? 条件式が真の場合の値 : 条件式が疑の場合の値
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 23:21
by 史上最悪のデスペナ
こんなものがあるんですね。勉強になります
条件演算子って便利ですね。見た目も綺麗になりますし。
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 23:24
by softya(ソフト屋)
史上最悪のデスペナ さんが書きました:こんなものがあるんですね。勉強になります
条件演算子って便利ですね。見た目も綺麗になりますし。
これの多用は凄く見づらくなるのでBADです。いっぱい並ぶと最悪です。
なので、あまり見かけないですよね?
ここぞと言うワンポイントで使うのが吉です。
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月26日(月) 23:51
by ISLe
史上最悪のデスペナ さんが書きました:条件演算子って便利ですね。見た目も綺麗になりますし。
こんな見た目ではどう思います?
コード:
char Key[256]; //キーが押されているかいないかを格納する
Flag = 0;
Key[KEY_INPUT_Q] == 1 && (Flag = 1);
Key[KEY_INPUT_W] == 1 && (Flag = 1);
Key[KEY_INPUT_LSHIFT] == 1 && Flag == 1 && (Flag = 2);
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月27日(火) 14:58
by 史上最悪のデスペナ
softya(ソフト屋) さんが書きました:これの多用は凄く見づらくなるのでBADです。いっぱい並ぶと最悪です。
なので、あまり見かけないですよね?
ここぞと言うワンポイントで使うのが吉です。
確かに一度も見かけたことないですね。
ifが沢山あるよりは見やすいかと思ったのですが・・・・・・
ISLe さんが書きました:史上最悪のデスペナ さんが書きました:条件演算子って便利ですね。見た目も綺麗になりますし。
こんな見た目ではどう思います?
コード:
char Key[256]; //キーが押されているかいないかを格納する
Flag = 0;
Key[KEY_INPUT_Q] == 1 && (Flag = 1);
Key[KEY_INPUT_W] == 1 && (Flag = 1);
Key[KEY_INPUT_LSHIFT] == 1 && Flag == 1 && (Flag = 2);
自分はすっきりしていてすごい見やすいと思います
ちなみに、
コード:
Key[KEY_INPUT_Q] == 1 だったらFlag=1
Key[KEY_INPUT_W] == 1 だったらFlag = 1
Key[KEY_INPUT_LSHIFT] == 1 でFlag == 1だったらFlag = 2
でいいですか?
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月27日(火) 15:15
by softya(ソフト屋)
今は誤認しないかも知れませんがISLeさんのもの含めて後々誤認や書き間違いを起こしやすいです。
条件式と代入文が渾然一体だからですが、これはトリッキーなんですよね。どっかで==と=を間違えてしまった場合を考えてみましょう。
それとデバッガでトレースが困難なのも弱点ですね。
参考
「Programming Place Plus C言語編 第27章 簡略記法」
http://www.geocities.jp/ky_webid/Progra ... itional_op
【補足】
ついでにダークサイドな演算式編。
「闇プログラマーに喧嘩を売ってしまった昼下がり~条件分岐篇~ - Togetter」
http://togetter.com/li/140355
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月27日(火) 19:11
by 史上最悪のデスペナ
softya(ソフト屋) さんが書きました:今は誤認しないかも知れませんがISLeさんのもの含めて後々誤認や書き間違いを起こしやすいです。
条件式と代入文が渾然一体だからですが、これはトリッキーなんですよね。どっかで==と=を間違えてしまった場合を考えてみましょう。
それとデバッガでトレースが困難なのも弱点ですね。
普通のif文でも==と=を間違えてしまってどこが間違ってるのか分からずにってのが前まであったのを思い出しました。
あれは見つけにくいですよね・・・・・・・・
途中のprintfで何をしようとしているのかが分からない・・・・・後ろのコメントアウトを見る限り文字コードに合わせてバイトをずらしているのでしょうか?
printf("誤¥0正"+(a==b)*4);
だったら、
a==bなら(a==b)は1なので4バイトずらし、違うなら0なのでずらされないで「誤」になる
という解釈でいいのでしょうか
結論として、今回はしょうがないから条件演算子を使う。
しかし、使う必要のないところは極力使わない
ということでいいのですよね?
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月27日(火) 19:16
by softya(ソフト屋)
しょうが無いと言うより、その方が今回は私は分かりやすいと思ったからです。
三項演算子が大キライな人も大好きな人もいますので、人によって意見は違うと思います。
私は、使い所を間違えなければ使っても良いと思います。
Re: 押下キーによるフラグ立てのいい方法
Posted: 2012年11月27日(火) 19:38
by 史上最悪のデスペナ
ありがとうございます。
今回のところ以外に対してはいろいろ試してみて自分のコーディング方法を確立しようと思います