# 第1章: SDL2、Rust、およびgokuへの入門

### 序章

ゲーム開発のスリリングな世界へようこそ！ この章では、ゲーム開発者の間で人気が出てきている3つの強力なツール、Rust、Simple DirectMedia Layer (SDL2)、およびGokuを紹介します。 これらのツールを組み合わせることで、ビデオゲームを作成するための前例のない経験が得られます。 章の終わりまでに、Rust、SDL2、およびgokuを理解し、ゲーム作成の旅を始めるための開発環境を整備することができるでしょう。

### Rustとは？

Rustは、CやC++のような言語のパフォーマンスを提供しながらもメモリ安全性を保証することを目指すプログラミング言語です。 2010年に初めてリリースされ、ゲーム開発者、システムプログラマ、Webアセンブリアプリケーションの間で人気を博しています。 Rustはパフォーマンス、信頼性、生産性に強く焦点を当てています。

ゲーム開発におけるRustの魅力的な機能:

* **パフォーマンス**: RustはCとC++に似たパフォーマンスプロファイルを持っています。
* **メモリの安全性**: Rustの所有権システムはガベージコレクタなしでメモリの安全性を保証します。
* **並行プログラミング**: Rustの型システムと所有権モデルは恐れずに同時実行を可能にします。
* **相互運用性**: RustをCや他の言語と簡単に併用することができます。
* **コミュニティとエコシステム**: Rustは活発なコミュニティと成長するライブラリとツールのエコシステムを持っています。

### SDL2とは？

Simple DirectMedia Layer (SDL)は、OpenGLおよびDirect3Dを介してオーディオ、キーボード、マウス、ジョイスティック、およびグラフィックスハードウェアへの低レベルアクセスを提供するために設計されたクロスプラットフォームの開発ライブラリです。 SDL2はSDLの最新バージョンであり、ゲーム業界で広く使用されています。 SDL2は、Windows、Linux、macOSを含むさまざまなオペレーティングシステムで実行できるゲームを構築するための統一されたAPIを提供するのに役立ちます。

SDL2の特長:

* **クロスプラットフォームのサポート**: ゲームを一度書いて、複数のオペレーティングシステムにデプロイします。
* **シンプルなAPI**: SDL2には、グラフィック、サウンド、入力処理のためのシンプルなAPIがあります。
* **ハードウェアアクセラレーション**: SDL2はOpenGLおよびDirect3Dを使用してハードウェアアクセラレーションレンダリングを行うことができます。
* **コミュニティとエコシステム**: SDL2は広く使用されており、アクティブなコミュニティがチュートリアル、ライブラリ、ツールを作成しています。

### gokuとは？

gokuは、ゲーム開発のための新興のプログラミング言語です。 RustとSDL2との相乗効果により、パフォーマンス、使いやすさ、革新を求める開発者にとっての抜群の選択肢となっています。 Gokuは複雑なゲームのロジックを簡素化し、より速く開発を支援する一方、上級の開発者が求める柔軟性も提供します。

Gokuの特長:

**使いやすさ**: Gokuの構文は、明確さとシンプルさを念頭に置いて設計されているため、初心者にもアクセスしやすく、プロフェッショナルには堅牢です。

**パフォーマンスの最適化**: Gokuは、RustおよびSDL2と効率的に動作します。

**組み込みのゲームロジック**: Gokuの組み込み関数を使用すると、標準的なゲームメカニクスの実装が簡単になります。

**組み込みのGUI**: imguiを基にしたGUI。

### Rustとgokuの開発環境のセットアップ

Rustのコードを書き始める前に、開発環境をセットアップする必要があります。 以下の手順に従ってください：

1. Rustのインストール: 公式のRustのウェブサイトにアクセス

し、オペレーティングシステムのインストール手順に従ってください。

2. インストールの確認: インストールが完了したら、ターミナルを開いて以下のコマンドを実行し、Rustが正しくインストールされていることを確認します: `rustc --version`
3. Rustの更新: Rustの最新バージョンを使用していることを確認するためには良い習慣です。 Rustを更新するためには、以下のコマンドを実行します: `rustup update`
4. リポジトリ<https://github.com/ladroid/goku> からgokuゲームエンジンをクローンします。

### gokuでの最初のプログラムの作成

環境が整ったので、gokuを使用してウィンドウを開くシンプルなプログラムを書きましょう。 このプログラムは、この書籍を通じて開発するゲームの基礎となります。

SDL2を初期化: main.rsファイルで、SDL2を初期化します:

```rust
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut window = two_d::Window::new("Game Test", 600, 800)?;
    window.canvas.set_draw_color(sdl2::pixels::Color::RGB(0, 0, 0));
    window.canvas.clear();
    window.canvas.present();
    'mainloop: loop {
        for event in window.sdl_context.event_pump()?.poll_iter() {
            match event {
                sdl2::event::Event::Quit { .. } => break 'mainloop,
                _ => {}
            }
        }
        window.canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 0, 0));
        window.canvas.clear();
        window.canvas.present();
        std::thread::sleep(std::time::Duration::new(0, 1_000_000_000u32 / 60));
    }
    Ok(())
}
```

プログラムの実行: まず、ターミナルで、Cargoを使用してプログラムを実行します: cargo run コードをコピーして組み込みのテキストエディタに貼り付け、保存してから上部のバーのメニューからビルドします。

これにより、赤い背景のウィンドウが開きます。 Escapeキーを押すか、ウィンドウを閉じると、プログラムが終了します。

### 結論

おめでとうございます！ Rust、SDL2、およびgokuを使用したゲーム開発の刺激的な旅に乗り出しました。 これらのツールの基本的な知識が確立され、開発環境はゲームの準備が整っています。 次の章では、ゲーム開発のテクスチャについて詳しく説明し、gokuを使用してこれらをロードおよび管理する方法を解説します。 情熱を持ち続け、慎重にコードを書き、熟練したゲーム開発者になる道を歩んでください！


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lados-organization.gitbook.io/goku/goku-game-engine_jp/1-sdl2rustoyobigokuheno.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
