wings/src/wings.c

122 lines
2.3 KiB
C
Raw Normal View History

2017-04-17 16:55:21 +02:00
#include "wings.h"
#include "display.h" // bopti.h => images // tales.h => fonts
2017-04-18 21:46:27 +02:00
#include "bopti.h"
2017-04-17 16:55:21 +02:00
#include "keyboard.h"
2017-04-18 21:46:27 +02:00
#include "timer.h"
2017-04-17 16:55:21 +02:00
#include "stdio.h"
#include "stdlib.h"
2017-04-18 21:46:27 +02:00
#define SIZE_MAP_X 256
#define SIZE_MAP_Y 128
2017-04-17 16:55:21 +02:00
extern image_t plane;
2017-04-18 21:46:27 +02:00
extern image_t img_menu;
2017-04-18 22:03:51 +02:00
/* plane direction
2017-04-18 21:46:27 +02:00
7 0 1
6 plane 2
5 4 3
*/
2017-04-17 16:55:21 +02:00
int main()
{
2017-04-18 21:46:27 +02:00
menu();
2017-04-17 16:55:21 +02:00
return 1;
}
void menu()
{
2017-04-18 21:46:27 +02:00
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)
{
2017-04-18 22:03:51 +02:00
case KEY_UP : case KEY_DOWN : menu != menu; break;
2017-04-18 21:46:27 +02:00
case KEY_EXE :
{
2017-04-18 22:03:51 +02:00
if (!menu)
2017-04-18 21:46:27 +02:00
{
2017-04-18 22:03:51 +02:00
game(); break;
2017-04-18 21:46:27 +02:00
}
else return 1;
}
case KEY_EXIT : return 1;
}
}
}
void update_frame(int *dir)
{
dclear();
dimage_part(60, 24, &plane, 16*(*dir), 0, 16, 16);
dupdate();
}
2017-04-18 22:03:51 +02:00
int game()
2017-04-18 21:46:27 +02:00
{
int dir = 0;
unsigned char fire = 0; // fire disable
unsigned int sum = 0;
int *keys = NULL;
unsigned int key;
unsigned char i;
timer_t *timer = NULL;
timer = timer_create(40, 0);
timer_attach(timer, update_frame, &dir);
timer_start(timer);
while(1)
{
2017-04-18 22:03:51 +02:00
multigetkey(keys, 4, 40);
2017-04-18 21:46:27 +02:00
2017-04-18 22:03:51 +02:00
sum = 0;
2017-04-18 21:46:27 +02:00
for(i = 0; i < 3; i++)
{
2017-04-18 22:03:51 +02:00
switch(keys[i])
2017-04-18 21:46:27 +02:00
{
2017-04-18 22:03:51 +02:00
case KEY_UP : case KEY_DOWN : case KEY_LEFT : case KEY_RIGHT :
{
sum += keys[i];
}
break;
case KEY_SHIFT : fire = 1; break; // fire available
case KEY_EXIT : timer_stop(timer); return 1;
2017-04-18 21:46:27 +02:00
}
}
2017-04-18 22:03:51 +02:00
/* we determine the direction of the plane*/
2017-04-18 21:46:27 +02:00
switch(sum)
{
case KEY_LEFT : dir = 6; break;
case KEY_RIGHT : dir = 2; break;
case KEY_UP : dir = 0; break;
case KEY_DOWN : dir = 4; break;
2017-04-18 22:03:51 +02:00
case 0x2F : dir = 1; break;
case 0x3E : dir = 3; break;
case 0x4F : dir = 5; break;
case 0x40 : dir = 7; break;
2017-04-18 21:46:27 +02:00
}
}
2017-04-17 16:55:21 +02:00
}