構造体の話
一人のキャラクターにはどのような変数が必要でしょうか?X座標、Y座標、画像データ、当たり判定etc……複雑になるとまだまだ増えます。一人増えるごとに全て宣言しなくてはいけないのでちょっと面倒ですね^^;ということで、構造体というのを使って、管理を楽にしたいと思います。構造体というのは、いくつかの変数をひとまとまりにして一つの型として新しく定義するものです。宣言の仕方は以下の通りstruct 構造体名{ 型名 変数名; 型名 変数名;};これでキャラクターの情報を扱ってみます。struct Ch{ int x; int y; int img};これでstruct Ch型という新しい型ができました。次にこれを使います。struct Ch Chara1 = {100,200,image};struct Ch Chara2 = {300,400,image};これで同じ型を使ってChara1とChara2という変数ができました。これを表示させると同じ画像が二つ出てくると思います。いちいちstructを使うのは面倒なので、tipudefというのを使います。これは正確に言うと、同義語の作成に使うのですが、今は単にstructの省略ということで使います。typedef struct{ int x,y,img,walk,Muki;}ch_st;今度はx座標、y座標、歩いているかどうかのフラグ、向きのフラグを入れてみました。そしてch_stという型名です。宣言はch_st Ch1;ch_st Ch2;だいぶすっきりしたと思います。ちなみに、個々の値を変えたいときはCh1.Muki=1;で大丈夫です。では、前回と今回+キーボードで向きを変えてみたいと思います。#include "DxLib.h"typedef struct{int x,y,img,walk,Muki;}ch_st;int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 {return -1 ;} // エラーが起きたら直ちに終了SetMainWindowText("test") ; //ウインドウの名前を変えるChangeWindowMode(TRUE); //ウィンドウを表示SetDrawScreen( DX_SCREEN_BACK ); //裏画面設定int Key[256];int image[16];ch_st ch1;ch1.x=320;ch1.y=160;ch1.Muki=0;ch1.walk=0;LoadDivGraph( "画像/RPG-cr.png" , 16 , 4 , 4 , 32 , 32, image ); // 画像の分割読み込みwhile( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){// 裏画面の内容を表画面に反映させるScreenFlip() ; // キーの情報取得GetHitKeyStateAll( Key )// Windows システムからくる情報を処理するif( ProcessMessage() == -1 ) break ;// 画面に描かれているものをすべて消すClearDrawScreen() ;if( Key[ KEY_INPUT_RIGHT ] >= 1 ) //右ボタンが押されたら ch1.Muki=3; else if(Key[KEY_INPUT_LEFT] >=1) ch1.Muki=1; else if(Key[KEY_INPUT_UP] >=1) ch1.Muki=0; else if(Key[KEY_INPUT_DOWN] >=1) ch1.Muki=2;}//画像をセットch1.img=image[ch1.Muki*4];// 画像を表示DrawGraph( ch1.x, ch1.y, ch1.img, TRUE );色々とへんてこりんになってきました・・・・・・・Mukiの値によって向きが変わるのは分かるでしょうか?現在配列が16個つまり上、上、上、上、左、左、左、左、右、右、右、右、下、下、下、下みたいな感じになっているので、4つずつ飛ばしているのがMuki*4です。例えば、Mukiに2が入った場合、値は8になるので一段下になります。