Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Un space invaders avec Opal.rb - partie 7

| Comments

Niveau : intermédiaire

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:

app/game.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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:

app/application.rb
1
2
3
4
5
6
7
8
9
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.

Articles connexes

Commentaires