@@ -38,6 +38,12 @@ enum DeathCause {
38
38
Fuel ,
39
39
}
40
40
41
+ #[ derive( PartialEq , Eq ) ]
42
+ enum GameMode {
43
+ Normal ,
44
+ God ,
45
+ }
46
+
41
47
struct Location {
42
48
c : u16 ,
43
49
l : u16 ,
@@ -125,6 +131,7 @@ struct World {
125
131
gas : u16 ,
126
132
score : u16 ,
127
133
death_cause : DeathCause ,
134
+ game_mode : GameMode ,
128
135
}
129
136
130
137
impl World {
@@ -144,6 +151,7 @@ impl World {
144
151
score : 0 ,
145
152
gas : 1700 ,
146
153
death_cause : DeathCause :: None ,
154
+ game_mode : GameMode :: Normal ,
147
155
}
148
156
}
149
157
}
@@ -164,6 +172,10 @@ fn draw(mut sc: &Stdout, world: &mut World) -> std::io::Result<()> {
164
172
. queue ( MoveTo ( 2 , 3 ) ) ?
165
173
. queue ( Print ( format ! ( " Fuel: {} " , world. gas / 100 ) ) ) ?;
166
174
175
+ if world. game_mode == GameMode :: God {
176
+ draw_god_mode ( sc) ;
177
+ }
178
+
167
179
// draw fuel
168
180
for index in ( 0 ..world. fuel . len ( ) ) . rev ( ) {
169
181
match world. fuel [ index] . status {
@@ -418,11 +430,16 @@ fn pause_screen(mut sc: &Stdout , world: &World) {
418
430
let _ = sc. flush ( ) ;
419
431
}
420
432
433
+ fn draw_god_mode ( mut sc : & Stdout ) {
434
+ let msg: & str = " GOD MODE: ON " ;
435
+ let _ = sc. queue ( MoveTo ( 2 , 4 ) ) ;
436
+ let _ = sc. queue ( Print ( msg) ) ;
437
+ }
438
+
421
439
fn goodbye_screen ( mut sc : & Stdout , world : & World ) {
422
440
let goodbye_msg1: & str = " ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███╗ ███╗███████╗██╗\n \r ██╔════╝ ██╔═══██╗██╔═══██╗██╔══██╗ ██╔════╝ ██╔══██╗████╗ ████║██╔════╝██║\n \r ██║ ███╗██║ ██║██║ ██║██║ ██║ ██║ ███╗███████║██╔████╔██║█████╗ ██║\n \r ██║ ██║██║ ██║██║ ██║██║ ██║ ██║ ██║██╔══██║██║╚██╔╝██║██╔══╝ ╚═╝\n \r ╚██████╔╝╚██████╔╝╚██████╔╝██████╔╝ ╚██████╔╝██║ ██║██║ ╚═╝ ██║███████╗██╗\n \r ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝\n " ;
423
441
let goodbye_msg2: & str = "████████╗██╗ ██╗ █████╗ ███╗ ██╗██╗ ██╗███████╗\n \r ╚══██╔══╝██║ ██║██╔══██╗████╗ ██║██║ ██╔╝██╔════╝\n \r ██║ ███████║███████║██╔██╗ ██║█████╔╝ ███████╗\n \r ██║ ██╔══██║██╔══██║██║╚██╗██║██╔═██╗ ╚════██║\n \r ██║ ██║ ██║██║ ██║██║ ╚████║██║ ██╗███████║██╗\n \r ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝╚═╝\n " ;
424
442
let _ = sc. queue ( Clear ( crossterm:: terminal:: ClearType :: All ) ) ;
425
-
426
443
let _ = sc. queue ( MoveTo ( 0 , 2 ) ) ;
427
444
let _ = sc. queue ( Print ( goodbye_msg1) ) ;
428
445
let _ = sc. queue ( MoveTo ( 0 , 10 ) ) ;
@@ -507,6 +524,13 @@ fn handle_pressed_keys(world: &mut World) {
507
524
// I'm reading from keyboard into event
508
525
match event. code {
509
526
KeyCode :: Char ( 'q' ) => world. status = PlayerStatus :: Quit ,
527
+ KeyCode :: Char ( 'g' ) => {
528
+ if world. game_mode == GameMode :: Normal {
529
+ world. game_mode = GameMode :: God ;
530
+ } else if world. game_mode == GameMode :: God {
531
+ world. game_mode = GameMode :: Normal ;
532
+ }
533
+ }
510
534
KeyCode :: Char ( 'w' ) => {
511
535
if world. status == PlayerStatus :: Alive && world. player_location . l > 1 {
512
536
world. player_location . l -= 1
@@ -598,6 +622,14 @@ fn main() -> std::io::Result<()> {
598
622
handle_pressed_keys ( & mut world) ;
599
623
if world. status != PlayerStatus :: Paused {
600
624
physics ( & mut world) ;
625
+ match world. game_mode {
626
+ GameMode :: God => {
627
+ if world. status != PlayerStatus :: Quit {
628
+ world. status = PlayerStatus :: Alive ;
629
+ }
630
+ }
631
+ GameMode :: Normal => { }
632
+ }
601
633
draw ( & sc, & mut world) ?;
602
634
} else {
603
635
pause_screen ( & sc, & world) ;
0 commit comments