Successfully reported this slideshow.
Your SlideShare is downloading. ×

Hiroshimarb 027-fiber

More Related Content

Hiroshimarb 027-fiber

  1. 1. Fiber の サンプルをかいてみた 2013/02/02 広島Ruby勉強会 #027 13年2月2日土曜日
  2. 2. Fiber 13年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=UOIOVLrBDEA 13年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 end 13年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 end 13年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 end 13年2月2日土曜日
  17. 17. Fiber を使うと? 13年2月2日土曜日
  18. 18. def step fiber.resume end 13年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 end 13年2月2日土曜日
  20. 20. 10.times do down end 10.times do right end 10.times do up end 10.times do left end 13年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 end 13年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. Curses 13年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-Sample 13年2月2日土曜日
  35. 35. ご清聴ありがとうございます 13年2月2日土曜日

×