Skip to content

Repository files navigation

ft_minecraft

42Tokyoの課題として制作した、C++17 / OpenGL 4.1 製のMinecraft風ボクセルエンジンです。

全体


松明の点光源

弓による戦闘

主な機能

ワールド生成・地形

  • Perlinノイズによる手続き的地形生成(シード指定でワールドを再現可能)
  • 9種類のバイオーム: 平原 / 砂漠 / ツンドラ / 岩山 / 沼地 / 山岳 / 峡谷 / 春(桜)/ 秋(紅葉)
  • 16×256×16 のチャンク単位ストリーミング(描画距離17チャンク ≒ 272ブロック)
  • LRUキャッシュによるチャンク管理と、フレーム分散でのメッシュ生成
  • 水の流体シミュレーション(水源からの流れ・水位の伝播)
  • ブロックの破壊 / 設置と、その差分のセーブデータ永続化

描画(OpenGL 4.1)

  • テクスチャアトラス / スカイボックス / 昼夜サイクル
  • シャドウマッピング(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人まで同時接続できます。

FAQ

Cntlで下降できない場合は、以下のコマンドでアクセシビリティのCtrl+マウスでカーソル位置表示を無効化してください。

# アクセシビリティのCtrl+マウスでカーソル位置表示を無効化
gsettings set org.gnome.desktop.interface locate-pointer false

About

42Tokyoの課題として制作した、Minecraft風ボクセルエンジン

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages