42Tokyoの課題として制作した、C++17 / OpenGL 4.1 製のMinecraft風ボクセルエンジンです。
![]() 松明の点光源 |
![]() 弓による戦闘 |
- Perlinノイズによる手続き的地形生成(シード指定でワールドを再現可能)
- 9種類のバイオーム: 平原 / 砂漠 / ツンドラ / 岩山 / 沼地 / 山岳 / 峡谷 / 春(桜)/ 秋(紅葉)
- 16×256×16 のチャンク単位ストリーミング(描画距離17チャンク ≒ 272ブロック)
- LRUキャッシュによるチャンク管理と、フレーム分散でのメッシュ生成
- 水の流体シミュレーション(水源からの流れ・水位の伝播)
- ブロックの破壊 / 設置と、その差分のセーブデータ永続化
- テクスチャアトラス / スカイボックス / 昼夜サイクル
- シャドウマッピング(2048pxシャドウマップ)
- SSAO(スクリーンスペース環境遮蔽、64サンプル)
- 松明による点光源(最大16個のフォワードライティング)
- 視錐台カリング / 雲 / ミニマップ / 水中オーバーレイ
- 一人称の手・弓のチャージ表示、HUD・統計情報表示、タイトル画面
- 重力モード ⇔ 飛行モードの切替、水中物理、AABBによる衝突判定
- 通常 / スプリント / 高速モード(通常の20倍速)
- 体力システム、デス画面、リスポーン
- 9スロットのホットバー / インベントリ(1スタック最大64)
- クラフトシステム(棒 / 松明 / 弓 のレシピ)
- 弓によるチャージ射撃と矢
- ゾンビ(追跡AI・近接攻撃)と矢による遠距離戦闘
- ボス「エンダードラゴン」: 旋回 / 突進 / 復帰の飛行AI、ファイアボール、ブレス雲、ボスバー表示(ドラゴンエッグで召喚)
- バイオームごとのBGM・環境音のクロスフェード切替
- 位置ベースの効果音(足音・ブロック破壊 / 設置・攻撃・被ダメージ・水泳・モブ)
- TCPソケットによるクライアント / サーバー構成(最大8人)
- プレイヤー位置・ブロック変更・時刻・モブ / ドラゴンの同期
- サーバー側でのブロック変更の永続化
- 言語: C++17
- 描画: OpenGL 4.1 / GLFW / GLM / stb
- ビルド: CMake(3.24以上)
- インターフェース分離(
ICamera/IChunkManager/IRenderer/IWorld)による疎結合な設計 - サブシステム構成:
world(地形・水・クラフト) /renderer/streaming(チャンク管理) /player/mob/audio/network
| キー / 入力 | 操作 |
|---|---|
W A S D |
移動 |
| マウス | 視点操作 |
Space |
ジャンプ(地上) / 上昇(水中・飛行モード) |
Left Ctrl |
沈む(水中) / 下降(飛行モード) |
Left Shift |
高速モード切替(通常速度の20倍) |
Space ×2(ダブルタップ) |
飛行モード / 重力モード切替 |
左クリック |
ブロックを壊す / モブを攻撃 |
右クリック |
ブロックを置く(弓装備中はチャージ→離して発射) |
1 〜 9 |
ホットバースロット選択 |
C |
クラフトメニュー表示 / 非表示 |
↑ ↓ |
クラフトレシピ選択 |
Enter |
選択中レシピをクラフト |
Esc |
カーソル解放 |
動作要件
- CMake 3.24以上
- C++17対応コンパイラ
- OpenGL 4.1(macOS: AppleドライバによるMetal経由のOpenGL)
コマンド
# ビルド
make
# ビルド&起動(ランダムシード)
make run
# ビルド&起動(シード指定)
make run 12345マルチプレイ
make でビルドしたあと、生成された ./ft_minecraft を直接起動します。
# ① サーバーを起動(ヘッドレス)
# ポート省略時: 25565 / シード省略時: 42
./ft_minecraft --server [ポート] [シード]
# 例) ./ft_minecraft --server 25565 42
# ② クライアントからサーバーに接続
# ポート省略時: 25565
./ft_minecraft --connect <サーバーのIPアドレス> [ポート] [シード]
# 例) ./ft_minecraft --connect 192.168.0.10 25565 42- サーバーとクライアントで同じシード値を指定してください(地形を一致させるため)。
- 同一マシンで試す場合はIPアドレスに
127.0.0.1を指定します。 - 最大8人まで同時接続できます。
Cntlで下降できない場合は、以下のコマンドでアクセシビリティのCtrl+マウスでカーソル位置表示を無効化してください。
# アクセシビリティのCtrl+マウスでカーソル位置表示を無効化
gsettings set org.gnome.desktop.interface locate-pointer false


