さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
自機のデータを構造体変数jibunnnohikoukiのメンバ変数で取り扱うことによりjibunnnohikoukiのメンバ変数を見ただけで自機のデータを取り扱っているのがわかるようになります
自機のデータを構造体変数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座標のデータ
それに
飛行機(自機)のグラフィックデータに割り当てられたグラフィックハンドル(数値データ)
を取り扱っているのが
分かるようになったのは大きいね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます