さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
C言語でDXライブラリをつかってゲームづくりをする際に学んだ目的を達成するための手順(アルゴリズム) は C#言語でUnityを使ってゲームを作るときにも用いることができます
C言語でDXライブラリをつかってゲームづくりをする際に学んだ目的を達成するための手順(アルゴリズム) は C#言語でUnityを使ってゲームを作るときにも用いることができます
ソーラー「
Zボタンを押したら弾が2発
発射されるプログラムを
構成することができたね」
そのプログラムはこちらです
👇
#include "DxLib.h"
struct Character {
int x;
int y;
int graphichandle;
int life;
};
//👆🌞Characterの構造体宣言です
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウインドウモードに設定します
if (DxLib_Init() == -1) // DXライブラリを初期化処理しています
{
return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します
}
SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です 裏画面に画像を描きます
struct Character jibunnohikouki;
//👆🌞jibunnohikoukiの構造体変数宣言です
jibunnohikouki.x = 0;
jibunnohikouki.y = 0;
jibunnohikouki.graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");
//👆🌞構造体変数jibunnohikoukiのメンバ変数の初期化を行っています
//👆😋飛行機😋のデータをとりあつかっています
struct Character jibunnotama;
//👆🌞jibunnotamaの構造体変数宣言です
jibunnotama.x = 0;
jibunnotama.y = 0;
jibunnotama.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");
jibunnotama.life = 0;
//👆🌞構造体変数jibunnotamaのメンバ変数の初期化を行っています
//👆😋自分の弾😋のデータをとりあつかっています
struct Character jibunnotama1;
//👆🌞jibunnotama1の構造体変数宣言です
jibunnotama1.x = 0;
jibunnotama1.y = 0;
jibunnotama1.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");
jibunnotama1.life = 0;
//👆🌞構造体変数jibunnotama1のメンバ変数の初期化を行っています
//👆😋自分の弾1😋のデータをとりあつかっています
int i = 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);
//👆飛行機の画像を描きます
if ((key & PAD_INPUT_A) && (i == 0)) {
if (jibunnotama.life == 0) {
jibunnotama.x = jibunnohikouki.x + 35;
jibunnotama.y = jibunnohikouki.y + 20;
jibunnotama.life = 1;
}
i = 20;
}
//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります
if (jibunnotama.life == 1) {
DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);
jibunnotama.x = jibunnotama.x + 10;
if (jibunnotama.x > 640)
jibunnotama.life = 0;
//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります
}
if (i > 0) { i = i -1; }//👈🌞🌞🌞ここです
if ((key & PAD_INPUT_A) && (i == 0)) {
if (jibunnotama1.life == 0) {
jibunnotama1.x = jibunnohikouki.x + 35;
jibunnotama1.y = jibunnohikouki.y + 20;
jibunnotama1.life = 1;
}
i = 20;
}
//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります
if (jibunnotama1.life == 1) {
DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);
jibunnotama1.x = jibunnotama1.x + 10;
if (jibunnotama1.x > 640)
jibunnotama1.life = 0;
//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります
}
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://www.youtube.com/watch?v=H-w2JMeYWPs
(そのまま動画をみただけではわかりにくいのですが
動画を一時停止してみれば弾が最初発射されるときは2連射
その後
単発で弾が発射されているのがわかります
が
このプログラムでは
自分の弾
と
自分の弾1
の発射間隔が相当広いので
自分の弾
と
自分の弾1
が
連続して発射されているのがわかりにくいです
)
マックス「うーむぅ
このプログラムの構造自体は
変数i
を作成して
while{}文の中の次の2つの命令文
👇
if ((key & PAD_INPUT_A) && (i == 0)) {
if (jibunnotama.life == 0) {
jibunnotama.x = jibunnohikouki.x + 35;
jibunnotama.y = jibunnohikouki.y + 20;
jibunnotama.life = 1;
}
i = 20;
}
//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります
if (jibunnotama.life == 1) {
DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);
jibunnotama.x = jibunnotama.x + 10;
if (jibunnotama.x > 640)
jibunnotama.life = 0;
//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります
}
と
if ((key & PAD_INPUT_A) && (i == 0)) {
if (jibunnotama1.life == 0) {
jibunnotama1.x = jibunnohikouki.x + 35;
jibunnotama1.y = jibunnohikouki.y + 20;
jibunnotama1.life = 1;
}
i = 20;
}
//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります
if (jibunnotama1.life == 1) {
DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);
jibunnotama1.x = jibunnotama1.x + 10;
if (jibunnotama1.x > 640)
jibunnotama1.life = 0;
//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります
}
👆
の間に
if (i > 0) { i = i -1; }
を挟むだけという非常にシンプルなものなんだ・・・
が
さっきのエピソードのこのプログラムの説明がヘビー過ぎるんじゃないか(^◇^;)」
solarplexuss「ういーっちは
Zボタンを押したら弾が1発
発射されるようにするだけでも
すごい工夫がなされていると思ったて感心してたんだあ
でね
うちは
Zボタンを押したら弾が2発
発射されるようにするには
単純に
Zボタンを押したら弾が1発
発射される命令文を
もう1回記述すればいいだけだとおもっていたにゃんこねこねこ🐈」
ぶーにゃん「ニャーン」
solarplexuss「でも それではうまくいかなくて・・・
Zボタンを押したら弾が2発
発射されるようにするだけでも
工夫がいるんだね
この自分で工夫してプログラムを構成するというところが
プログラミングの面白いところなんだね
とても はまっちゃうな」
ソーラー「やっぱり
そう思う😃
この自分で工夫してプログラムを構成するというところが
面白い部分だと
僕も思うな
まさにプログラマーの腕の見せ所だね
DXライブラリの関数はゲームづくりには欠かせないもので
DXライブラリの関数の仕組みや扱い方を知ることは大事なことなんだけど
それだけでは
面白いゲームを作ることはできないんだね
どうやって
目的を達成するための手順(アルゴリズム)
を
思いつくか
も
とても大事なことなんだよ
今流行りのC#言語でUnityを使ってゲームを作る場合
Unityの便利な機能を使って簡単に
ゲームを作ることができるようにみえます
が
面白いゲームを作るには
目的を達成するための手順(アルゴリズム)
が
今流行りのC#言語でUnityを使ってゲームづくりをする場合でも必要になってきます
そう
目的を達成するための手順(アルゴリズム)
は
どのプログラミング言語でプログラムをする場合でも
必要になってくるんだ
たとえ
C言語でDXライブラリをつかってゲームづくりを学んだとしても
ここで学んだ
目的を達成するための手順(アルゴリズム)
は
C#言語でUnityを使ってゲームを作るときに
生きてくるんだよ
もっといえば
ゲームづくりでなくとも
使う言語がPythonやJava scriptであっても
目的を達成するための手順(アルゴリズム)
は
必要になってきます
だから
たとえ
Basic
や
C言語でプログラミングを学んだとしても
そこで学んだ
目的を達成するための手順(アルゴリズム)
は
全然
違う言語を使ってプログラミングをする場合にでも
生きてくるんだ😃」
solarplexuss「へえ・・・ そうか
そうだったんだ〜」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます