Siv3Dを使用した作品のご紹介

# イントロダクション
まず初めに自己紹介と成り行き説明をすると自分は中学生のころに高専の文化祭でゲームを作っている部活動に出会いました．個人でもゲームって作ることができるのか！とちょっとした衝撃を受け，そしてその高専の情報工学科に入学してその部活に入りゲームを作るようになりました．
2年生の頃に初めてC++でゲームを開発しましたのですがその時に使用していたのはDxLibでした．そしてゲームを完成させた後にSiv3Dを教えて貰いました．かなり簡単にDxLibで細々と用意してた箱やら表示系統が簡単に呼び出せちゃうのでこんなに簡単にプログラムが組み立てられていいのかと思うほど驚きました．そのときのverはAugust2016v2です．出会いと使い始めから考えれば今年で7年ということになるのですが実はそんなに長く使ってなかったりします．というのもほぼ同時期にUE4を教えて貰ったのでUE4でゲームを作ったり，UE4で自作のモデルを使いたかったのでプログラムを書かずにMetasequoiaやBlenderをいじったりしてました．UE4はビジュアルスクリプトタイプでハイエンドなゲームが作れてしまうです．この触れ込みが実に魅力的なものでこのまま一旦そちらに自分は流れてしまうんですね．
そしてUE4でゲームを1本作ってその後は卒業研究をして高専を卒業し今度は大学に入学するんですが今度何か作品を作ろうと思ったときUE4でゲームを作るのはここで辞めちゃうんですね．何故かというとUE4がフリーでオープンに使えるからと言って情報があるとは限らないと感じちゃったからなんですね．リファレンスを読んだり質問したり，本を買ったりするのですがその通りに組んでも動かなかったり，ver更新早いので記事と内容が合わなかったり，そもそもどういう処理を行っているのかその処理がどこにあるのかわからなかったんですね．地面に触れてる判定はどこなのか，浮いてる判定のノードはどこなのなどなど．ということで上から順番に自分の思い描いたことを0から書くC++に回帰するんですね．そこで思い出すんですねSiv3Dあったなと．もうその頃にはOpenSiv3Dに進化していたのですがそこから自分のアプリやらゲーム作りに使うようになりました．なのでまあそう考えるとSiv3Dモノ作り歴は今年で4年目なんですね．
結構長々と書きましたがそんな感じで技術があったり，知識がある訳じゃないのでSiv3D Advent Calendar 2023に参加してる人が見たらナニコレやちゃっちいなぁと思ってしまうかもしれませんがあまりプログラムを触らない人やこれからプログラムを書く人はまあこれくらいのやつを作ってもなんら問題ないんだと作るハードルと完成ハードルを低くしてもらえればいいと思っています．完成させるの大事．

# Splat Random
制作2019年(春)
[Splat RandomのGithubリンク](https://github.com/kousuke1902/Splat-Random)

![20231123-220224-597.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/6c452ed8-b8ae-79bc-02d6-821d8512028c.png)

ということでSiv3D製作品第1作目でございます．
もう画像をみたときに「あっ」という声が聞こえてきそうです．想像がついた方はその通りでございましてスプラトゥーン2でブキをランダムに決定してくれるアプリです．スマブラみたいにランダム選択あればいいなぁということで作ってみました．数字，文字，真ん中の2色のパネル，飛び散ったインク，停止マーク，ぐるぐる矢印，上下左右矢印を画像形式で取り込んでます．スプラトゥーン2は1000%ヒーローで全ブキを購入していると139種類=11ページ*12種+7種なのでページで最大ページは12で12の場合のみ最大ページのブキ数を7にロックしています．人によって所有数は違うので矢印をクリックすると可変できるようになってます．ぐるぐるしてる矢印をクリックすると抽選を開始します．ちなみにランダムの取り方は先にページ数を確保してそのあとにページ内12から選びます．最大ページだった場合はその上限に合わせます．ブキのソートタブと試合形式もランダムにかけれるようにしてプライベートマッチで遊ぶときとかに使えるようにしました．タブ名，試合形式をクリックするとランダム内に入れるかのON/OFFを切り替えれます．
サクッと作った割にはなかなか良い出来だったかなと思っています．こういったシンプルなのをすぐに作れるのがSiv3Dの良いところだと思います．ちなみに公開してから使ってる人や感想は来たことがない．まあWebで動くランダマイザーがいるからわざわざダウンロードするものは使う理由がないからね．

# ふりふり！答え合わせ！
制作2019年(秋)
[ふりふり！答え合わせ！のGithubリンク](https://github.com/kousuke1902/Shake-Game)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/6ab43b9d-65a9-9cc8-c676-42e39b4b150f.png)


こちらの2作目はゲームになります．
大学の人間工学の講義で企業がコンテストでシニア向け脳トレゲームを作ってみる人いないと先生が聞いていたので作ってみた作品です．シニア向けなのでとことん操作と画面は単純になんなら幼稚園の子でも遊べるくらい単純なものをモットーにつくりました．パソコンを使う文化に触れない人はアプリを起動するところはやってもらってそれ以降はもうはいやってと手渡ししてバトンパスされても大丈夫だろうと思ってつくりました．ちなみにゲームを起動するとフルスクリーンになるので変なところはクリックされないようにしてます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/00ab2af2-df01-cb68-fcff-66bde67da8e1.png)
ゲームを開始するとカウントダウンと共にマウスを振ろうと言われます．はいタイトル通り振るのです．マウスを．本当はWiiリモコンやJoy-Conから加速度とれないかなーって模索したけど無理だった．無念．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/cd618fae-bf3f-759b-1b2d-0c06ec097ef6.png)
カウンダウンが終わると上の画像ような画面になります．真っ白な箱にそこに繋がったメーター，左はバツ，右はマル．この状態だとなにがなんだかな状態ですがする事は教えられています．マウスを振るのです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/0eb470cd-0699-c62f-3739-599c6e350f9c.png)
ということでマウスを振ってメーターのオレンジゾーンに入るとバチバチ線に電気が通って数式が見えます．この数式の回答が合っているかあってないかを左クリックと右クリックを使って問題を回答するというものになっています．ちなみに小刻みじゃなくて大振りしないと結構メーターは右に傾かないです．自分で作ってあれですがまあまあきついです．なんでこんなことをさせるのかというと運動をさせるためです．ややきつい運動(心拍数120程度)を毎日1時間行うと，コルチゾール(ストレスホルモン)の減少やセロトニン(幸せホルモン)の増加，短期記憶と長期記憶の向上など人間にとってとてもいいことが人間工学的にわかっています．それを目指したかったのですがマウス操作では限度があったのでやはりWiiリモコンやJoy-Conが欲しかったなぁと思ってしまいます．なんなら1ゲーム2分で結構短いから結局目標達成は難しかったね．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/c5e6b595-5a94-9d17-992f-e253aaa878fd.png)
時間が終わるとリザルトです．正解につき1点，不正解でｰ1点です．とても単純．ハイスコアと今のスコアが同点の場合には正解率が高い方を記録します．なので正解率も記録しています．
もう構造だけで言えばとても単純です．タイトル，ゲーム，リザルトをシーンチェンジで移動しています．ゲームの動きとしては最初に問題を作成します．1つ目の数字と2つ目の数字を生成．四則演算をランダム決定．その四則演算で1つ目と2つ目の数字を計算．数値をずらすか判定しずらすのであれば加算か減算を用いて間違いの答えを生み出します．メーターはマウスの1処理している間に動いた移動量と減速の抵抗値と足しわせたものをメーター値に加算して反映しています．そしてメーターが9割のゾーンに到達したら問題を表示します．そして正誤をクリックで答えさせたらまた問題を抽選します．とても単純．1か月くらいでサクッと作って応募して参加賞でマウスパッドをもらいました．

# ????????
制作2020年春～秋

3作目は大学のコンペでSiv3Dを使った作品を作ったら最優秀賞を取って30万円貰っちゃったという作品です．始まる前に最終選考まで残ってYoutubeで生放送するのでよかったら見てください！とRyo SuzukiさんにTwitterでDMを送ったのを覚えています．終わった際にはお祝いのメッセージを頂けました．なんでそんなすごいものをのっけないの？と言われると本名だからですねぇ・・・ええ・・・バリバリコンペの時に名前が出てるしそこの大学出身なんですぅ・・・すまんそこは許して．
ただコンペで審査員の方から結構いい評価がもらえたのでSiv3Dの機能の使い方やこういう出力をしようと考えるとこういうことができるのでSiv3Dは奥が深いからぜひみんなもC++をやってみよう！この作品を作るときにSiv3Dのドキュメント以外にドキュメントの機能にこれをしたいんだけどどうしたらいいんだーって悩んでつぶやいたらRyo Suzukiさんに教えて貰えたからかなり気軽に作れると自分は思ってたりしています．

# Audio Player
制作2023年春
[Audio PlayerのGithubリンク](https://github.com/kousuke1902/AudioPlayer)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624207/60b27adf-16d5-57aa-3a75-1e8c8e5e9d97.png)
4作目はオーディオプレイヤーを作りました．上のコンペで作った作品の次に出来がいいなと感じた作品です．作った理由はASMRを途中でやめたときにトラックと秒数を覚えるのがめんどくさかったからです．はい，そんな理由です．やることはわかりやすくて単純ですが結構いい感じに仕上げられたと思ってます．実装した機能は再生，一時停止，停止，ファイル選択，音量コントロール，再生位置変更のプレイヤーの基本機能に加えて開いているオーディオファイルの拡張子を抜いた名称，次曲のオーディオファイルの拡張子を抜いた名称，アプリケーション終了時に再生中でも最後に開いていたオーディオファイルのファイルパスと再生位置，音量の記録を行います．各種ボタンはというかオーディオプレイヤーはサンプルにあるのでそんなに難しくないです．今見たら参考にしてた時と少し変わってたけど特に問題なく作れると思います．ボリュームの数値も表記をちょこっと変えるとできます．少し形を変えるのがオーディオファイルを開くときのダイアログ．これ目的の再生されたオーディオファイルのファイルパスを受け取らないといけないのでOpenAudioを使わずにOpenFileを使ってます．これで保存用のファイルパス，再生するオーディオファイル，現在のタイトル，次曲のタイトルを拾ってきています．あとは開始時の設定読み込みと終了時の設定書き出しすれば完成．ファイルパスのあたりが記述は多いけどやってることはかなり素直です．装飾として再生中は真ん中のディスクが回転してスピーカーやらボックスがリズムを刻むように動きます．ディスクの回転はCDプレイヤーぽく動いて力作．あとファイルパスを拾ってオーディオファイルを再生してるのでストリーミング再生できてすぐに再生，位置変更できて動きが軽いです．ASMR用に作ったしDLsiteとかに置けないかな．

# Two Faced
制作2023年春~今
[Two FacedのGithubリンク](https://github.com/kousuke1902/TwoFaced)

今，制作中の5作品目です．ジャンルはシューティングゲームです．最初に書いた最初にDxLibで作ったのもシューティングゲームだったのですが敵や弾を配列に入れて敵の出現をifとelseでこの間の時間に来たらと記述して作ったとんでもなくヤバイ作品なんですね．まあその時の技術力だとそれが一番の解決策だったのであれなのですが・・・．ということで今知っている方法でシューティングゲームを新しく1からつくってみようというのがこの作品です．後から自機に敵に弾を拡張できるようにしたりといろいろ生み出しやすいように作っています．一応メカもので作ってます．メカいいよねメカ．まだまだ試行錯誤しながら作ってるのでキャラメイク等々は後回しでベースシステムを作ってます．ベースさえできればいろいろやりたい放題だとは思ってます．一応作りたいキャラクターの操作やシステムはあるのですがまずは基本から．出来上がったらどこかに公開したいですね～・・・
まあこういういろいろもったこともSiv3Dできるんだぞといった感じです．

# 終わりに
Siv3Dで制作した作品は以上の5作品です．実は技術的にはリファレンスにある関数ほぼそのままだったりする．結局のところ関数同士をどう組み合わせるのか普通にifとかforでどう処理するか，処理順どうしようかな～だけで作りたいものができるのが・・・・・．これはライブラリ関係なくC++でプログラミングしてたら出てくる感覚かな？まあ意外とそんな感じでプログラムじゃなくてギミックの生み出し方，作り方が大方悩むのでプログラムの書き出しはとくにSiv3Dを使ってるとそこまで苦じゃないので自分みたいにスプラトゥーンにランダム選択機能がねぇ！ASMRの終了箇所覚えてられるか！みたいな実現するまで単純そうな動機でも組んでみるのは良いんじゃないかなぁと思ってます．自分は実装まで悩んだり草案，思案したりするのが好きな方なので楽しんで組んでました．たぶんプラレールでいろいろレイアウト作ったり，すごろく作ったりする人は向いてます．それくらいいろいろSiv3Dは関数いろいろがあって組み合わせれるのでぜひ入れてC++書いてみてね．
今回のSiv3D Advent Calendar 2023の記事を書くのにQiitaアカウントを作ったからまたなんか書いてみようかな．とりあえずシューティングゲームを作ります．はい．Twitter(現X)にはふっつうにいてどーでもいいことから作ってる物の進捗を書き込んでるので探せばいます．ということでまたお会いしましょう．さよーならー