Newer
Older
MyGames / Langton's ant.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Langton's ant</title>
<!-- rbcCanvas editor v0.8.2 -->
</head>
<body>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/opal_patched.min.js" onload="Opal.load('opal')"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/opal-parser_patched.min.js" onload="Opal.load('opal-parser'); Opal.load('parser/ruby23');"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/native.min.js" onload="Opal.load('native')"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/p5/p5.min.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/monkeypatch_p5.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/rbcanvas_transpiled_helper.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/rbcanvas_transpiled.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/microbit_bleuart.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/microbit_bleuart_rb.js"></script>
<script type="text/ruby" section="s00" name="main">
def setup
  puts RBCanvas::CODE_USER
  eval(RBCanvas::CODE_CONSTANT)
  eval(RBCanvas::CODE_USER)
end
module RBCanvas
  CODE_CONSTANT = <<-'EOC_CONSTANT'
    %x{
      cv = document.getElementById("defaultCanvas0");
      if (cv) {
        cv.remove();  // remove default Canvas (100 x 100)
      }
      // document.body.innerHTML = ""
    }
  EOC_CONSTANT
  CODE_USER = <<-'EOC_USER'
include DX
include Console
$PROGRAM_NAME = "main"
Window.width   = 1000
Window.height  = 1000
Window.bgcolor = C_WHITE

class Number
  def reverse() self.zero? ? 1 : 0 end
end

status = {}
pos = [0, 0]
dir = 0

Window.loop(false) do
  Window.save do
    Window.scale(5.0, 5.0)
    Window.translate(80, 80)
    
    status[pos] = status.fetch(pos, 0).reverse
    dir = (dir + -(status[pos].zero? ? 1 : -1) ) % 4
    
    Window.draw_box_fill(pos[0], pos[1], pos[0]+1, pos[1]+1, (status[pos].zero? ? C_WHITE : C_BLACK))
    
    case dir
    when 0
      pos[1] -= 1
    when 1
      pos[0] += 1
    when 2
      pos[1] += 1
    when 3
      pos[0] -= 1
    end
  end
end
$PROGRAM_NAME = "main"
  EOC_USER
end
</script>

</body>
</html>