From db413a7f2be5391443968cd2ab21f7aa5d38cfc6 Mon Sep 17 00:00:00 2001 From: Ultradesu Date: Thu, 9 Apr 2026 20:58:07 +0100 Subject: [PATCH] it works --- .DS_Store | Bin 0 -> 8196 bytes src/board.rs | 2 +- src/game.rs | 26 ++++++++++++++------------ 3 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..db3975db72e9c50e71a734f83f9de3e77af61114 GIT binary patch literal 8196 zcmeHMYitx%6u#fIlo>m~v=%6p$!=X+W^M5PV5BQII`j8gsH^_Gs3yvR7ya zf*=Dy27(L(83-~EWZ+uJ0G-+H5N9~|`D!o+83;1)zs!KUKZNOWX~L%yoO)XaO>BZER3!Xtzu!qnld6Gtl!IsSNb$X5Jc0T17K&d$uXQ zAWEV%s5Bit8gGrqqTyAoYsaJEqw#oKTQuC(x_W$E66Z%+HtZQZXpETFF&+r~&4A6R z2<*wqs0_Q*&c8}jrOHvAE=MKZP%F<-d((aW@<3Y8S!PNCT*k;1jf|shHVjvpWb^D?!7_~9maRLwW%i{V?T}M;G;Jx}Z(9YY-E%gm zC`DV_qmeJYq;-%-a#im>ZP%#l#@?$HY@(4wjE5*q&RrNZkmgj($Mb3Q`@SQn#5I(WdGf7d73qSXC>v z%U;sOto}ezcMdBNQRL5PRwI(~jyRB~m+Z3guE)H$qBg6`MRA`iZ!c&xbFsWqjY>*J z?6xUE+(nBVmlRv-K1d+orfcNeL?tiv7@4eQa8aAQK~#21y(Jzw7dFUuic&gfjf_w* zHkT#U4pI3`yw`njXU2ARjcR83m6GaqQS7&eGX-te7(uXX(J6}F4@+{_WJ_Lmtb&(~ zyPH+D&vmsqpV#sfbW`J^dNrl?h|0HQqv&QyC(zSx!Lct!%9x8JR`T1($=q4*&dagX zP*(7%d&H@18Cyq3S~okuEcOsP#*VYM*$MU$`;whvXV_2dS9XE@#xAl;sDg}oEXES7 zLJMMuV?8!tBQ{|ty3vEZ$l@Rjn6Thr91mgw58+Wfg{Schp2drJ8L!|qypBn{i}&z8 zKE>zw0$<^4oWajHhhK0W7jX%{3w1)1utZoYEE8IUn9wS$7Pbo8gxx})kQIi6VIF}{ zF1P*DBNGl2KW!7Ca`Qg|3X@kax6rojJMNM@ulaKOZmwHkH#W>)urR!IWy_j%8#iBu zAxCW)sDCa15A)M1#lyUZi%PumN|ZxAR215wnF>;w?G~>%CY4y`Gs$*xPb2*s zcAA}K=h%660X3+Ff)G~VR;(dpZ^d>(cPF|C-D&h=9|oXd2s-X3tUD;-5Dw!A9>ybh z43FapLi%%f9xvcHULv%=N_d~d8+a3M;X|Cj$2f^kJls#=d;EYOE0EkZ9mzOfiR4nM zU>cS=MDjBFr<+{ITor%!Mz{apGV}NU>o~&T)q@NK8ThLVpt>W~ktD5|b~v}!4%2lX zUG8x8COGv>X!6=|qFy^r^zuIp={`)Vu1&(H6P%KS#=rg{;P3sp9i0Ec`Tw6h|Nj8E C%62CJ literal 0 HcmV?d00001 diff --git a/src/board.rs b/src/board.rs index 78cfaea..78528f2 100644 --- a/src/board.rs +++ b/src/board.rs @@ -70,7 +70,7 @@ impl Board { lines_cleared += 1; } else { new_grid[new_y] = self.grid[y].clone(); - new_y -= 1; + new_y = new_y.wrapping_sub(1); } } diff --git a/src/game.rs b/src/game.rs index a6d76de..4af7efc 100644 --- a/src/game.rs +++ b/src/game.rs @@ -32,6 +32,7 @@ pub struct Game { drop_interval: u64, last_drop: u64, status: GameStatus, + _input_handler: input::InputHandler, input_rx: mpsc::Receiver, } @@ -40,7 +41,7 @@ impl Game { pub fn new() -> io::Result { let current_piece = Piece::new(PieceType::random()); let next_piece = Piece::new(PieceType::random()); - let (_, input_rx) = input::InputHandler::new(); + let (_input_handler, input_rx) = input::InputHandler::new(); Ok(Game { board: Board::new(), @@ -52,6 +53,7 @@ impl Game { drop_interval: DROP_INTERVAL, last_drop: 0, status: GameStatus::Running, + _input_handler, input_rx, }) } @@ -87,9 +89,9 @@ impl Game { self.render(&mut stdout)?; // Небольшая пауза для контроля FPS - let elapsed = last_tick.duration_since(now).as_millis() as u64; - if elapsed < 1000 / FPS { - std::thread::sleep(Duration::from_millis(1000 / FPS - elapsed)); + let frame_time = Instant::now().duration_since(last_tick).as_millis() as u64; + if frame_time < 1000 / FPS { + std::thread::sleep(Duration::from_millis(1000 / FPS - frame_time)); } } @@ -235,12 +237,12 @@ impl Game { /// Рендер игры fn render(&self, stdout: &mut Stdout) -> io::Result<()> { - stdout.write_all(b"\x1B[2J")?; // Очистка экрана + stdout.write_all(b"\x1B[H")?; // Курсор в начало экрана // Заголовок - writeln!( + write!( stdout, - "Tetris - Score: {} - Lines: {} - Level: {}", + "Tetris - Score: {} - Lines: {} - Level: {}\x1B[K\r\n", self.score, self.lines_cleared, self.level )?; @@ -264,7 +266,7 @@ impl Game { } } } - stdout.write_all(b"|\n")?; + stdout.write_all(b"|\x1B[K\r\n")?; } // Нижняя граница @@ -272,14 +274,14 @@ impl Game { for _ in 0..board::BOARD_WIDTH { stdout.write_all(b"-")?; } - stdout.write_all(b"+\n")?; + stdout.write_all(b"+\x1B[K\r\n")?; // Следующая фигура - writeln!(stdout, "Next:")?; + write!(stdout, "Next:\x1B[K\r\n")?; self.render_preview(stdout, &self.next_piece)?; // Управление - writeln!(stdout, "Controls: Arrow Keys - Move | Space - Drop | Q - Quit")?; + write!(stdout, "Controls: Arrow Keys - Move | Space - Drop | Q - Quit\x1B[K\r\n")?; stdout.flush()?; Ok(()) @@ -305,7 +307,7 @@ impl Game { stdout.write_all(b" ")?; } } - stdout.write_all(b"\n")?; + stdout.write_all(b"\x1B[K\r\n")?; } Ok(()) }