---
# System prepended metadata

title: ミニゲームのつくりかた

---

# ミニゲームのつくりかた
ゲーム制作の基礎知識の講座はしたけど制作そのものに関する話をしてないな、と思ったので
ゲーム制作の手順でも書いていきます

~~講座テキストだと手順踏むのがめんどくさかったのでここに~~

## 1.ゲームの動作を粗くイメージする
シーン(画面)の移り変わりを書き出してみる
```graphviz
digraph G {
    タイトル -> ゲーム説明 -> タイトル;
    タイトル -> ゲーム画面 -> ゲーム結果画面 -> タイトル;
    タイトル -> ゲーム終了;
}
```

## 2. それぞれのシーンでどういう動きをするのかをイメージする
タイトルを例にして説明する。
### 2.1 シーンごとにどういう変数を持てばよいかを考える。
例:

`selected`

:   どのメニューの項目が選ばれているか
    0: ゲーム開始
    1: ゲーム説明
    2: 終了
### 2.2 シーン間で共有したい変数を考える
例:

`score`

:    ゲームの得点を記憶して結果画面で表示する
### 2.3 シーンの動きを考える。
フローチャートというのを使うとよい。
ただ、正しい書き方をする必要はないので簡単な図を書いてみよう
```flow
st=>start: 開始

cond_pl=>condition: ↓キーが押されているか
sel_pl=>operation: selected++

cond_mi=>condition: ↑キーが押されているか
sel_mi=>operation: selected--

cond_dn=>condition: selected<0
sel_dn=>operation: selected=2

cond_up=>condition: selected>2
sel_up=>operation: selected=0

cond_ok=>condition: Enterキーが押されているか
sw_0=>condition: selectedは0か
g=>end: ゲーム開始

sw_1=>condition: selectedは1か
d=>end: ゲーム説明へ

sw_2=>condition: selectedは2か
q=>end: 終了


st->cond_pl

cond_pl(yes)->sel_pl->cond_mi
cond_pl(no)->cond_mi

cond_mi(yes)->sel_mi->cond_dn
cond_mi(no)->cond_dn

cond_dn(yes)->sel_dn->cond_up
cond_dn(no)->cond_up

cond_up(yes)->sel_up->cond_ok
cond_up(no)->cond_ok

cond_ok(yes)->sw_0
cond_ok(no)->cond_pl

sw_0(yes)->g
sw_0(no)->sw_1

sw_1(yes)->d
sw_1(no)->sw_2

sw_2(yes)->q

```

### 2.4 画面デザインを考える
横16:縦9の長方形の画面を使うので、それに収まるようにうまくデザインしていこう。
イラストは頼むと先輩がやってくれるかもしれません。

### 2.5 コードを書く(の手前)
ここまでできたら一旦報告をしよう。
それまでに講座テキストがある程度書き進められているはず。
自分で[こういうサイト](https://siv3d.github.io/ja-jp/)を見て書いてもよい。
わからなければ聞きに来よう。

## 3. 質問のしかた
初めは何もわからないのは当たり前なので質問は恐れるものではない。
ただ、わからない→即質問 ではなく、次のことをしてから質問してみよう。

- 何がわからないのかを考える
    - 「わからない」だけの質問は思考停止でしかない。
    - もちろん、「何がわからないのかわからない」という問いは発生しうるので、そういう時は相談しに来ること。
- どうしたら解決するかを考える
    - ○○がわからない
        - 動作はわかるけどプログラムの書き方がわからない→こういうコードをかければ解決する
        - 今のルールではゲームにならない、どうしたら楽しんでもらえるか→ルールを改善すれば解決する
        - (など
- どの問題なのか考える
    - OpenSiv3D
    - C++
    - Visual Studio
    - (それ以外?)
- 15分は自分で調べてみる
    - Googleは最近優秀になっているが、要点の **単語** だけをスペースで区切って検索するのがとても効率が良い。
    - [Qiita](https://qiita.com)や[cpprefjp](https://cpprefjp.github.io),[(英語が大丈夫なら)Stack Overflow](https://stackoverflow.com)などのサイトは参考にしやすい。
