龍神録の「まずは実行させてみよう」のキー入力管理部分について

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

龍神録の「まずは実行させてみよう」のキー入力管理部分について

#1

投稿記事 by dast » 14年前

こんにちは。プログラミングの勉強をしながら龍神録プログラミングの館を見ている初心者です。
第一章のプログラムのキーの入力を管理するところが

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}

となっています。
ですが、ゲームプログラミングの館の2.9章ではキーの入力管理の部分は

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key++; // 加算
} else { // 押されていなければ
Key = 0; // 0にする
}
}
return 0;
}

と紹介されています。この二つの記述の間にどんな違いがあるのかを教えていただけないでしょうか。

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

Re: 龍神録の「まずは実行させてみよう」のキー入力管理部分について

#2

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

見づらいのでcodeタグを使ってくださいね。
詳しくはフォーラムルールを。
http://dixq.net/board/board.html

1つ目と2つ目の違いですが、1つ目が引数のetHitKeyStateAll_InputKeyに対してカウントしているのに対して、2つ目が外部変数Keyに対してカウントしている程度の違いでしょう。全体の設計ルールの違いといった話ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dast

Re: 龍神録の「まずは実行させてみよう」のキー入力管理部分について

#3

投稿記事 by dast » 14年前

codeの件はすみません。次から気をつけます。
つまりこの二つの違いはキーの入力情報をどの箱に入れるかという認識でいいのですか?
そしてこの二つは入力に関するプログラムを書く時のルールが違うというだけでどっちを使ったからできないことが出てくるということはないのですね?

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

Re: 龍神録の「まずは実行させてみよう」のキー入力管理部分について

#4

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

dast さんが書きました:そしてこの二つは入力に関するプログラムを書く時のルールが違うというだけでどっちを使ったからできないことが出てくるということはないのですね?
どっちも簡単に書き換えて作れますから悩むようなところでは無いと言ったほうが良いでしょう。
ゲームを作っている最中に生じるコード書き換えや関数化の作業のほうがよっぽど大変で手間のかかる作業です。
ただ、このGetHitKeyStateAll_2とgpUpdateKeyはすごく簡単な仕組みの関数ですので見なくても書けるぐらい理解しておくべき関数だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dast

Re: 龍神録の「まずは実行させてみよう」のキー入力管理部分について

#5

投稿記事 by dast » 14年前

ありがとうございます。大変よく分かりました。

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

Re: 龍神録の「まずは実行させてみよう」のキー入力管理部分について

#6

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

ゲームプログラミングの館のようなサンプルはあくまでサンプルとしてご覧ください。
例えば対戦ゲームなんかだと、唯一の変数に対してだけ処理が出来る関数などは作るべきではありません。
グローバル変数を使って関数を実装すると一つのinputにしか処理が出来なくなります。

GetHitKeyStateAll_2のように引数に依存した処理をさせるのが良いでしょう。
また、〇〇2といった、関数名を見てさっぱり意味が把握できないような関数名は嫌悪されるので避けた方が良いです(ぇ

※解決したら解決ボタンを押してください。今回は私が押しておきます。

閉鎖

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