Haskellプログラミング講座(上級編:ゲーム)
1.スイッチ スイッチはある一つの信号関数を他の信号関数で置き換えるものである。スイッチが生じるのは、スイッチング・イベントの発生元で、最初のイベントが発生したときである。スイッチの型シグネチャは次のようになっている。 switch :: SF a (b, Ev…
1.アロー記法 ここで用いているアロー記法は、John Hughesが定義したものを応用している。もとの理論は次のようになっている。 John Hughesのアロー記法: 1)型のような関数に対する抽象データ型インタフェースである。2)プロセスのような計算を表現す…
1.基本的な信号関数 恒等関数:ある信号aをそれ自身(信号)aへ写像する信号関数である。 identity :: SF a a 定数:ある信号bを入力し、それを出力とする信号関数を出力する。 constant :: b -> SF a b iPre:ある信号aを入力し、それを入出力とする信号関…
1.信号関数の原理 前回の記事「シューティングゲーム手習い:複数投石(一石二鳥ならぬ二石一鳥)」で、投石された石と飛んでいる鳥の軌跡を描くプログラムを作成した。続きの記事として、石と鳥がぶつかった瞬間を描きたいのだが、これには、石と鳥が衝突…
1.複数の石を同時に投げる 今回はこの動画のように複数の石、といっても二つだが、を投げる場合を考える。 プログラムの修正はそれほど難しくはない。鳥と石の軌跡を計算しているupdateに新たな石を加える(三行目が新たに加わった石で、鳥には当たらず鳥…
1.石と鳥の軌跡 今回はこの動画のように機能するプログラムを作成する。 今、角度\(\theta =tan^{-1} \frac{v_{y_0}}{v_{x_0}}\)、速度\(\sqrt{v_{x_0}^2 + v_{y_0}^2}\)で石を投げた(\(x\)方向、\(y\)方向の速度成分がそれぞれ\((v_{x_0}\),\(v_{y_0})\)…
1.投石ゲーム 原始的だが、投石で鳥を落下させるゲームの設計を目指して、基本的な部分を作成する。まずは、前回の記事で作成したプログラムを整理する。 一つは、位置、速度、加速度はそれぞれ\(x\)方向と\(y\)方向を別々に記述していたが、プログラムを…
1.落下するボールのプログラムを応用する 今回のプログラムを実行すると次のようになります。 落下するボールのプログラムができれば、シューティングゲームなど幅広い分野に応用することができる。ここでは、ボールを投げたときの軌跡を求める。今、ボー…
1.FRPを本格的に 今回のプログラムを実行すると次のように動きます。 今まで書いたプログラムでは、落下する物体は地面をも突き破ってどんどんと地下のほうに落ちていく。これでは非現実的なので地表面で跳ね返るようにする。即ち、\(y=0\)の時、\(v_t\)は…
1.mainの部分を本格的に reactimateは簡便で便利な関数だが、落下するボールをマウスで操作したいなどインタラクティブな操作を加えるときは、不向きである。そこで、ここでは将来の拡張に備えて、reactInitとreactを用いて、mainの部分を書き換える。コー…
1.落下する物体を描画する 前回の記事で、FRPを用いて落下するボールの刻々と変化する高さと時間を数字で出力した。ここでは、直感的に分かりやすくするために、GLUT(The OpenGL Utility Kit)を用いて、描画する。コードは同じようにJekorが動画で説明した…
1.ゲームとエンジンの紹介 日本では、フリー・モナドやオペレーショナル・モナドがゲームのエンジンに向いているとひところ話題になっていた。一方、海外では関数型リアクティブ・プログラミング(Functional Reactive Programming:以下ではFRPと省略する)…