console_games/games/
four_in_a_line.rs1use crate::Play;
2use std::io::{stdout, Write};
3pub struct FourInALine;
4mod internal;
5
6impl Play for FourInALine {
7 fn name(&self) -> &'static str {
8 "Four in A Line"
9 }
10
11 fn start(&self) {
12 let mut game = internal::FourInALine::default();
13
14 loop {
15 game.clear_screen();
16 game.print_table();
17
18 print!("Play's {} turn: ", game.turn_of);
19 stdout().flush().expect("Failed to flush");
20
21 let col = match game.get_col_input() {
22 Some(col) => col,
23 None => continue,
24 };
25
26 let row_idx = game.drop_in_col(col);
27
28 if game.dropped_count == game.table.len() * game.table[0].len() {
29 game.clear_screen();
30 game.print_table();
31 println!("Draw!\n");
32 break;
33 }
34
35 if let Some(player) = game.get_winner(row_idx, col) {
36 game.clear_screen();
37 game.print_table();
38 println!("Player {player} wins!\n");
39 break;
40 }
41
42 game.change_turn();
43 }
44 }
45}