Mercurial > MadButterfly
diff examples/tank/tank_main.c @ 115:3895d2224e67
Tank
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sun, 14 Sep 2008 02:17:57 +0800 |
parents | |
children | e4e47d2cdbcd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/tank/tank_main.c Sun Sep 14 02:17:57 2008 +0800 @@ -0,0 +1,109 @@ +#include <mb/mb.h> +#include "svgs.h" + +enum { MUD, ROC, BRI, BSH }; + +static char map[12][16] = { + { MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD, + MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD}, + { MUD, ROC, ROC, ROC, MUD, BSH, BSH, ROC, + BSH, ROC, MUD, BSH, BSH, ROC, ROC, MUD}, + { MUD, MUD, BRI, MUD, MUD, MUD, MUD, MUD, + MUD, MUD, MUD, BRI, MUD, MUD, BSH, MUD}, + { BRI, MUD, MUD, MUD, MUD, MUD, BRI, MUD, + BRI, MUD, MUD, MUD, MUD, MUD, MUD, MUD}, + { MUD, MUD, BRI, MUD, BRI, BSH, BRI, BRI, + BRI, BRI, BSH, ROC, ROC, MUD, BRI, MUD}, + { MUD, BRI, BRI, MUD, BRI, MUD, BRI, MUD, + ROC, MUD, MUD, MUD, MUD, MUD, MUD, MUD}, + { MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD, + MUD, MUD, MUD, BRI, BRI, BRI, BRI, MUD}, + { MUD, BRI, MUD, BRI, BRI, MUD, BRI, BRI, + BSH, BRI, MUD, MUD, MUD, MUD, MUD, MUD}, + { MUD, BRI, MUD, MUD, MUD, MUD, MUD, MUD, + MUD, MUD, MUD, BRI, BRI, MUD, BRI, BRI}, + { MUD, BRI, MUD, BRI, BRI, MUD, BRI, BRI, + BRI, BRI, MUD, BRI, MUD, MUD, MUD, MUD}, + { MUD, BSH, MUD, BRI, MUD, MUD, BRI, MUD, + MUD, BRI, MUD, MUD, MUD, BRI, BRI, MUD}, + { MUD, MUD, MUD, MUD, MUD, MUD, BRI, MUD, + MUD, BRI, MUD, BRI, MUD, MUD, MUD, MUD} +}; + +typedef struct _tank_rt tank_rt_t; + +struct _tank_rt { + tank1_t *tank1; + tank2_t *tank2; + tank_en_t *tank_en; + void *map[12][16]; + X_MB_runtime_t *mb_rt; +}; + +#define CHANGE_POS(g, x, y) do { \ + (g)->root_coord->matrix[0] = 1.0; \ + (g)->root_coord->matrix[2] = x; \ + (g)->root_coord->matrix[4] = 1.0; \ + (g)->root_coord->matrix[5] = y; \ + rdman_coord_changed(rdman, (g)->root_coord); \ + } while(0) + +void +initial_tank(tank_rt_t *tank_rt, X_MB_runtime_t *mb_rt) { + redraw_man_t *rdman; + mud_t *mud; + brick_t *brick; + rock_t *rock; + bush_t *bush; + int i, j; + + rdman = mb_rt->rdman; + + tank_rt->mb_rt = mb_rt; + for(i = 0; i < 12; i++) { + for(j = 0; j < 16; j++) { + switch(map[i][j]) { + case MUD: + mud = mud_new(rdman); + CHANGE_POS(mud, j * 50, i * 50); + tank_rt->map[i][j] = (void *)mud; + break; + case BRI: + brick = brick_new(rdman); + CHANGE_POS(brick, j * 50, i * 50); + tank_rt->map[i][j] = (void *)brick; + break; + case ROC: + rock = rock_new(rdman); + CHANGE_POS(rock, j * 50, i * 50); + tank_rt->map[i][j] = (void *)rock; + break; + case BSH: + bush = bush_new(rdman); + CHANGE_POS(bush, j * 50, i * 50); + tank_rt->map[i][j] = (void *)bush; + break; + } + } + } + + tank_rt->tank1 = tank1_new(rdman); + tank_rt->tank2 = tank2_new(rdman); + CHANGE_POS(tank_rt->tank2, 50, 0); + tank_rt->tank_en = tank_en_new(rdman); + CHANGE_POS(tank_rt->tank_en, 100, 0); +} + +int +main(int argc, char *const argv[]) { + X_MB_runtime_t rt; + tank_rt_t tank_rt; + + X_MB_init(":0.0", 800, 600, &rt); + + initial_tank(&tank_rt, &rt); + + X_MB_handle_connection(&rt); + + X_MB_destroy(&rt); +}