キー入力のタイミング(?)について

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

キー入力のタイミング(?)について

#1

投稿記事 by doss » 11年前

作っているゲームがタイトル画面からゲームの始まる終わるを選んでゲームの本編に移行するといったものなのですが、このときのボタンの入力について質問があります。

コード:

int title();
int gamemain();
int main(){
  int kind=0;
  while(1)
    switch(kind){
    case 0:
      if( title() = 1 )
        kind = 1;
    break;
    case 1:
      if( gamemain() = 1 )
        kind = 2;
    break;
    case 2:
      return 1;
    break;
    }
  return 0;
}
int title(){
  /*ゲームのタイトルの表示*/
  if( DxLib::CheckHitKey( KEY_INPUT_Z ) )
    return 1;
  return 0;
}
int gamemain(){
  /*ゲームの本編表示*/
  if( DxLib::CheckHitKey( KEY_INPUT_Z ) )
    return 1;
  return 0;
}
ソースで書くとここのようになると思うのですがこれだとZキーを押した段階ですべての処理が終わってしまいますよね。
解決方法はいろいろあると思うのですがなかなかうまい方法が思いつきません、皆さんならどのようなソースを書きますか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: キー入力のタイミング(?)について

#2

投稿記事 by みけCAT » 11年前

龍神録プログラミングの館 3章
ここに書かれている方法を主に用います。
これを用いて、CheckStateKey(キーコード)==1のとき、またその時に限り「キーが押された」と判定します。

もしくは、キーが押されたフラグを用います。
擬似コード

コード:

// 初期化
var key_flag = 折れている; // 判定するキーごとに用意する

// ループ内でのキー判定
if(対象のキーが押されている) {
	if(key_flagが折れている) {
		// 押された直後なので、キーに反応する処理を行う
	}
	key_flagを立てる;
} else {
	key_flagを折る;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Rittai_3D
記事: 525
登録日時: 12年前

Re: キー入力のタイミング(?)について

#3

投稿記事 by Rittai_3D » 11年前

オフトピック
本件とは関係ないのでofftopicで……
if文の中の比較演算子が代入演算子になっています。
あとは、これは人によりますが、if文の後はブロックを書いた方が思わぬミスを防げますので良いと思います。
初心者です

Doss

Re: キー入力のタイミング(?)について

#4

投稿記事 by Doss » 11年前

>>みけcatさん
やはり、この方法が一番手軽でしょうか、もうちょっときれいな方法もあると  思ったのですが設計自体を見直さないといけないかもしれませんね。
 他にどんな方法があるかをできればお聞かせ願えませんでしょうか。

>>3D_3Dさん
 すいません、ご指摘ありがとうございます。実際書いたソースじゃなかったも のだったので、少し適当になってしまいました。気を付けます。

閉鎖

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