Zaffre is fast console library for drawing characters to a screen.
Add the dependency to your project:
[zaffre "0.4.0-SNAPSHOT"]
Runs a little hello world terminal
(ns examples.basic
(:require [zaffre.terminal :as zat]
[zaffre.glterminal :as zgl]
[zaffre.events :as zevents]
[zaffre.font :as zfont]
[zaffre.tilesets :as ztiles]
[zaffre.util :as zutil]
[clojure.core.async :as async :refer [<! <!! go-loop]]))
(defn -main [& _]
(zgl/create-terminal
{:app { ;; Setup a layer group `:app`
:layers [:text] ;; With one layer `:text`
:columns 16 ;; 16 characters wide
:rows 16 ;; 16 characters tall
:pos [0 0] ;; With no position offset
:font (constantly ztiles/pastiche-16x16)}} ;; Give the group a nice font
{:title "Zaffre demo" ;; Set the window title
:screen-width (* 16 16) ;; Screen dimentions in pixels
:screen-height (* 16 16)} ;; Since our font is 16x16 and our layer group
;; is also 16x16
(fn [terminal] ;; Receive the terminal in a callback
(let [last-key (atom nil)] ;; Save the last key press in an atom
;; Every 33ms, draw a full frame
(zat/do-frame terminal 33
(let [key-in (or @last-key \?)]
;; For each frame
(zat/clear! terminal) ;; Clear the terminal
;; Draw strings
(zutil/put-string terminal :text 0 0 "Hello world")
(zutil/put-string terminal :text 12 0 (str key-in))))
;; Receive key presses
(zevents/add-event-listener terminal :keypress
(fn [new-key]
;; Save last key
(reset! last-key new-key)
;; Make the `q` key quit the application
(case new-key
\q (zat/destroy! terminal)
nil)))))))
Run with
lein run -m examples.basic
or
lein run -m examples.tileset
etc.
Got to https://github.com/aaron-santos/zaffre/tree/master/src/examples for more.
Copyright © 2016 Aaron Santos
Distributed under the MIT license.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close