Skip to content

Commit 13d66a8

Browse files
committed
Add a Game-Over mode
1 parent 9dea205 commit 13d66a8

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/main.rs

+25-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::collections::HashMap;
99

1010
enum DrawEffect<'a> {
1111
None,
12+
Darker,
1213
Flash(&'a Vec<i8>),
1314
}
1415

@@ -152,6 +153,9 @@ impl Board {
152153
draw([1.0, 1.0, 1.0, 0.5], outer);
153154
}
154155
}
156+
DrawEffect::Darker => {
157+
draw([0.0, 0.0, 0.0, 0.9], outer);
158+
}
155159
}
156160
}
157161
}
@@ -175,6 +179,7 @@ impl Metrics {
175179
enum State {
176180
Flashing(isize, Instant, Vec<i8>),
177181
Falling(Board),
182+
GameOver,
178183
}
179184

180185
struct Game {
@@ -213,8 +218,12 @@ impl Game {
213218
self.state = State::Falling(self.possible_pieces[idx].clone());
214219
self.shift = (0, 0);
215220

216-
for _ in 0 .. rng.gen_range(0, 4usize) {
217-
self.rotate(false)
221+
if self.board.merged(&self.falling_shifted()).is_none() {
222+
self.state = State::GameOver;
223+
} else {
224+
for _ in 0 .. rng.gen_range(0, 4usize) {
225+
self.rotate(false)
226+
}
218227
}
219228
}
220229

@@ -229,6 +238,7 @@ impl Game {
229238
};
230239
(self.board.clone(), draw_effect)
231240
}
241+
State::GameOver => (self.board.clone(), DrawEffect::Darker),
232242
State::Falling(_) => (
233243
self.board.merged(&self.falling_shifted()).unwrap(), DrawEffect::None),
234244
};
@@ -242,6 +252,7 @@ impl Game {
242252
State::Falling(state_falling) => {
243253
state_falling.shifted(self.shift)
244254
}
255+
State::GameOver { .. } => panic!(),
245256
State::Flashing { .. } => panic!(),
246257
}
247258
}
@@ -272,6 +283,7 @@ impl Game {
272283
self.new_falling()
273284
}
274285
}
286+
State::GameOver { } => {},
275287
}
276288
}
277289

@@ -329,12 +341,20 @@ impl Game {
329341
_ => return,
330342
}
331343
}
344+
State::GameOver { } => {
345+
match key {
346+
Key::Return => {
347+
self.board.0.clear();
348+
self.new_falling();
349+
},
350+
_ => return,
351+
}
352+
},
332353
}
333354
}
334355

335356
fn rotate(&mut self, counter: bool) {
336357
match &mut self.state {
337-
State::Flashing {..} => panic!(),
338358
State::Falling(state_falling) => {
339359
let rotated = if counter {
340360
state_falling.rotated()
@@ -361,6 +381,8 @@ impl Game {
361381
}
362382
}
363383
}
384+
State::GameOver {..} => panic!(),
385+
State::Flashing {..} => panic!(),
364386
}
365387
}
366388
}

0 commit comments

Comments
 (0)