Recommended
PDF
capistrano-colorized-stream
PDF
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
PDF
Indentとの戦い-艦これOSS便利ツールの紹介-
PDF
艦これタイマー for firefox addonの拡張
PDF
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
PDF
PPT
KEY
PDF
RubyもApache Arrowでデータ処理言語の仲間入り
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
KEY
PDF
PDF
Apache ArrowのRubyバインディングをGObject Introspectionで
PDF
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
PPTX
Apilecture for 2014/02/22 at shannonlab
PPTX
PDF
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
PDF
Perl and Email #3 ``Haineko''/Kyoto.pm #5
KEY
PPTX
PDF
PPTX
PDF
第2回関数型言語勉強会 LT 「Haskell 入門書を読んだその後は」
PDF
PDF
More Related Content
PDF
capistrano-colorized-stream
PDF
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
PDF
Indentとの戦い-艦これOSS便利ツールの紹介-
PDF
艦これタイマー for firefox addonの拡張
PDF
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
PDF
What's hot
PPT
KEY
PDF
RubyもApache Arrowでデータ処理言語の仲間入り
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
KEY
PDF
PDF
Apache ArrowのRubyバインディングをGObject Introspectionで
PDF
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
PPTX
Apilecture for 2014/02/22 at shannonlab
PPTX
PDF
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
PDF
Perl and Email #3 ``Haineko''/Kyoto.pm #5
KEY
PPTX
PDF
PPTX
Viewers also liked
PDF
第2回関数型言語勉強会 LT 「Haskell 入門書を読んだその後は」
PDF
PDF
PDF
PDF
PPTX
PDF
PDF
FP習熟度レベルとFSharpxのIteratee
PDF
PDF
Similar to F#+Erlangで簡単なシューティングゲームを作ってみている
PDF
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
PDF
PDF
node+socket.io+enchant.jsでチャットゲーを作る
PDF
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PDF
Non-blocking “Scalable” Network Programming with “aleph (by Z.Tellman)”
PDF
PDF
PPTX
PPTX
PDF
PPTX
PDF
PPTX
20130228 Goノススメ(BPStudy #66)
PDF
PPTX
PDF
PDF
PDF
PPTX
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
F#+Erlangで簡単なシューティングゲームを作ってみている 1. F# と Erlang で簡単なゲームを作って
みている
pocketberserker
2012 年 11 月 24 日
2. お前誰よ?
• 中山 / なかやん / ぺんぎん /
@pocketberserker
• どこにでもいるふつーのサーガ大学院生
• F# / Haskell / Erlang / Scala / TDD / テスト
• 関数プログラミング≒私の人生を変えたもの
• FSharpx/Scalaz のこんとりびゅーたらしい…
3. 4. 5. 6. 7. 8. 9. 10. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 当初の選択肢
• Unity3D + C# + F# (外部ライブラリ)
• F# + WebSharper
• Scala + Play 2 + 何か
• フル Haskell でがんがる
27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. WebSharperって?
• 本家曰く “the world’s most versatile web and
mobile development framework for .NET”
• F# で書ける
• JavaScript を書かずに JS の機能が使える
38. WebSharperって?
• 本家曰く “the world’s most versatile web and
mobile development framework for .NET”
• F# で書ける
• JavaScript を書かずに JS の機能が使える
• HTML5 などもいける
39. 例:よくあるゲームループ
Unity3D(C#) の例
public class Hoge : MonoBehaviour
{
void Update()
{
hoge();
}
}
40. WebSharper 内でベタ書きすると
F# の例
[JavaScript]
let rec gameLoop () =
async {
do hoge()
do! Async.Sleep (1000 / fps)
do! gameLoop ()
}
41. Canvas 使って何か書く
[JavaScript]
let hogeCanvas width height =
let element = Tags.NewTag Canvas []
let canvas = AsCanvasElement element.Dom
canvas.Width - width
canvas.Height - height
let context = canvas.GetContext 2d
Async.Start (gameLoop ())
Div [ Width (string width); Attr.Style float:left ] - [
Div [ Attr.Style float:center ] - [
element
|! OnMouseMove (fun _ arg -
let offset = JQuery.Of(element.Dom).Offset()
piyo offset arg.X arg.Y
)
]
]
42. 43. 44. 45. こんな感じで
• html や JS の知識を仕入れながら書く
• F#の知識が少しあればそれなりに書ける
• 副作用云々は、作るもの次第で考えたほうが
いいと思う
46. こんな感じで
• html や JS の知識を仕入れながら書く
• F#の知識が少しあればそれなりに書ける
• 副作用云々は、作るもの次第で考えたほうが
いいと思う
• ジェネレートされた JS コードは読まないほ
うがいい
47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 例:プレイヤー機の座標を送受信
Erlang 側 (初期化部分)
websocket_init(_Any, Req, _Opts) -
Interval = round(1000 / 30),
timer:send_interval(Interval, tick),
Req2 = cowboy_req:compact(Req),
{ok, Req2, undefined, hibernate}.
65. 例:プレイヤー機の座標を送受信
Erlang 側 (受信部分)
websocket_handle({text, Msg}, Req, _State) -
{[{_X, X}, {_Y, Y}]} = jiffy:decode(Msg),
{ok, Req, {X, Y}};
websocket_handle(_Any, Req, State) -
{ok, Req, State}.
66. 例:プレイヤー機の座標を送受信
Erlang 側 (更新および送信)
websocket_info(tick, Req, {X, Y}) -
Data = jiffy:encode({[{x, X}, {y, Y}]}),
{reply, {text, Data}, Req, {X, Y}, hibernate};
websocket_info(_Info, Req, State) -
{ok, Req, State, hibernate}.
67. 例:プレイヤー機の座標を送受信
F#側
[JavaScript]
let initSocket context =
let (|Text|Binary|) (data:obj) =
match data with
| :? string as text - Text text
| binary - Binary (AsArrayBuffer binary)
let socket = WebSocket(ws://localhost:19860/shooting)
socket.Onopen - (fun () -
PlayerShip.init | Json.Stringify | socket.Send
)
socket.Onmessage - (fun msg -
drawBackground context
match msg.Data with
| Text text -
text
| (Json.Parse AsInfo)
| draw context
| Binary _ - ()
)
socket
68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ではデモ・
・・といきたかったけど
間に合いませんでした orz
78. まとめ
• 手段を目的化して FP を学ぶのもありだと思
います
• 自分にあった関数型言語を見つける(当たり
前だけど FP=Haskell ではない)
• 気になったら理論へ進む
• JavaScript は生成するもの(キリッ
79.