From 8d8deecfe73dcf04f081fc6e0a897cd990393284 Mon Sep 17 00:00:00 2001 From: mb Date: Sat, 5 Nov 2022 03:00:20 +0100 Subject: [PATCH] trucs --- src/main.rs | 54 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index 013207c..57e6411 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,33 +1,61 @@ +use std::{ + collections::HashMap, + env, + time::{self, Duration}, +}; + use rs48_lib::{game::Game, grid_displayer::GridDisplayer, prelude::*}; +use termion::{clear, cursor}; use tokio::{ io::AsyncWriteExt, net::{tcp::OwnedWriteHalf, TcpListener}, + time::sleep, }; +#[derive(Debug, Clone)] +struct Config { + delay: Duration, +} + async fn game(mut write: OwnedWriteHalf) -> Option<()> { - loop { + 'session: loop { let rules = GameRules::default(); let mut game = Game::new(rules); let mut controller = SimulatedController::new(50, 20); let displayer = GridDisplayer::new(1234); - loop { - let grid = game.get_board(); - let display = displayer.display(&grid); - let clear = termion::clear::All; - let goto = termion::cursor::Goto(1, 1); - let frame = format!("{clear}{goto}{display}"); - write.write_all(frame.as_bytes()).await.ok()?; - - let movement = controller.next_move(&game).ok()?; - game.turn(movement).ok()?; - std::thread::sleep(std::time::Duration::from_millis(500)); + '_game: loop { + if let None = turn(&mut game, &displayer, &mut write, &mut controller).await { + continue 'session; + } } } } +async fn turn( + game: &mut Game, + displayer: &GridDisplayer, + write: &mut OwnedWriteHalf, + controller: &mut SimulatedController, +) -> Option<()> { + let grid = game.get_board(); + let display = displayer.display(&grid); + let clear = clear::All; + let goto = cursor::Goto(1, 1); + let frame = format!("{clear}{goto}{display}"); + write.write_all(frame.as_bytes()).await.ok()?; + let movement = controller.next_move(&*game).ok()?; + game.turn(movement).ok()?; + sleep(Duration::from_millis(500)).await; + Some(()) +} + #[tokio::main] async fn main() { - let url = std::env::var("URL").unwrap_or_else(|_| "localhost:8076".to_string()); + let url = env::var("URL").unwrap_or_else(|_| "localhost:2048".to_string()); + let delay = env::var("DELAY") + .map(|s| s.parse::().unwrap()) + .unwrap_or(500); + let convif = { delay }; let server = TcpListener::bind(url).await.unwrap(); loop { let (stream, address) = server.accept().await.unwrap();