DxLibでシューティングゲームを作りたい。
でも、「C++初心者でも分かるのかな」そんな風に感じていませんか。
実は、DxLibはDirectXを簡単に使えるライブラリで、初心者でも取り組みやすい環境です。
基本を押さえれば、C++初心者でもシューティングゲームを作ることができるでしょう。
この記事では、DxLibを使ったシューティングゲーム開発の実装手順を、初心者向けに詳しく解説します。
✨ この記事でわかること
- DxLibの基本設定と初期化方法(所要30分)
- DxLibを使ったシューティングゲームの実装手順(所要3時間)
- ゲームループと描画処理の実装(所要2時間)
- DxLib開発でよくあるエラー5選と解決方法
- 実用的なシューティングゲーム完成までの5ステップ(合計8時間)

DxLibはDirectXよりも簡単なので、初心者にはおすすめです。まずは簡単な描画から始めましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
DxLibとは?基礎知識から理解する

DxLibとは、DirectXを簡単に使えるようにしたC++用のライブラリです。
DirectXの複雑な設定を簡略化し、初心者でも扱いやすいAPIを提供します。
DxLibを使えば、DirectXの知識がなくてもゲーム開発を始められます。
関数一つで描画や入力処理ができるため、学習コストが低いでしょう。
C++初心者でも、基本的なシューティングゲームを作ることができます。
DxLibの特徴
✅ DxLibの特徴
- 簡単なAPI:関数一つで描画・入力処理が可能(所要時間:学習1時間)
- 日本語ドキュメント:公式サイトに詳しい説明がある(所要時間:読むだけ)
- 無料:個人利用は無料で使える(費用:0円)
- Windows専用:Windows PC向けのゲーム開発に適している
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
DxLibの基本設定と初期化

DxLibを使ったシューティングゲーム開発を始めるには、まず基本設定と初期化が必要です。
ここでは、コピペで動くサンプルコードを紹介します。
実装手順:DxLibの初期化
ステップ1:DxLibのダウンロードと設定(所要30分)
- DxLib公式サイトからDxLibをダウンロード
- Visual StudioにDxLibを設定
- プロジェクトにDxLib.libをリンク
ステップ2:基本的な初期化コード(所要30分)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // DxLibの初期化 if (DxLib_Init() == -1) { return -1; // 初期化に失敗 } // ゲームのメインループ while (ProcessMessage() == 0) { ClearDrawScreen(); // 画面をクリア // ここに描画処理を追加 ScreenFlip(); // 画面を更新 } // 終了処理 DxLib_End(); return 0; } |
配置場所:メインのソースファイルに記述
確認方法:実行してウィンドウが表示されればOK
⚠️ よくあるエラー
- DxLib_Initが未定義 → DxLib.hのインクルードとDxLib.libのリンクを確認
- ウィンドウが表示されない → プロジェクト設定でサブシステムを「Windows」に設定
- リンクエラー → DxLib.libをリンクに追加する
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
シューティングゲームの実装手順

DxLibを使ったシューティングゲーム開発の核心部分に入っていきましょう。
ゲーム制作の基本は「動かす」「出す」「消す」の組み合わせです。
ここでは、プレイヤー、弾、そして敵キャラクターの順に、最小限のコードで仕組みを解説します。
1. プレイヤーの実装:動かす楽しみを体験する
まずは、自分の操作でキャラクターを動かす処理を作ります。
DxLibではCheckHitKeyという関数を使うだけで、キーボードの状態を簡単に取得できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
float playerX = 320.0f; // プレイヤーのX座標 float playerY = 400.0f; // プレイヤーのY座標 float playerSpeed = 3.0f; // 移動速度 void UpdatePlayer() { // キー入力に応じて座標を更新 if (CheckHitKey(KEY_INPUT_LEFT) == 1) playerX -= playerSpeed; if (CheckHitKey(KEY_INPUT_RIGHT) == 1) playerX += playerSpeed; if (CheckHitKey(KEY_INPUT_UP) == 1) playerY -= playerSpeed; if (CheckHitKey(KEY_INPUT_DOWN) == 1) playerY += playerSpeed; // 画面外(0〜640, 0〜480)に出ないように制限をかける if (playerX < 0) playerX = 0; if (playerX > 640) playerX = 640; if (playerY < 0) playerY = 0; if (playerY > 480) playerY = 480; } void DrawPlayer() { // プレイヤーを緑色の円として描画 DrawCircle(playerX, playerY, 15, GetColor(0, 255, 0), TRUE); } |
DxLibの画面は左上が(0, 0)です。右にいくほどXが増え、下にいくほどYが増えます。「上に動かす時にYをマイナスする」のは、初心者の方が最初につまずきやすいポイントなので覚えておきましょう。
2. 弾の実装:構造体と配列で複数を管理する
シューティングの醍醐味である「弾の発射」です。
弾は画面内にたくさん存在するため、「構造体(struct)」を使って、弾一つ一つの座標と「今使われているか(active)」という状態をセットで管理します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
struct Bullet { float x, y; bool active; // 生きているかどうかのフラグ }; const int MAX_BULLETS = 100; // 同時に出せる弾の最大数 Bullet bullets[MAX_BULLETS]; void InitBullets() { // 最初にすべての弾を「未使用」状態にする for (int i = 0; i < MAX_BULLETS; i++) { bullets[i].active = false; } } void FireBullet() { // Zキーが押されたら、未使用の弾を探して一発だけ発射 if (CheckHitKey(KEY_INPUT_Z) == 1) { for (int i = 0; i < MAX_BULLETS; i++) { if (!bullets[i].active) { bullets[i].x = playerX; bullets[i].y = playerY; bullets[i].active = true; break; // 一発出したらループを抜ける } } } } void UpdateBullets() { for (int i = 0; i < MAX_BULLETS; i++) { if (bullets[i].active) { bullets[i].y -= 5.0f; // 上方向に移動 // 画面外に出たら「未使用」に戻して再利用できるようにする if (bullets[i].y < 0) { bullets[i].active = false; } } } } void DrawBullets() { for (int i = 0; i < MAX_BULLETS; i++) { if (bullets[i].active) { // 生きている弾だけを黄色い円で描画 DrawCircle(bullets[i].x, bullets[i].y, 5, GetColor(255, 255, 0), TRUE); } } } |
弾を撃つたびに新しい変数を作るのは大変です。あらかじめ100個の「弾の席」を用意しておき、撃つときに「active = true(着席)」、画面外に出たら「active = false(退席)」と切り替えるのが、ゲーム開発の定石です。
3. 敵の実装と当たり判定の準備
最後に、標的となる敵キャラクターを登場させましょう。
基本は弾の実装と同じですが、敵は「上から下へ」動かします。
ここまでできれば、あとは「弾と敵の距離」を計算するだけで当たり判定が完成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 敵の簡易的な実装例 float enemyX = 320.0f; float enemyY = 50.0f; void UpdateEnemy() { enemyY += 2.0f; // ゆっくり下に向かってくる if (enemyY > 480) enemyY = 0; // 下まで行ったら上に戻る } void DrawEnemy() { // 敵を赤色の円で描画 DrawCircle(enemyX, enemyY, 20, GetColor(255, 0, 0), TRUE); } |
このように、DxLibでは「座標を更新する関数」と「描画する関数」を分けて書くことで、プログラムの見通しが良くなります。
次はこれらの要素をぶつける「当たり判定」のステップへ進みましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
DxLib開発でよくある失敗5選と解決方法

DxLibを使った開発で、初心者が陥りやすい失敗があります。
ここでは、5つのよくある失敗と解決方法を紹介します。
失敗1:初期化に失敗する
❌ よくある失敗
- DxLib_Initが未定義エラー
- ライブラリがリンクされていない
- プロジェクト設定が間違っている
✅ 正しいアプローチ
- DxLib.hのインクルードパスを設定
- DxLib.libをリンクに追加
- プロジェクト設定を確認する
失敗2:キー入力が反応しない
解決方法:
- CheckHitKey関数が毎フレーム呼ばれているか確認
- キーコードが正しいか確認(KEY_INPUT_Zなど)
- SetKeyInputStringを受け取る設定を確認
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実用的なシューティングゲーム完成までの5ステップ

- STEP1DxLibの初期化(所要30分)
DxLibの基本設定と初期化処理を実装する。
学べること:DxLibの初期化、ウィンドウ作成
成果物:DxLibが動作する環境
- STEP2プレイヤーの実装(所要1時間)
プレイヤーの表示と移動処理を実装する。
学べること:描画処理、キー入力処理
成果物:操作可能なプレイヤー
- STEP3弾の実装(所要2時間)
弾の発射と移動処理を実装する。
学べること:配列管理、弾の処理
成果物:弾が発射できるシステム
- STEP4敵の実装(所要2時間)
敵の表示と移動処理を実装する。
学べること:敵の管理、移動パターン
成果物:敵が出現するシステム
- STEP5当たり判定の実装(所要2時間)
プレイヤーと敵、弾と敵の当たり判定を実装する。
学べること:衝突判定、距離計算
成果物:完成したシューティングゲーム
合計8時間で、実用的なシューティングゲームが完成します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

DxLibでシューティングゲームを組み立てる方法は、基本設定から始めて段階的に機能を追加することで実現できます。
DxLibはDirectXよりも簡単なので、C++初心者でも取り組みやすいでしょう。
✅ 記事の要点まとめ
- DxLibの基本:初期化とウィンドウ作成
- 実装手順:プレイヤー、弾、敵の順に実装
- 基本機能:描画、入力、当たり判定の実装
- よくある失敗5選:初期化エラー、キー入力など
- 実用的なゲーム:5ステップで完成(合計8時間)
今日から始める3ステップ:
- STEP1:DxLibをダウンロードして設定する(所要30分)
- STEP2:プロジェクトを作成してDxLibを初期化する(所要30分)
- STEP3:プレイヤーの表示と移動を実装する(所要1時間)
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント