diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-11-13 23:19:07 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-11-13 23:19:07 -0800 |
commit | c60863347acd6014a068439fa5a277bf009ee559 (patch) | |
tree | d313fffe40672d7f195d1d4ade0b9cb2038ecf11 /hanoi.tlv | |
parent | 902ce6009ddebd026d4a829ec1d9a1a08205b01e (diff) | |
download | teliva-c60863347acd6014a068439fa5a277bf009ee559.tar.gz |
a larger test image
Diffstat (limited to 'hanoi.tlv')
-rw-r--r-- | hanoi.tlv | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/hanoi.tlv b/hanoi.tlv new file mode 100644 index 0000000..7cec549 --- /dev/null +++ b/hanoi.tlv @@ -0,0 +1,81 @@ +teliva_program = { + render = [[function render(window) + window:clear() + local lines, cols = window:getmaxyx() + local line = math.floor(lines/2) + local col = math.floor(cols/4) + for i,t in ipairs(tower) do + render_tower(window, line, i*col, i, t) + end + curses.refresh() +end]], + lines = [[function lines(window) + local lines, cols = window:getmaxyx() + return lines +end]], + pop = [[function pop(array) + return table.remove(array) +end]], + window = [[window = curses.stdscr()]], + render_tower = [[function render_tower(window, line, col, tower_index, tower) + window:attron(curses.A_BOLD) + window:mvaddch(line+2, col, string.char(96+tower_index)) + window:attroff(curses.A_BOLD) + window:attron(curses.color_pair(7)) + window:mvaddstr(line+1, col-6, " ") + window:attroff(curses.color_pair(7)) + for i, n in ipairs(tower) do + render_disk(window, line, col, n) + line = line - 1 + end + for i=1,5-len(tower)+1 do + window:attron(curses.color_pair(7)) + window:mvaddstr(line, col, " ") + window:attroff(curses.color_pair(7)) + line = line - 1 + end +end]], + tower = [[tower = {{6, 5, 4, 3, 2}, {}, {}}]], + render_disk = [[function render_disk(window, line, col, size) + col = col-size+1 + for i=1,size do + window:attron(curses.color_pair(size)) + window:mvaddstr(line, col, " ") + window:attroff(curses.color_pair(size)) + col = col+2 + end +end]], + main = [[function main() + for i=1,7 do + curses.init_pair(i, 0, i) + end + + while true do + render(window) + update(window) + end +end +]], + len = [[function len(array) + local result = 0 + for k in pairs(array) do + result = result+1 + end + return result +end]], + update = [[function update(window) + window:mvaddstr(lines(window)-2, 5, "tower to remove top disk from? ") + local from = curses.getch() - 96 + window:mvaddstr(lines(window)-1, 5, "tower to stack it on? ") + local to = curses.getch() - 96 + make_move(from, to) +end]], + make_move = [[function make_move(from, to) + local disk = pop(tower[from]) + table.insert(tower[to], disk) +end]], + cols = [[function cols(window) + local lines, cols = window:getmaxyx() + return cols +end]], +} |