#include "wings.h" #include "display.h" // bopti.h => images // tales.h => fonts #include "keyboard.h" #include "timer.h" #include "gray.h" #include "stdio.h" #include "stdlib.h" #define SIZE_MAP_X 512 #define SIZE_MAP_Y 512 #define MAX_PLANES 3 Plane planes[MAX_PLANES]; // number of planes in the map except us //planes are controlled by the AI extern image_t plane; extern image_t img_menu; extern image_t cloud; /* plane direction 7 0 1 6 plane 2 5 4 3 */ int main() { menu(); return 1; } void init() { unsigned char i; for(i = 0; i < MAX_PLANES; i++) { planes[i].x = 10 + 16 * i; planes[i].y = 12; planes[i].dir = i; planes[i].life = 100; } } void menu() { unsigned char menu = 0; unsigned int key = 0; while(1) { dclear(); dimage(0, 0, &img_menu); drect(67 + menu * 19, 10 + menu * 27, 100 + menu * 19, 25 + menu * 27, color_invert); dupdate(); key = getkey(); switch (key) { case KEY_UP : case KEY_DOWN : menu = !menu; break; case KEY_EXE : { if (!menu) { game(); break; } else return 1; } case KEY_EXIT : return 1; } } } void update_frame(unsigned int *dir) { static unsigned char i; static short decalx = 0, decaly = 0; static int count = 0; gclear(); gimage_part(56, 24, &plane, 16*(*dir), 0, 16, 16); // our plane switch(*dir) { case 0 : decaly++; break; case 1 : decalx--; decaly++; break; case 2 : decalx--; break; case 3 : decalx--; decaly--; break; case 4 : decaly--; break; case 5 : decalx++; decaly--; break; case 6 : decalx++; break; case 7 : decalx++; decaly++; break; } for(i = 0; i < MAX_PLANES; i++) { gimage_part(planes[i].x + decalx, planes[i].y + decaly, &plane, 16*planes[i].dir, 0, 16, 16); } gimage(10 + decalx, 10 + decaly, &cloud); gupdate(); count++; } int game() { int dir = 0; unsigned char fire = 0; // fire disable unsigned char sum = 0; int *keys = NULL; unsigned char i; timer_t *timer = NULL; timer = timer_create(40, 0); timer_attach(timer, update_frame, &dir); timer_start(timer); gray_start(); // gray engine running init(); // initialisation while(1) { multigetkey(keys, 3, 500); sum = 0; for(i = 0; i < 3; i++) { switch(keys[i]) { case KEY_UP : case KEY_DOWN : case KEY_LEFT : case KEY_RIGHT : { sum += keys[i]; // to know which replay keys pressed } break; case KEY_SHIFT : fire = 1; break; // fire enable case KEY_EXIT : { gray_stop(); // gray engine stopped timer_stop(timer); //virtual timer stopped return 1; // good bye, see you soon } } } /* we determine the direction of the plane*/ switch(sum) { case KEY_UP : dir = 0; break; case KEY_UP + KEY_RIGHT : dir = 1; break; case KEY_RIGHT : dir = 2; break; case KEY_DOWN + KEY_RIGHT : dir = 3; break; case KEY_DOWN : dir = 4; break; case KEY_DOWN + KEY_LEFT : dir = 5;break; case KEY_LEFT : dir = 6; break; case KEY_UP + KEY_LEFT : dir = 7; break; } } }