griddle
Griddle simplifies the concept of creating 2D games or UI applications within a 2D-matrix, or grid, which in turn makes it a suitable cross-platform graphics framework for lower fidelity games or apps.
It is inspired by:
tcell, a Go package that provides cell-based views for terminalstermbox, a minimalistic API to write text-based UIstermpixels, the terminal as a character-cell matrix
Purpose
Creating simple 2D programs that run inside a terminal (or terminal emulator) is
complicated. The goal of griddle is to abstract a terminal-like screen into
a 2D grid of character cells.
Like termpixels, this project makes the terminal more
accessible and more fun, but in Dart!
To learn more about griddle, read our design philosophy.
Usage

import 'dart:io' show stdout;
import 'dart:math' as math;
import 'package:griddle/griddle.dart';
void main() {
final screen = Screen.display(Display.fromAnsiTerminal(
stdout,
width: () => stdout.terminalColumns,
height: () => stdout.terminalLines,
));
const string = 'Hello World, from Griddle for Dart!';
Stream<void>.periodic.listen((_) {
screen.clear();
for (var i = 0; i < string.length; i++) {
final t = DateTime.now().millisecondsSinceEpoch / 1000;
final f = i / string.length;
final c = Color.fromHSL(f * 300 + t, 1, 0.5);
final x = screen.width ~/ 2 - string.length ~/ 2;
final o = math.sin(t * 3 + f * 5) * 2;
final y = (screen.height / 2 + o).round();
screen.print(string[i], x + i, y, foreground: c);
}
screen.update();
});
}
(For the full example, see example/example.dart)
Contributing
This package welcomes new issues and pull requests.
Changes or requests that do not match the following criteria will be rejected:
- Common decency as described by the Contributor Covenant.
- Making this library brittle.
- Adding platform-specific functionality.
- A somewhat arbitrary bar of "complexity", everything should be easy to use.
Libraries
- griddle
- Griddle is a canvas-like drawing API based on a 2D grid of cells.