griddle 0.5.0-alpha griddle: ^0.5.0-alpha copied to clipboard
Creating terminal-based UIs and games in Dart should be accessible and fun!
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.