diff options
Diffstat (limited to 'main.ha')
-rw-r--r-- | main.ha | 55 |
1 files changed, 30 insertions, 25 deletions
@@ -1,4 +1,7 @@ use math::random; +use vt; +use io; +use os; type player = struct { x: int, @@ -26,48 +29,51 @@ fn set_tile_at(r: room, x: size, y: size, t: tile) void = { r.tiles[ix] = t; }; -fn tile_repr(t: tile) str = match (t) { - case wall => yield "\x1b[90m\u2588"; - case floor => yield "\x1b[37m."; +fn get_key() u8 = { + let b = [0u8]; + io::read(os::stdin_file, b)!; + return b[0]; }; -fn draw_room(r: room) void = { - assert(r.w < 20); - assert(r.h < 20); - for (let x = 0z; x < r.w; x+=1) - for (let y = 0z; y < r.h; y+=1) - put_at(x:int,y:int, tile_repr(tile_at(r,x,y))); -}; +def W = 50; +def H = 90; export fn main() void = { - const term = setup_term(); + const term = vt::open(); + defer vt::close(term); - const tiles: [100]tile = [floor...]; - const room = room { w=10, h=10, tiles=tiles }; + vt::enablealt(term)!; + vt::disablecur(term)!; - for (let i = 0z; i < 10; i+=1) { - set_tile_at(room, 0, i, wall); - set_tile_at(room, 9, i, wall); + const tiles: [W*H]tile = [floor...]; + const room = room { w=W, h=H, tiles=tiles }; + + for (let i = 0z; i < W; i+=1) { set_tile_at(room, i, 0, wall); - set_tile_at(room, i, 9, wall); + set_tile_at(room, i, H-1, wall); + }; + for (let i = 0z; i < H; i+=1) { + set_tile_at(room, 0, i, wall); + set_tile_at(room, W-1, i, wall); }; let rand = random::init(12345); for (let i = 0; i < 6; i+=1) { - const x = (random::u64n(&rand, 9)+1): size; - const y = (random::u64n(&rand, 9)+1): size; + const x = (random::u64n(&rand, W-2)+1): size; + const y = (random::u64n(&rand, H-2)+1): size; set_tile_at(room, x,y, wall); }; - - - let player = player { x=1, y=1 }; + const playerpen = vt::newpen(vt::color::BLACK, vt::color::RED); + const playerstr = vt::tag(playerpen, "@"); + for (true) { - clear(); + vt::clear(term)!; draw_room(room); - put_at(player.x, player.y, "@"); + vt::move(term, player.y:uint+1, player.x:uint+1)!; + vt::print(term, playerstr)!; const c = get_key(): rune; let nx = player.x; let ny = player.y; @@ -85,7 +91,6 @@ export fn main() void = { }; }; - finish_term(&term); }; |