自機のデータを構造体変数jibunnnohikoukiのメンバ変数で取り扱うことによりjibunnnohikoukiのメンバ変数を見ただけで自機のデータを取り扱っているのがわかるようになります

ソーラー「さあ


みなさん


まずは


構造体(変数の型)



作製してみましょう」



solarplexuss「おねがい、Angel💖」



ソーラー「では


再び


以下の飛行機がとんでいくプログラムをご覧ください


👇



#include "DxLib.h"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{



ChangeWindowMode(TRUE); // ウインドウモードに設定します


if (DxLib_Init() == -1) // DXライブラリを初期化処理しています

{

return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します

}


int graphichandle;


graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");



SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です


int x = 0;


int y = 0;



while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) y = y - 4;

if (key & PAD_INPUT_DOWN) y = y + 4;

if (key & PAD_INPUT_LEFT) x = x -4;

if (key & PAD_INPUT_RIGHT) x = x + 4;




DrawGraph(x,y,graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


};



DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

}


デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです


👇

https://youtu.be/UePaU-jOeKc



ソーラー「このプログラムが実行されると


キーボードからのキー入力に応じて


ゲーム画面の中を


飛行機(自機)が移動するようになります



飛行機(自機)は


飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータ


いいかえると


飛行機(自機)のグラフィックデータにアクセスするための


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)



よって


構成されています



それらのデータを取り扱っているのが


変数

x

y

graphichandle


ですね



プログラムの中で


変数

x

y

graphichandle


を見ても


飛行機(自機)のデータを取り扱っている変数かどうかわかりにくいですね


そこで


構造体(変数の型)の登場となります


構造体は


以下のように


構造体宣言によって作成されます


👇


struct Character{

int x;

int y:

int graphichandle;

};


solarplexuss「


これが構造体宣言なの?

👇

struct Character{

int x;

int y:

int graphichandle;

};

👆


ソーラー「😊そう



これが構造体宣言なんです

👇

struct Character{

int x;

int y:

int graphichandle;

};


👆上記の構造体宣言では


Characterの構造体宣言が行われています


struct Character{

int x;

int y:

int graphichandle;

};


が実行されると


Character


という構造体(変数の型)が作製されることになります」



solarplexuss「ええ?


構造体(変数の型)


って


変数の型なの??


変数の型を自分で作製するの?」


ソーラー「


そうなんです


構造体宣言

👇

struct Character{

int x;

int y:

int graphichandle;

};

👆


Character


という構造体(変数の型)


を作製しているんだよ


例えば


極端にいえば


int

char

などの変数の型を


作製したことになるんだ」


マックス「自分で変数の型を作製するのか・・・」


ソーラー「そう


そして


int型を用いて


aのint型の変数宣言


int a;


を行うことにより


int型の変数aを作製することができましたね


char型を用いるなら


cのchar型の変数宣言


char c;


を行うことにより


char型の変数cを作製することができましたね



同様に


構造体(変数の型)Characterを用いて


jibunnohikoukiのCharacter型の構造体変数宣言


struct Character jibunnohikouki;//🌞jibunnohikoukiは自分の飛行機、自機という意味です)


を行うことにより


構造体Character型の構造体変数


jibunnohikouki


(jibunnohikoukiは自分の飛行機、自機という意味です)


を作製することができるんです



Characterの構造体宣言

👇

struct Character{

int x;

int y:

int graphichandle;

};


によって構造体Character


を作製したのち


jibunnohikoukiのCharacter型の構造体変数宣言


struct Character jibunnohikouki;


を行うことにより


Character型の構造体変数


jibunnohikouki


を作製することになります


このとき


同時に


構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle



生成されることになります



マックス「


jibunnohikoukiのCharacter型の構造体変数宣言


struct Character jibunnohikouki;


を行って


構造体変数jibunnohikouki


を作製しただけで


自動的に


構造体Character型の構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle



生成されるのか?」


ソーラー「そうなんです


jibunnohikoukiのCharacter型の構造体変数宣言


struct Character jibunnohikouki;


を行って


構造体変数jibunnohikouki


を作製しただけで


構造体Character型の構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


を作製したことになります


そして


先ほどのプログラムでは


飛行機(自機)は


飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)



よって


構成されおり



それらのデータを取り扱っているのが


変数

x

y

graphichandle


でしたが


飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)




今度は



Character型の構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


で取り扱うことになります」



マックス「なんで


飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)




今度は



Character型の構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


で取り扱うんだ?」


ソーラー「そこがポイントなんです


飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)





Character型の構造体変数jibunnohikoukiのメンバ変数


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


で取り扱えば



プログラムの中で


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


を見かけた場合


構造体変数jibunnohikoukiが飛行機(自機)に対応しているので


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle



飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)


を取り扱っている変数なのが


簡単にわかるんです(*´▽`*)」


マックス「ほほお・・・芸がこまかいな」


ソーラー「先ほどのプログラムの


変数

x

y

graphichandle



jibunnohikouki

jibunnohikouki.y

jibunnohikouki.graphichandle


をもちいて


書き換えると以下のようなプログラムになります




👇


#include "DxLib.h"



struct Character {

int x;

int y;

int graphichandle;

};

//👆🌞Characterの構造体宣言です



struct Character jibunnohikouki;

//👆🌞jibunnohikoukiの構造体Character型の構造体変数宣言です


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{



ChangeWindowMode(TRUE); // ウインドウモードに設定します


if (DxLib_Init() == -1) // DXライブラリを初期化処理しています

{

return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します

}



jibunnohikouki.graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");



SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;



while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


};



DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

}





デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです


👇

https://www.youtube.com/watch?v=1YXH-U3uNqc


ソーラー「


先ほどのプログラムの


変数

x

y

graphichandle



jibunnohikouki

jibunnohikouki.y

jibunnohikouki.graphichandle


をもちいて


書き換えても


プログラムの実行結果は同じですね


ただ


構造体変数jibunnohikoukiが飛行機(自機)に対応しているので


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle


をみただけで


jibunnohikouki.x

jibunnohikouki.y

jibunnohikouki.graphichandle



飛行機(自機)のいる位置を表すx座標のデータ


飛行機(自機)のいる位置を表すy座標のデータ


それに


飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)


を取り扱っているのが


分かるようになったのは大きいね」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る