十分に理解したとは言い難いですが、苦しんで覚えるC言語様の方でポインタまでを学びました。
そろそろゲームを作ってみたいと思い、ゲームプログラミングの館様の講座を参考にさせていただいています。
OSはWin7Homepremium、コードはVisual C++ 2010を使用して書いています。
講座の方は現在2.8章までは進むことができましたが、2.9章で足踏みしている状態です。
本題ですが、
下のgpUpdateKey関数とMain関数において、Zキーが60フレーム入力されたとして、
その処理がどうなっているのか、私の考えをコメント/**/に書いています。
私の認識と知識が正しいのかどうか、間違っていれば正しくはどうなのか教えていただきたいのです。
よろしくお願いいたします。
#include "DxLib.h"
int Key[256];[tab=60]/* グローバル変数Keyの配列([0]~[255]の256個)を宣言。
[tab=150]Z(90)が60フレーム入力されたので、Key[89]には整数60が代入される。
[tab=150]数値はキーが押下された分だけ無限に増加していく。*/
int gpUpdateKey()
{
char tmpkey[256];[tab=110]/* [0]~[255]まで数値0が代入される。 */
GetHitKeyStateAll( tmpkey );[tab=30]/* Zキーの入力を受けて、tmpkey[89]に1が代入される。*/
[tab=230]/* KEY_INPUT_Zの情報を同時に得る(?) */
for ( int i = 0; i < 256; i++ )
{
if ( tmpkey[i] != 0 )[tab=50]/* 条件文がtmpkey[89] != 0の時に真となるので、 */
{
Key[i]++;[tab=110]/* Key[89]に1が加算される。 */
}
else
{
Key[i] = 0; [tab=120]/* [89]以外の配列には0が代入される。 */
} [tab=190]/* キー入力がされなくなると */
} [tab=190]/* tmpkey[89]には0が代入され、Key[89]の数値も0となり、
[tab=210]Main関数内のif文は実行されない。*/
return 0;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
/* gpUpdateKey関数を呼び出し */
while ( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0, gpUpdateKey()==0 )
{
if( Key[KEY_INPUT_Z] >= 60 )[tab=30]/* Zキーが入力されて1~59フレーム目は偽となるので
[tab=240]実行されず、whileに戻る。 */
{
DrawFormatString( 0, 0, GetColor(255,255,255), "?!" );
}
}
DxLib_End();
return 0;
}