11 releases (1 stable)

1.0.0 May 12, 2019
0.9.0 Mar 6, 2018
0.8.0 Jul 22, 2017
0.5.0 Mar 29, 2017

#815 in Command-line interface

Download history 14/week @ 2024-07-22 196/week @ 2024-07-29 13/week @ 2024-08-05 23/week @ 2024-08-12 10/week @ 2024-08-19 5/week @ 2024-08-26 18/week @ 2024-09-02 15/week @ 2024-09-09 11/week @ 2024-09-16 64/week @ 2024-09-23 21/week @ 2024-09-30 1/week @ 2024-10-07 25/week @ 2024-10-14 23/week @ 2024-10-21 16/week @ 2024-10-28 22/week @ 2024-11-04

86 downloads per month
Used in 3 crates

MIT license

8.5MB
752 lines

Contains (WOFF font, 94KB) docs/SourceSerifPro-Bold.ttf.woff, (WOFF font, 90KB) docs/FiraSans-Medium.woff, (WOFF font, 92KB) docs/FiraSans-Regular.woff, (WOFF font, 89KB) docs/SourceSerifPro-Regular.ttf.woff, (WOFF font, 56KB) docs/SourceCodePro-Regular.woff, (WOFF font, 56KB) docs/SourceCodePro-Semibold.woff and 1 more.

Build Status Coverage Status Matrix Display

A simple rust library to visualize 2D matrixes in rust.

  • Supports 256 terminal colours using AnsiTerm
  • Multiple unicode box character sets supported (plain, retro, thin, rounded, thick, double)

Documentation

Click here to access the documentation

Build

  • git clone git@github.com:pierrechevalier83/matrix_display.git
  • cargo test

Run

  • cargo run --example chess
  • cargo run --example 2048
  • cargo run --example palette

Example: visualising a chess board

extern crate matrix_display;
use matrix_display::*;

fn main() {
    let format = Format::new(7, 3);
	let board = vec!['', '', '', '', '', '', '', '',
	                 '', '', '', '', '', '', '', '',
					 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                     ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
					 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
					 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
					 '', '', '', '', '', '', '', '',
					 '', '', '', '', '', '', '', '']
        .iter()
        .enumerate()
		.map(|(i, x)| {
            let ansi_fg = 33;
			let mut ansi_bg = 0;
		    if i % 2 + (i / 8) % 2 == 1 {
			    ansi_bg = 7;
			}
		    cell::Cell::new(x.clone(), ansi_fg, ansi_bg)
			})
        .collect::<Vec<_>>();
    let data = matrix::Matrix::new(8, board);
    let display = MatrixDisplay::new(format, data);
	display.cell_at_cursor_position((13, 6)).color.bg = 10;
    display.print(&mut std::io::stdout(), &style::BordersStyle::None);
}

alt tag

For a working version of the game, see chess-rs

Example: visualising a 2048 game

extern crate matrix_display;
use matrix_display::*;

fn main() {
    let format = Format::new(7, 3);
    let colour_theme = vec![247, 78, 222, 220, 214, 208, 202, 196, 162, 160, 126, 90, 88, 54, 53, 52];
    let board = (0..16)
        .map(|x| {
            cell::Cell::new(2_f64.powi(x + 1),
                      7,
                      *colour_theme.get(x as usize).unwrap() as u8)
        })
        .collect::<Vec<_>>();
    let data = matrix::Matrix::new(4, board);
    let display = MatrixDisplay::new(format, data);
    display.print(&mut std::io::stdout(), &style::BordersStyle::Thick);
}

alt tag

For a working version of the game, see 2048-rs

Example: visualising a 256 colors palette

extern crate matrix_display;
use matrix_display::*;

fn main() {
    let format = Format::new(5, 1);
    let board = (0..256)
        .map(|x| cell::Cell::new(x, 0, x as u8))
        .collect::<Vec<_>>();
    let data = matrix::Matrix::new(8, board);
    let display = MatrixDisplay::new(format, data);
    display.print(&mut std::io::stdout(), &style::BordersStyle::Thin);

alt tag

For a self contained implementation, see palette-rs

TODO

  • Leverage fdehau/tui-rs to avoid redrawing the entire screen at every frame
  • Should help with performance issues with snake-rs, my snake implementations.

Dependencies

~10MB
~135K SLoC