1. Danilo Cabello
  2. dojo-unicamp

Commits

Danilo Cabello  committed c043083

Adicionando jogo da vida de Conway realizado no #3 Coding Dojo.

  • Participants
  • Parent commits 1bdf3af
  • Branches default

Comments (0)

Files changed (3)

File 2010_09_02_jogo_vida/README

View file
+Jogo da vida
+============
+
+Calcular a próxima geração do jogo da vida de Conway[1].
+
+Regras
+~~~~~~
+
+  - Célula viva com menos que duas vizinhas vivas, morre por subpopulação.
+  - Célula viva com mais de três vizinhas vivas, morre por superpopulação.
+  - Célula viva com duas ou três vizinhas vivas, vive até a próxima geração.
+  - Qualquer célular morta com três vizinhas vivas, se torna uma célula viva.
+
+Exemplo
+~~~~~~~
+
+Geração 1:    Geração 2:    Legenda
+........      ........      . - Célula morta
+....*...      ...**...      * - Célula viva
+...**...      ...**...
+........      ........
+
+[1] - http://en.wikipedia.org/wiki/Conway's_Game_of_Life
+

File 2010_09_02_jogo_vida/vida.rb

View file
+class Vida
+    def initialize(mapa)
+        @mapa = mapa
+    end
+
+    def proxima_geracao
+        if @mapa == '..' or @mapa == '*.'
+            '..'
+        else
+            '.'
+        end
+    end
+end
+
+class Celula
+    attr_reader :estado, :vizinhas
+
+    def initialize(estado)
+        @estado = 0 if estado == '.'
+        @estado = 1 if estado == '*'
+        @vizinhas = 0
+    end
+
+    def adiciona_vizinha
+        @vizinhas += 1
+    end
+
+end

File 2010_09_02_jogo_vida/vida_spec.rb

View file
+require 'vida'
+
+describe Vida, " descrevendo celulas que devem" do
+    it "permanecerem mortas se só houver células mortas" do
+        vida = Vida.new('.')
+        vida.proxima_geracao.should == '.'
+        vida = Vida.new('..')
+        vida.proxima_geracao.should == '..'
+    end
+    it "morrer se não tiver pelo menos dois vizinhos vivos" do
+        vida = Vida.new('*')
+        vida.proxima_geracao.should == '.'
+        vida = Vida.new('*.')
+        vida.proxima_geracao.should == '..'
+    end
+end
+
+describe Celula, " descrevendo uma celula" do
+    it "tem que saber seu estado atual" do
+        cel = Celula.new('.')
+        cel.estado.should == 0
+        cel = Celula.new('*')
+        cel.estado.should == 1
+    end
+
+    it "tem que ter 0 vizinhas" do
+        cel = Celula.new('.')
+        cel.vizinhas.should == 0
+    end
+
+    it "tem que poder adicionar vizinhos" do
+        cel = Celula.new('.')
+        cel.adiciona_vizinha
+        cel.vizinhas.should == 1
+    end
+
+end