console_games/games/
four_in_a_line.rs

1use 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}