bitterharvest’s diary

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

2014-10-01から1ヶ月間の記事一覧

Haskellをインターネットで学ぶ

1.序論インターネット時代になって、自習自学することがとても容易になった。大学での講義内容が詳しく紹介されていたり、その分野の専門家が入門者向けにやさしく紹介する動画が提供されたり、WikiPediaにみられるように体系的な知識としてまとめられたり…

ゲームの中で信号関数を自在に扱う:スイッチ

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.ブイヤベース 料理を作り始めて、ごく最初に覚えたのがブイヤベースである。ブイヤベースはスープが命。とりわけ、香草野菜がその決め手となるので、フェンネルやサフラン(赤い色を出すためだがこれはバカ高い)などを手に入れるために、かつては、何軒…

Haskellプログラミング講座(上級編:ゲーム) - 目次

1.物理的なモデルに基づいてゲームを開発する:FRP事始め 2.物理的なモデルに基づいてゲームを開発する:OpenGLで描画 3.物理的なモデルに基づいてゲームを開発する:将来の発展のために 4.物理的なモデルに基づいてゲームを開発する:落下するボー…

シューティングゲーム手習い:複数投石(一石二鳥ならぬ二石一鳥)

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と省略する)…

見やすくするならレコード

1.タプルとレコード 複数のデータで一つのデータが構成されるということがよくある。製品と部品、団体とメンバーなどがその例である。タプルは構成要素となっているデータを列挙することで、複合的なデータを表すことができる。しかし、プログラム作成後時…

サンタンデールとビルバオ

1.サンタンデール サンタンデールで国際会議があり、発表のためスペインの北部のカンタブリア地方とバスク地方を訪れた。国際会議が開催された場所は、サンタンデール市のマグダレーナ宮殿。アルフォンソ13世によって1900年代初頭、建てられた夏の宮…

接着関数-路線網(出発駅と到着駅間の駅数)

1.出発駅と到着駅間の駅数を求める 出発駅から到着駅までのおよその所要時間はその間の駅数で分かる。まず同一路線の場合は駅に付けられた番号の差となる。従って、次のようになる。 stat0' :: Source -> Destination -> Int stat0' sor des = abs $ snd (…

接着関数-路線網(乗換駅)

1.乗換駅 三つの路線だけだが路線網を求めることができた。そこで、この路線図を利用して乗換駅を求めることにする。乗換数ごとに関数を作ることとし、入力は乗車で用いる路線line1、下車で用いる路線line2、さらに路線網networkを入力し、乗換駅のリスト…

接着関数-路線網

1.接着関数 部品を結合して製品にしたり、サブルーチンを集めてプログラムを作成したり、課をまとめて部にしたりなど、物理的な結合や概念的な結合は日常茶飯事に発生する。このような結合は、数学的には、接着関数として次のように定義される。接着空間:…

小学生に戻って旅人算(内包表記、遅延評価)

1.旅人算 流水算と似た問題に旅人算がある。旅人算には、①出会うときを求める問題と②追いつくときを求める問題の二種類がある。前者は、離れたところから二人の旅人が相手の方向に歩く場合である。後者は、一人の旅人が先に出発し、別の旅人が先の旅人を追…

ガタガタ(型々)とうるさい複素数

1.分野向けの型を作成する Haskellでは、整数や小数などの一般的な型は提供しているが、それぞれの応用分野で用いられる型は用意してない。電気・電子の分野では複素数で表すと便利な時があるが、Haskellでは複素数は残念ながら用意していない。ここでは、…

ガードをかためて連立方程式を解く

1.場合分け 答えを導くのに、場合分けしたいときが多い。前の記事で説明したパターン照合も一つだが、もう一つの方法にガードがある。今回は連立方程式を解くときに、ガードを用いることとする。 2.連立方程式 連立方程式は、 \begin{align*} ax + bx = …

流水算を解く(TypeとTuple)

1.流水算とは 小学校の頃を思い出して、今回は、流水算。川を上り下りする船の所要時間を知って、川の流れの速さと船の静水時の速さ(水の流れがないときに船が進む速さ)を解く問題である。この問題には、前提があって、次の式が成り立っていると想定してい…