Hiroshimarb 027-fiber

451 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
451
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hiroshimarb 027-fiber

  1. 1. Fiber の サンプルをかいてみた 2013/02/02 広島Ruby勉強会 #02713年2月2日土曜日
  2. 2. Fiber13年2月2日土曜日
  3. 3. 別名 マイクロスレッド コルーチン13年2月2日土曜日
  4. 4. 状態管理を意識せずに行える ため、協調的処理、イテレー タ、無限リスト、パイプな ど、継続状況を持つプログラ ムが容易に記述できる。13年2月2日土曜日
  5. 5. ゲームプログラミングでみたことある13年2月2日土曜日
  6. 6. ということで それ系のサンプルをかいてみた13年2月2日土曜日
  7. 7. http://www.youtube.com/watch?v=UOIOVLrBDEA13年2月2日土曜日
  8. 8. もっと派手にすればよかった13年2月2日土曜日
  9. 9. どんなコードを書きたいか13年2月2日土曜日
  10. 10. 10回 下に移動する 10回 右に移動する 10回 上に移動する 10回 左に移動する13年2月2日土曜日
  11. 11. 10.times do down end 10.times do right end 10.times do up end 10.times do left end13年2月2日土曜日
  12. 12. そうはうまくいかぬ13年2月2日土曜日
  13. 13. Fiber を使わずかいてみよう13年2月2日土曜日
  14. 14. def step if @time < 10 @x += 1 elsif @time >=10 and @time < 20 @y += 1 elsif @time >= 20 and @time < 30 @x -= 1 elsif @time >= 30 and @time < 40 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end13年2月2日土曜日
  15. 15. 状態を管理する必要がある def step if @time < 10 @x += 1 elsif @time >=10 and @time < 20 @y += 1 elsif @time >= 20 and @time < 30 @x -= 1 elsif @time >= 30 and @time < 40 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end 状態の更新が必要13年2月2日土曜日
  16. 16. どの状態か判断が必要 def step if @time < 10 下に移動する時 @x += 1 elsif @time >=10 and @time < 20 右に移動する時 @y += 1 elsif @time >= 20 and @time < 30 上に移動する時 @x -= 1 elsif @time >= 30 and @time < 40 左に移動する時 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end13年2月2日土曜日
  17. 17. Fiber を使うと?13年2月2日土曜日
  18. 18. def step fiber.resume end13年2月2日土曜日
  19. 19. @fiber ||= Fiber.new do loop do @x = 5 @y = 5 10.times do @x += 1 Fiber.yield end 10.times do @y += 1 Fiber.yield end 10.times do @x -= 1 Fiber.yield end 10.times do @y -= 1 Fiber.yield end end end13年2月2日土曜日
  20. 20. 10.times do down end 10.times do right end 10.times do up end 10.times do left end13年2月2日土曜日
  21. 21. @fiber ||= Fiber.new do loop do @x = 5 @y = 5 10.times do @x += 1 Fiber.yield end 10.times do @y += 1 Fiber.yield end 10.times do @x -= 1 Fiber.yield end 10.times do @y -= 1 Fiber.yield end end end13年2月2日土曜日
  22. 22. 概ね希望どおりかける13年2月2日土曜日
  23. 23. Fiber.yield を呼んだところで止めたままにできる13年2月2日土曜日
  24. 24. 再開するには Fiber#resume を使用する13年2月2日土曜日
  25. 25. メイン サブ 止めておいたところ からそのまま再開で きる13年2月2日土曜日
  26. 26. step メソッドで Fiber を再開させるだけ Fiber の中では必要なとこで止まる 状態をそのまま維持13年2月2日土曜日
  27. 27. 実際にはあちこちまわるけど プログラムは 真っ直ぐ書ける13年2月2日土曜日
  28. 28. おまけ13年2月2日土曜日
  29. 29. 描画には OpenGL とかつかってがんばる方法もあるけど Curses を使いました13年2月2日土曜日
  30. 30. Curses13年2月2日土曜日
  31. 31. http://ja.wikipedia.org/wiki/Curses curses(カーシス、カーズィス)は UNIX系システムでの端末制御ライブラリで ある。 テキストユーザインタフェース(TUI)アプ リケーションを作成するのに使われる。 名称は cursor optimization に由来する。13年2月2日土曜日
  32. 32. 端末の画面の特定の位置に文字を置く13年2月2日土曜日
  33. 33. Curses.setpos(x,y) Curses.addstr(*)13年2月2日土曜日
  34. 34. ソースコード https://github.com/eiel/Fiber-Sample13年2月2日土曜日
  35. 35. ご清聴ありがとうございます13年2月2日土曜日

×