Le fichier app/application.rb commence a enfler et a ressembler à un script. On peut rassembler ce qu’il contient dans une classe Game. L’idéal serait de n’avoir dans ce fichier que:

game = Game.new
game.start

On va donc déplacer tout dans une classe Game, et on ajoute une méthode initialize:

class Game

  def initialize
    @canvas = SpaceCanvas.new
    @player = Player.new
  end

  def start
    init_keyboard
    main_loop(50) do
      @canvas.clear_background
      @canvas.draw_player(@player)
    end
  end

  def main_loop(interval, &block)
    `setInterval(#{block.to_n}, #{interval})`
  end

  def init_keyboard
    %x(
      window.addEventListener("keydown",
        function(e) {
          if(e.keyCode == 37) { #{@player.move_left} }
          if(e.keyCode == 39) { #{@player.move_right} }
        },
        false);
    )
  end
end

Et voici le nouveau fichier application:

require 'opal'
require 'opal-jquery'

require 'space_canvas'
require 'player'
require 'game'

game = Game.new
game.start

J’aime bien quand c’est organisé ;)

Pour info, voici l’arbre de notre projet:

$ tree
.
├── app
│   ├── application.rb
│   ├── game.rb
│   ├── player.rb
│   └── space_canvas.rb
├── build.js
├── Gemfile
├── Gemfile.lock
├── index.html
└── Rakefile

Je sais que j’avais dit qu’on ajouterait les envahisseurs aujourd’hui, mais là je n’ai plus le temps ! On verra demain.

À demain.