115
|
1 #include <mb/mb.h>
|
|
2 #include "svgs.h"
|
|
3
|
|
4 enum { MUD, ROC, BRI, BSH };
|
|
5
|
|
6 static char map[12][16] = {
|
|
7 { MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD,
|
|
8 MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD},
|
|
9 { MUD, ROC, ROC, ROC, MUD, BSH, BSH, ROC,
|
|
10 BSH, ROC, MUD, BSH, BSH, ROC, ROC, MUD},
|
|
11 { MUD, MUD, BRI, MUD, MUD, MUD, MUD, MUD,
|
|
12 MUD, MUD, MUD, BRI, MUD, MUD, BSH, MUD},
|
|
13 { BRI, MUD, MUD, MUD, MUD, MUD, BRI, MUD,
|
|
14 BRI, MUD, MUD, MUD, MUD, MUD, MUD, MUD},
|
|
15 { MUD, MUD, BRI, MUD, BRI, BSH, BRI, BRI,
|
|
16 BRI, BRI, BSH, ROC, ROC, MUD, BRI, MUD},
|
|
17 { MUD, BRI, BRI, MUD, BRI, MUD, BRI, MUD,
|
|
18 ROC, MUD, MUD, MUD, MUD, MUD, MUD, MUD},
|
|
19 { MUD, MUD, MUD, MUD, MUD, MUD, MUD, MUD,
|
|
20 MUD, MUD, MUD, BRI, BRI, BRI, BRI, MUD},
|
|
21 { MUD, BRI, MUD, BRI, BRI, MUD, BRI, BRI,
|
|
22 BSH, BRI, MUD, MUD, MUD, MUD, MUD, MUD},
|
|
23 { MUD, BRI, MUD, MUD, MUD, MUD, MUD, MUD,
|
|
24 MUD, MUD, MUD, BRI, BRI, MUD, BRI, BRI},
|
|
25 { MUD, BRI, MUD, BRI, BRI, MUD, BRI, BRI,
|
|
26 BRI, BRI, MUD, BRI, MUD, MUD, MUD, MUD},
|
|
27 { MUD, BSH, MUD, BRI, MUD, MUD, BRI, MUD,
|
|
28 MUD, BRI, MUD, MUD, MUD, BRI, BRI, MUD},
|
|
29 { MUD, MUD, MUD, MUD, MUD, MUD, BRI, MUD,
|
|
30 MUD, BRI, MUD, BRI, MUD, MUD, MUD, MUD}
|
|
31 };
|
|
32
|
|
33 typedef struct _tank_rt tank_rt_t;
|
|
34
|
|
35 struct _tank_rt {
|
|
36 tank1_t *tank1;
|
|
37 tank2_t *tank2;
|
117
|
38 int n_enemy;
|
|
39 tank_en_t *tank_enemies[10];
|
115
|
40 void *map[12][16];
|
|
41 X_MB_runtime_t *mb_rt;
|
|
42 };
|
|
43
|
|
44 #define CHANGE_POS(g, x, y) do { \
|
|
45 (g)->root_coord->matrix[0] = 1.0; \
|
|
46 (g)->root_coord->matrix[2] = x; \
|
|
47 (g)->root_coord->matrix[4] = 1.0; \
|
|
48 (g)->root_coord->matrix[5] = y; \
|
|
49 rdman_coord_changed(rdman, (g)->root_coord); \
|
|
50 } while(0)
|
|
51
|
|
52 void
|
|
53 initial_tank(tank_rt_t *tank_rt, X_MB_runtime_t *mb_rt) {
|
|
54 redraw_man_t *rdman;
|
|
55 mud_t *mud;
|
|
56 brick_t *brick;
|
|
57 rock_t *rock;
|
|
58 bush_t *bush;
|
|
59 int i, j;
|
|
60
|
|
61 rdman = mb_rt->rdman;
|
|
62
|
|
63 tank_rt->mb_rt = mb_rt;
|
|
64 for(i = 0; i < 12; i++) {
|
|
65 for(j = 0; j < 16; j++) {
|
|
66 switch(map[i][j]) {
|
|
67 case MUD:
|
|
68 mud = mud_new(rdman);
|
|
69 CHANGE_POS(mud, j * 50, i * 50);
|
|
70 tank_rt->map[i][j] = (void *)mud;
|
|
71 break;
|
|
72 case BRI:
|
|
73 brick = brick_new(rdman);
|
|
74 CHANGE_POS(brick, j * 50, i * 50);
|
|
75 tank_rt->map[i][j] = (void *)brick;
|
|
76 break;
|
|
77 case ROC:
|
|
78 rock = rock_new(rdman);
|
|
79 CHANGE_POS(rock, j * 50, i * 50);
|
|
80 tank_rt->map[i][j] = (void *)rock;
|
|
81 break;
|
|
82 case BSH:
|
|
83 bush = bush_new(rdman);
|
|
84 CHANGE_POS(bush, j * 50, i * 50);
|
|
85 tank_rt->map[i][j] = (void *)bush;
|
|
86 break;
|
|
87 }
|
|
88 }
|
|
89 }
|
|
90
|
|
91 tank_rt->tank1 = tank1_new(rdman);
|
117
|
92 CHANGE_POS(tank_rt->tank1, 5 * 50, 11 * 50);
|
115
|
93 tank_rt->tank2 = tank2_new(rdman);
|
117
|
94 CHANGE_POS(tank_rt->tank2, 10 * 50, 11 * 50);
|
|
95 for(i = 0; i < 3; i++) {
|
|
96 tank_rt->tank_enemies[i] = tank_en_new(rdman);
|
|
97 CHANGE_POS(tank_rt->tank_enemies[i], (2 + i * 3) * 50, 0);
|
|
98 }
|
|
99 tank_rt->n_enemy = i;
|
115
|
100 }
|
|
101
|
|
102 int
|
|
103 main(int argc, char *const argv[]) {
|
|
104 X_MB_runtime_t rt;
|
|
105 tank_rt_t tank_rt;
|
|
106
|
|
107 X_MB_init(":0.0", 800, 600, &rt);
|
|
108
|
|
109 initial_tank(&tank_rt, &rt);
|
|
110
|
|
111 X_MB_handle_connection(&rt);
|
|
112
|
|
113 X_MB_destroy(&rt);
|
|
114 }
|