bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

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を入力し、それを入出力とする信号関…

ゲームの中で信号関数を自在に扱う:Yampaの原理を理解する

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の部分を書き換える。コー…

物理的なモデルに基づいてゲームを開発する:OpenGLで描画

1.落下する物体を描画する 前回の記事で、FRPを用いて落下するボールの刻々と変化する高さと時間を数字で出力した。ここでは、直感的に分かりやすくするために、GLUT(The OpenGL Utility Kit)を用いて、描画する。コードは同じようにJekorが動画で説明した…

物理的なモデルに基づいてゲームを開発する:FRP事始め

1.ゲームとエンジンの紹介 日本では、フリー・モナドやオペレーショナル・モナドがゲームのエンジンに向いているとひところ話題になっていた。一方、海外では関数型リアクティブ・プログラミング(Functional Reactive Programming:以下ではFRPと省略する)…