2014-01-01から1年間の記事一覧
3.発射台の位置の移動をスムーズに 前回の記事で発射台の位置を移動できるようになった。しかし、残念なことに、その動きはスムーズではなかった。ここでは、発射台をスムーズに移動できるようにする。即ち、dのキーを押し続けている間は右に移動し、aのキ…
1.概略 どの言語でも同じことがいえるが、開発環境を整えて作業をしたほうがずっと効率的である。幸いなことに、Haskellの開発環境に対しても、オンラインでの文法チェックや見やすくするためのコードの修正示唆などの機能がEclipceで提供されている。今回…
1.概略 キーボードの利用の仕方を覚えたので、石の発射位置を右矢印キーと左矢印キーで変えられるようにする。ゲームのデモを見たほうが早いので、ゲームを行っているときのビデオを下に挙げておく(発射位置の設定が悪く、今回は鳥にうまく当たっていない…
6.デモ 今回のプログラムの実行状況をビデをで説明する。 余り、代わり映えしないのだが、PgUpキーを押すと鳥が動き出すと同時に石が発射され、PgDnキーを押すと鳥と石が消える。 7.オブジェクトのプログラム それでは、鳥と石のオブジェクトのプログラ…
1.概略 これまで述べてきたゲームは、本当に基本的な部分を製作しただけで、勝手に鳥が飛んで、勝手に石が飛んで行って、鳥を撃ち落としていた。今回、紹介する記事は、この部分は変わらないのだが、キーボードから石の発射や石と鳥の停止を指示できるよう…
1.カードの三角形 イアン・スチュアートさんが書いている「数学の秘密の本棚」に「カードの三角形」というパズルがある。パズルは「1から15までの数字を書いた紙がある。これを三角形に並べたい。ただし、それぞれのカードがその下にある2枚のカードの差…
1.RSA暗号 最近、記事の下に「RSA暗号を生成せよ」という広告がある。この記事の下にもあるのではないかと思うが、そこには次のことが書かれている。RSA暗号を生成せよ。適当な素数\(p\)と\(q\)、下の条件を満たす自然数\(e\) 条件1: \(0 条件2: \(gcd((p-…
1.エラトステネスの篩 素数を求める方法で、よく知られているのはエラストテネスの篩(ふるい)である。原理は次のようになっている。 1.2から始まる自然数のリストを用意する。 2.また、素数が求まっていたとする。 3.素数のリストは、自然数のリス…
1.ラム 羊の肉はマトン、仔羊の肉はラムである。日本では羊の肉も仔羊の肉もあまり広くは受け入れられていない。例外は、北海道でジンギスカン鍋で羊の肉が使われる。最初に、羊の肉を食べたのはやはり北海道である。羊の肉で思い出となっているのは火鍋で…
1.データ型 シューティングゲームの主要な部分の説明は終わったので、ここでは、このゲームのために定義したデータ型やタイプを説明する。プログラムは次のようになっている。 module Types where import FRP.Yampa type Pos = (Double, Double) type Vel …
1.概略 ゲームを構成するプログラムの説明がほぼ終了したので、それらをまとめてゲームのプログラムとして機能させるメインプログラムを見ていく。Yampaではreactimateという関数を用意している。これを働かせるためには、初期化ルーチン、入力ルーチン、…
1.概略 ゲームの出力を行うのはグラフィックスである。広く利用されているのはOpenGLである。その簡易版はGLUTである。また、最近ではSDL(Simple DirectMedia Layer)も広く利用されている。このシューティングゲームではGLUTを用いる。ゲームの進行状況を…
1.概略 ゲームプログラムの登場人物、このシューティングゲームでは石二つと鳥一羽、の振舞いを定義しなければならない。どの石も同じ振舞いをすることにすると、ここでは、石と鳥の二種類の振舞いを定める必要がある。Yampaでは登場者の振舞いは信号関数…
5.用語の説明 説明に入る前にまず言葉の定義をしておく。ゲームの中で登場する人や物を登場者と呼ぶ。その振舞いは信号関数により定義されている。ゲームはある時間間隔で進行する。一つの時間間隔をサイクルと呼ぶ。登場者はあるサイクルを始める前にある…
1.プロセスの概略 Yampaを用いてのゲームは、reactimateを用いるが、reactimateは前にも記述した通り、init,input,output,processで構成されている。今回の記事では、この中のprocessについて説明する。ここで説明するゲームは極めて簡単なゲームで、石を…
1.チェコの思い出 2年ほど前にチェコの首都プラハに1週間程度滞在したことがある。夕方になると、ビールを飲みがてら夕飯をとりに、地元の人達で賑わっているレストランを訪れた。ある時、母親と子供二人のテーブルに目が留まった。母親が子供の一人にパイ…
1.Yampaでのゲーム作成 Yampaでのゲームの作成の概略はMeisinger作成の下図のとおりである。 この図をフローチャートで示したのがMeisinger作成の下図である。 ゲームのプログラムは、Yampaが用意しているreactimateという関数を利用する。これは4つの部分…
1.菊を愛でる 伊豆の修禅寺にある虹の郷で「菊花まつり」が開催されていたので見学に行ってきた。かってはお祭りに合わせて、全国各地で、菊の花を愛でる会があったが、現在は洋花に押されて豪華な菊の花を見る機会が減ったように思う。伊豆に滞在中の一日…
1.Haskanoidでの信号関数 パックマンでは信号関数はオブジェクトと入力の対を得てオブジェクトの新しい状態を得ていた。Haskanoidでも原理は同様である。信号関数はオブジェクトごとに用意され、信号関数への入力は、キーボード、マウス、Wiiリモートプラ…
1.動作画面 Haskanoidの操作画面は次のようになっている。 この画面が出てくるまで、インストール時に様々な障害に出会うことと思うが、最も生じやすいエラーは、画像や音声のデータがないと言われることだと思う。Haskanoidはこれらのデータをdata(小文字…
1.Yampaの生い立ち Yampaは前にも説明した通り、関数型リアクティブ・プログラミング(Functional Reactive Programming)の概念に基づいて離散的なシステムと連続的なシステムの両方を扱えるハイブリッドなプログラミングで、ドメイン特化言語である。Yampa…
1.懐かしいパックマン Yampaを用いてのゲームの作成方法は、Gerold Meisinger (University of Applied Sciences Upper Austria) の学位論文「Game-Engine-Architektur mit funktional-reaktiver Programmierung in Haskell/Yampa」やそれに関連する学会論…
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を入力し、それを入出力とする信号関…
1.信号関数の原理 前回の記事「シューティングゲーム手習い:複数投石(一石二鳥ならぬ二石一鳥)」で、投石された石と飛んでいる鳥の軌跡を描くプログラムを作成した。続きの記事として、石と鳥がぶつかった瞬間を描きたいのだが、これには、石と鳥が衝突…
1.ブイヤベース 料理を作り始めて、ごく最初に覚えたのがブイヤベースである。ブイヤベースはスープが命。とりわけ、香草野菜がその決め手となるので、フェンネルやサフラン(赤い色を出すためだがこれはバカ高い)などを手に入れるために、かつては、何軒…
1.物理的なモデルに基づいてゲームを開発する:FRP事始め 2.物理的なモデルに基づいてゲームを開発する:OpenGLで描画 3.物理的なモデルに基づいてゲームを開発する:将来の発展のために 4.物理的なモデルに基づいてゲームを開発する:落下するボー…
1.複数の石を同時に投げる 今回はこの動画のように複数の石、といっても二つだが、を投げる場合を考える。 プログラムの修正はそれほど難しくはない。鳥と石の軌跡を計算しているupdateに新たな石を加える(三行目が新たに加わった石で、鳥には当たらず鳥…