diff options
Diffstat (limited to 'life.cc')
-rw-r--r-- | life.cc | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -19,21 +19,25 @@ template< std::size_t WIDTH, std::size_t HEIGHT > -void draw(life::World<WIDTH, HEIGHT>& world) { +void draw( + std::size_t x, + std::size_t y, + life::World<WIDTH, HEIGHT>& world +) { tb_clear(); for ( std::size_t i = 0; i < HEIGHT; i++ ) { for ( std::size_t j = 0; j < WIDTH; j++ ) { if ( world.isLifeAt(i,j) ) { - tb_change_cell(i, j, 0x2588, TB_BLACK, TB_GREEN); + tb_change_cell(x+i, y+j, 0x2588, TB_BLACK, TB_GREEN); } else { - tb_change_cell(i, j, 0x2591, TB_BLACK, TB_BLUE); + tb_change_cell(x+i, y+j, 0x2591, TB_BLACK, TB_BLUE); } } } - print_tb(1, 21, TB_WHITE, TB_DEFAULT, "Age:"); - print_tb(6, 21, TB_WHITE, TB_DEFAULT, std::to_string(world.getAge())); + print_tb(x+1, y+21, TB_WHITE, TB_DEFAULT, "Age:"); + print_tb(x+6, y+21, TB_WHITE, TB_DEFAULT, std::to_string(world.getAge())); tb_present(); } @@ -42,11 +46,14 @@ int main(int, char*[]) { tb_init(); tb_select_output_mode(TB_OUTPUT_NORMAL); - tb_select_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); + tb_select_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); life::World<20,20> world; - draw(world); + std::size_t worldOffsetX = tb_width() / 2 - 10; + std::size_t worldOffsetY = tb_height() / 2 - 10; + + draw(worldOffsetX, worldOffsetY, world); while ( true ) { struct tb_event ev; @@ -57,7 +64,7 @@ int main(int, char*[]) { return -1; } - switch (t) { + switch ( t ) { case TB_EVENT_KEY: switch ( ev.key ) { case TB_KEY_ESC: @@ -69,16 +76,17 @@ int main(int, char*[]) { } break; case TB_EVENT_MOUSE: - if (ev.key == TB_KEY_MOUSE_LEFT) { - world.summonLifeAt(ev.x, ev.y); + if ( ev.key == TB_KEY_MOUSE_LEFT ) { + world.summonLifeAt(ev.x - worldOffsetX, ev.y - worldOffsetY); } - break; case TB_EVENT_RESIZE: + worldOffsetX = ev.w / 2 - 10; + worldOffsetY = ev.h / 2 - 10; break; } - draw(world); + draw(worldOffsetX, worldOffsetY, world); } return 0; |