-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCampoMinado_spec.rb
156 lines (134 loc) · 5.15 KB
/
CampoMinado_spec.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# encoding: utf-8
require './CampoMinado'
describe CampoMinado do
before do
@jogo = CampoMinado.new(6)
@jogo.adicionaBomba(0,1)
@jogo.adicionaBomba(1,0)
@jogo.adicionaBomba(2,3);@jogo.adicionaBomba(2,4);@jogo.adicionaBomba(2,5)
@jogo.adicionaBomba(3,4)
@jogo.adicionaBomba(4,4);@jogo.adicionaBomba(4,5)
@jogo.adicionaBomba(5,4)
end
it 'Possui uma dimensao' do
@jogo.tamanho.should == 6
end
it 'Possui um metodo para verificar se uma casa eh uma bomba' do
@jogo.ehUmaBomba?(0,1).should == true
@jogo.ehUmaBomba?(2,3).should == true
@jogo.ehUmaBomba?(2,0).should == false
@jogo.ehUmaBomba?(5,3).should == false
end
it 'Tem um limite de bombas' do
@jogo.limiteBombas.should == 9
end
it 'Tem uma condição de vitoria' do
@jogo.vitoria.should == 27
end
it 'Tem um campo que esconde as bombas' do
@jogo.campo.should == [["#","#","#","#","#","#"],
["#","#","#","#","#","#"],
["#","#","#","#","#","#"],
["#","#","#","#","#","#"],
["#","#","#","#","#","#"],
["#","#","#","#","#","#"]]
end
it 'Permite colocar e remover bandeiras para marcar casas' do
@jogo.colocaUmaBandeira(5,4)
@jogo.colocaUmaBandeira(2,2)
@jogo.campo[2][2].should == 'B'
@jogo.campo[5][4].should == 'B'
@jogo.ehUmaBandeira?(5,4).should == true
@jogo.removeUmaBandeira(5,4)
@jogo.removeUmaBandeira(2,2)
@jogo.campo[2][2].should == '#'
@jogo.campo[5][4].should == '#'
@jogo.ehUmaBandeira?(5,4).should == false
end
it 'Nao permite clicar em casas com bandeiras' do
@jogo.colocaUmaBandeira(0,0)
@jogo.clicaCasa(0,0)
@jogo.campo[0][0].should == "B"
end
it 'Nao precisa colocar bandeiras em casas que ja foram visitadas' do
@jogo.clicaCasa(0,0)
@jogo.colocaUmaBandeira(0,0)
@jogo.campo[0][0].should == "2"
end
it 'Coloca as bombas no lugares corretos' do
@jogo.bombas[0][1].should == "*"
@jogo.bombas[1][0].should == "*"
@jogo.bombas[3][4].should == "*"
@jogo.bombas[4][4].should == "*"
@jogo.bombas[5][4].should == "*"
@jogo.bombas[4][5].should == "*"
end
it 'Clica em uma bomba e perde o jogo' do
@jogo.clicaCasa(0,1)
@jogo.clicaCasa(3,4)
@jogo.clicaCasa(4,5)
@jogo.campo[0][1].should == "*"
@jogo.campo[3][4].should == "*"
@jogo.campo[4][5].should == "*"
end
it 'Clica em uma casa e mostra a quantidade de bombas ao redor dela' do
@jogo.clicaCasa(3,3)
@jogo.clicaCasa(4,3)
@jogo.clicaCasa(0,0)
@jogo.clicaCasa(1,3)
@jogo.clicaCasa(2,0)
@jogo.campo[3][3].should == "4"
@jogo.campo[4][3].should == "3"
@jogo.campo[0][0].should == "2"
@jogo.campo[1][3].should == "2"
@jogo.campo[2][0].should == "1"
end
it 'Clica em casa sem nenhuma bomba por perto e as casas aos seu redor são reveladas' do
@jogo.clicaCasa(4,1)
@jogo.campo.should == [["#","#","#","#","#","#"],
["#","#","#","#","#","#"],
["1","1","1","#","#","#"],
["0","0","1","4","#","#"],
["0","0","0","3","#","#"],
["0","0","0","2","#","#"]]
end
it 'Clica em uma bomba e todas as bombas (e o campo) sao reveladas' do
@jogo.clicaCasa(1,0)
@jogo.campo.should == [["2","*","1","0","0","0"],
["*","2","2","2","3","2"],
["1","1","1","*","*","*"],
["0","0","1","4","*","5"],
["0","0","0","3","*","*"],
["0","0","0","2","*","3"]]
end
it 'Ganha pontos clicando fora de bombas' do
@jogo.clicaCasa(1,2)
@jogo.vitoria.should == 26
@jogo.clicaCasa(5,1)
@jogo.vitoria.should == 11
@jogo.clicaCasa(0,5)
@jogo.vitoria.should == 4
end
it 'Vence se clicar em todas as casas sem bombas' do
@jogo.clicaCasa(0,0);@jogo.clicaCasa(0,2);@jogo.clicaCasa(0,3);@jogo.clicaCasa(0,4);@jogo.clicaCasa(0,5)
@jogo.clicaCasa(1,1);@jogo.clicaCasa(1,2);@jogo.clicaCasa(1,3);@jogo.clicaCasa(1,4);@jogo.clicaCasa(1,5)
@jogo.clicaCasa(2,0);@jogo.clicaCasa(2,1);@jogo.clicaCasa(2,2);
@jogo.clicaCasa(3,0);@jogo.clicaCasa(3,1);@jogo.clicaCasa(3,2);@jogo.clicaCasa(3,3);@jogo.clicaCasa(3,5)
@jogo.clicaCasa(4,0);@jogo.clicaCasa(4,1);@jogo.clicaCasa(4,2);@jogo.clicaCasa(4,3);
@jogo.clicaCasa(5,0);@jogo.clicaCasa(5,1);@jogo.clicaCasa(5,2);@jogo.clicaCasa(5,3);@jogo.clicaCasa(5,5)
@jogo.ganhouOJogo?().should == true
end
it 'Nao ganha pontos clicando na mesma casa sem bomba' do
@jogo.clicaCasa(1,2)
@jogo.vitoria.should == 26
@jogo.clicaCasa(1,2)
@jogo.vitoria.should == 26
@jogo.clicaCasa(1,2)
@jogo.vitoria.should == 26
end
it 'Nao deve aceitar um tamanho de campo menor que 2' do
lambda {@jogo = CampoMinado.new(1)}.should raise_error('Tamanho Inválido para um Campo Minado')
lambda {@jogo = CampoMinado.new(0)}.should raise_error('Tamanho Inválido para um Campo Minado')
lambda {@jogo = CampoMinado.new(-1)}.should raise_error('Tamanho Inválido para um Campo Minado')
end
end