Enviar pesquisa
Carregar
Scalatronで楽しく学ぶ関数型プログラミング
•
Transferir como PPTX, PDF
•
2 gostaram
•
1,363 visualizações
Jun Saito
Seguir
Tecnologia
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 33
Baixar agora
Recomendados
Javaクラスファイルの読み方
Javaクラスファイルの読み方
y torazuka
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
脱! 俺たちは雰囲気でBPをいじっている
脱! 俺たちは雰囲気でBPをいじっている
Naoaki Yamaji
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Introduction for cocos2d
Introduction for cocos2d
佐藤 俊太郎
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
Recomendados
Javaクラスファイルの読み方
Javaクラスファイルの読み方
y torazuka
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
脱! 俺たちは雰囲気でBPをいじっている
脱! 俺たちは雰囲気でBPをいじっている
Naoaki Yamaji
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Introduction for cocos2d
Introduction for cocos2d
佐藤 俊太郎
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
Go Tanaka
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
Sharing Deep Dive
Sharing Deep Dive
Takaaki Suzuki
Lombokのススメ
Lombokのススメ
なべ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Taiji Miyabe
Introduction of Python
Introduction of Python
Tomoya Nakayama
Mais conteúdo relacionado
Mais procurados
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
Go Tanaka
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
Sharing Deep Dive
Sharing Deep Dive
Takaaki Suzuki
Lombokのススメ
Lombokのススメ
なべ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
Mais procurados
(9)
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Sharing Deep Dive
Sharing Deep Dive
Lombokのススメ
Lombokのススメ
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
Semelhante a Scalatronで楽しく学ぶ関数型プログラミング
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Taiji Miyabe
Introduction of Python
Introduction of Python
Tomoya Nakayama
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
Error handling in Erlang and Scala
Error handling in Erlang and Scala
Masahito Ikuta
Groovyコンファレンス
Groovyコンファレンス
Shinichiro Takezaki
Semelhante a Scalatronで楽しく学ぶ関数型プログラミング
(20)
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
Inside frogc in Dart
Inside frogc in Dart
Rpscala2011 0601
Rpscala2011 0601
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Flutterを体験してみませんか
Flutterを体験してみませんか
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Introduction of Python
Introduction of Python
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Programming camp code reading
Programming camp code reading
Error handling in Erlang and Scala
Error handling in Erlang and Scala
Groovyコンファレンス
Groovyコンファレンス
Scalatronで楽しく学ぶ関数型プログラミング
1.
Scalatronで楽しく学ぶ
関数型プログラミング 2012-07-22 Jun SAITO (@ST63Jun_)
2.
自己紹介 FiS Projectの皆さんは知ってると思いますが
Twitter: @ST63Jun_ 地方の私立工業大学で大学院生やってます 普段はJavaを読み書きしています Scala歴:「hello world は書いた」 2
3.
Scalatron プログラミング言語Scala (スカラ) による 多人数対戦型 プログラミングゲーム!!
3
4.
プログラミングゲーム Scalatronはプログラミングを題材にしたゲームです: プログラミング可能な「ボット」
プレイヤーはボットのプログラムをScalaで書く 他のプレイヤーのボットと対戦,最強のプログラムを目指す …面白そうでしょ? 4
5.
プログラミングゲームのよいところ 動いているのが目に見えるので楽しい 目標
(倒したい相手) がいるのでモチベが高まる ↓ 楽しいので夢中でプログラムを書く ↓ 気が付いたらプログラムが書けるようになる ↓ \大勝利!!/ 5
6.
ゲーム画面
6
7.
似てるっぽいもの Robocode (IBM)
戦車をJava (.NET) でプログラミングして対戦 カルネージハートシリーズ (ARTDiNK) OKEと呼ばれるロボットをプログラミングして対戦 プログラミングは「チップ」を繋げることで行う 初代はPlayStationでリリース,最新作はPSPで出ています 7
8.
Scalatronが想定するプレイヤー 以下のような人がプレイすることを想定しています: Scalaについて学びたい
Scalaのプログラミングスキルを磨きたい OK,どんなゲームなのか は解ったけどそのScalaっ てのは何者なわけ? 8
9.
プログラミング言語Scala スケーラブル (Scalable)
な言語 小規模なスクリプトから大規模システムまで TwitterのシステムはScala製 マルチパラダイム言語 オブジェクト指向 関数型プログラミング それぞれの良いところを融合 設計者は Martin Odersky JavaのGenericsの設計者でもあります 9
10.
関数型プログラミングとは オブジェクト指向についてはすでにご存知かと思います 関数型プログラミング
処理を手続きではなく関数として扱うプログラミングモデルです 手続き型言語の例 C, BASIC, COBOL オブジェクト指向は手続き型の延長線上にあります 関数型言語の例 Lisp, ML, Haskell 例として0から9までの偶数を列挙するプログラムを挙げます 10
11.
手続き型プログラミングの例
// Javaによる手続き型の例 for (int i = 0; i < 10; i++) { if (i % 2 == 0) System.out.println(i); } 1. 変数iを0から9まで1づつ増加させる 2. 変数iが2で割り切れるならそれは偶数なので,iを表示 3. 1に戻る 手続き型では問題をどうやって解くかを記述します 11
12.
関数型プログラミングの例
// Scalaによる関数型の例 println(Range(0, 9).filter(x => x % 2 == 0)) 数とは,0から9までの数である 偶数とは,数から「2で割り切れる」ものを選んだものである 関数型では問題は何であるかを記述します 12
13.
各スタイルの利点・欠点 手続き型
関数型 利点 利点 処理手順を直感的に書け 処理を簡潔にコード化でき る る 再利用性の高いコードを書 処理速度のチューニング きやすい がしやすい 欠点 欠点 画面表示や外部入力といっ 変数が増えるとわけがわ た,副作用を伴う処理を表 からなくなる 現しづらい そして,現実世界は副作用 コードが長いとわけがわ だらけである からなくなる 13
14.
マルチパラダイム Scalaが,今まで親しんでいた
CやJavaとは違う考え方をし ているのは解ったけど,そんな のすぐには覚えられないよ. Scalaはマルチパラダイム言語だ から,どちらのスタイルで書い たっていいのよ.…でも,Scala 本来のパワーを使うには関数型 も理解する必要があるわね. 14
15.
Scalatronのすすめ オブジェクト指向プログラミングがJava初学者の大きな壁で
あるように,関数型プログラミングもScala初学者の大きな壁 であることは間違いないと思います かつてオブジェクト指向がそうであったように,関数型言語 が今後ソフトウェア開発の常識になっていくことは十分考え られます ですので,ここはひとつScalatronで関数型言語のエッセンス を体験してみてはいかがでしょうか! 15
16.
Scaratronことはじめ Scalatronのここがすごい
Scala処理系を内蔵しています ボットのプログラムはブラウザ上のIDEから編集可能です IDEにはScalaプログラミングのチュートリアルが付属しています Scala処理系やIDEのインストールは不要,気軽に始められます! もちろん,お気に入りのエディタやIDEでも編集できます ブラウザ上で編集したコードはgitでクローンできます 編集したコードをpushすると反映されます 言い忘れてましたが,Scalatron本体は http://scalatron.github.com/ から入手可能です 16
17.
IDE
17
18.
ボットのプログラミング …の前に,Scalatronのゲームルールを簡単に説明します 基本的なルールは単純ですが,全部説明すると長いので公式
のドキュメント (英語) を参照することをお勧めします Scalatronのルールについては今回私家翻訳版を用意しました https://gist.github.com/3144973 誤訳などありましたらご指摘いただけると幸いです 18
19.
Scalatronゲームルール (1) プレイヤーがプログラミングするのは「ボット」です
ボットはエネルギーユニット (EU) を回収するのが任務です EUは食用となる動物や植物を集めることで増加します 逆に,毒性の植物に触れたり凶暴な動物に襲われるとEUは減 尐します 一定時間内に最も多くのEUを獲得したプレイヤーが勝者です 19
20.
Scalatronゲームルール (2) ボットは「ミニボット」と呼ばれるユニットを生産できます
ミニボットもEUを回収することができます ミニボットは「自爆」することができます 自爆によって他プレイヤーにダメージを与えられます 与えたダメージはボーナスとして自分のEUに加えられます 20
21.
プレイヤーユニットの説明 マスターボット ,ボット(Master
bot, Bot) プレイヤーの分身となるもの 不死身 ミニボットを生成することができます ミニボット (Mini-bot) マスターボットや他のミニボットから生成されます 最初にボットからEUを与えられ,活動中に尐しずつ減尐していき ます 保持しているEUが0になると消滅します 保持EUを爆発力に変換することで自爆攻撃できます 21
22.
資源ユニットの説明 資源ユニット
触れることでEUを回収したり,失ったりします ランダムな位置に生成され,常に一定量がマップ上に存在 マップを動きまわる「動物」と固定の「植物」があります 植物 (Plants) 触れると+100EUのジュガー (Zugar) 触れると-100EUのトキシフィラ (Toxifera) 動物 (Beasts) 触れると+200EUのフラペット (Fluppet) 触れると-150EUのスノーグ (Snorg) 22
23.
各ユニットの説明
23
24.
ボットのプログラミング サーバ-クライアントモデル
ボットはクライアントとしてゲームサーバに接続します ボットが見たものや現在のEU等はゲームサーバから通知されます ボットは通知された情報を見て,次の行動内容をサーバに返答し ます 一連のやりとりに用いるコマンドは Scalatron Protocol で規定さ れています https://github.com/scalatron/scalatron/blob/master/Scalatr on/doc/markdown/Scalatron%20Protocol.md 24
25.
サーバとのやりとりの例
class ControlFunction { val rnd = new Random() def respond(input: String): String = { *1 val (opcode, paramMap) = CommandParser(input) if( opcode == “React” ) { // サーバから“React”コマンドを受けとったら *2 val dx = rnd.nextInt(3)-1 // “Move”コマンドをサーバに返答する val dy = rnd.nextInt(3)-1 “Move(direction=” + dx + “:” + dy + “)” *3 } else { “” // “React”コマンドでなければなにもしない (サーバへ何も応答しない) } } *1 サーバから受信したコマンドを解析する CommandParserクラスを別に定義しています } *2 val は Javaでいう final Object … です *3 Scalaでは return 文は省略可能です 25
26.
ボットのビュー (視界) ボットが勝利するためには,敵ユニットや資源の位置を認識する
必要があります マスターボットは31x31,ミニボットは21x21の範囲で周囲を認 識することができます 検知したユニットやオブジェクトは以下のようなテキストで表現 され,サーバからボットへ通知されます WWWW WWW M: ボット自身 W_____ W: 壁 W P: ジュガー W_____ W 詳細は Scalatron Protocolに記載 W__M__ 26
27.
ボットプログラミングのポイント パーサの作成
ゲームサーバが送信してくる文字列を解析するパーサが必要です mapやfilterといった関数型言語の要素を応用することで簡単に実装できます 座標を表わすオブジェクト 位置や距離の演算のために必要です Scalaでは演算子を自分で定義することができます 戦術・戦略 ミニボットを上手く使うことで,多種多用な戦略を展開することができます 次のスライドではルールブックに載っている戦略について簡単に紹介します Scalatron のチュートリアルでは,以上の内容についてScalaの基礎から 説明していますので,ぜひ活用しましょう https://github.com/scalatron/scalatron/blob/master/Scalatron/do c/markdown/Scalatron%20Tutorial.md 27
28.
戦略・戦術 ミサイルディフェンス
敵ボットを見つけたら直ちにミニボットを生産 敵の位置をミニボットに入力し,敵ボットまでダッシュ! 十分な距離まで近づいたら自爆 爆発で与えたダメージ分のボーナスが自分のEUに加算されます フードフェッチャー 食料となるアイテム (フラペット・ジュガー) を見つけたら直ちに ミニボット生成 ミニボットは目標の位置までアイテムを回収しながら移動 十分な量のEUを回収したらマスターボットの所に帰還してEUをマ スターに転送 28
29.
戦略・戦術 ウォールプランター
敵ボットの周囲にミニボットを壁として設置 敵の活動を邪魔します マインレイヤー ミニボットを地雷として設置 敵が来るまで待機し,近づいたら自爆 29
30.
戦略・戦術 フラペットハーダー
フラペットを囲むようにミニボットを展開 追い込むようにしてフラペットをマスターボットの方へ誘導 マスターボットでフラペットを回収 スノーグテンプター 1対以上のミニボットを使ってスノーグを誘導 敵ボットの方へ持っていき,襲うように仕向けます 30
31.
まとめ プログラミング言語Scalaによるプログラミングゲーム
Scalatron を紹介しました Scalaはマルチパラダイム言語で,オブジェクト指向と関数型 言語の両方のスタイルが使えるとを説明しました Scalatron で関数型の側面を学ぶことをお勧めしました Scalatronのゲームルールを説明し,プログラミングのポイン トを簡単に解説しました 戦略・戦術の例を挙げました 31
32.
おわり ご静聴ありがとうございました
32
33.
質疑応答など
33
Baixar agora