123 lines
6.0 KiB
C
123 lines
6.0 KiB
C
#include <gint/display.h>
|
|
#include <gint/keyboard.h>
|
|
|
|
typedef struct entity entity;
|
|
|
|
int main(void)
|
|
{
|
|
//Chargement des images
|
|
extern image_t img_grass_1;
|
|
extern image_t img_grass_2;
|
|
extern image_t img_grass_3;
|
|
|
|
extern image_t img_player;
|
|
|
|
//Création des structures
|
|
struct map {
|
|
int width;
|
|
int height;
|
|
uint16_t palette;
|
|
uint8_t data;
|
|
};
|
|
|
|
struct entity {
|
|
int x;
|
|
int y;
|
|
image_t sprite;
|
|
};
|
|
|
|
//Initialisation de la map "world"
|
|
static const uint8_t world_data[1000] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1};
|
|
static const uint16_t world_palette[3] = {0, 1, 2};
|
|
|
|
//Création de la map "world"
|
|
struct map world = {50, 20, world_palette, world_data};
|
|
|
|
//Création du l'entité "joueur"
|
|
entity player = {0, 0, img_player};
|
|
|
|
//Initialisation de la camera
|
|
int xCamera, yCamera;
|
|
int xCameraOffset = 12;
|
|
int yCameraOffset = 7;
|
|
bool xCameraMax = false;
|
|
|
|
//Boucle de jeu
|
|
while(1) {
|
|
|
|
//Positionement de la caméra par rapport au joueur
|
|
if (player.x-xCameraOffset < 0) {
|
|
xCamera = 0;
|
|
xCameraMax = false;
|
|
} else if (player.x+xCameraOffset > world.width-1) {
|
|
xCamera = world.width-1-xCameraOffset*2;
|
|
xCameraMax = true;
|
|
}else {
|
|
xCamera = player.x-xCameraOffset;
|
|
xCameraMax = false;
|
|
}
|
|
|
|
if (player.y-yCameraOffset < 0) {
|
|
yCamera = 0;
|
|
} else if (player.y+yCameraOffset > world.height) {
|
|
yCamera = world.height-yCameraOffset*2;
|
|
}else {
|
|
yCamera = player.y-yCameraOffset;
|
|
}
|
|
|
|
//Chargement de la partie de la map à afficher
|
|
dclear(C_WHITE);
|
|
int i, j;
|
|
for(j=0;j<14;j++) {
|
|
for(i=0; i<25; i++) {
|
|
switch(map[j+yCamera][i+xCamera]) {
|
|
case 0:
|
|
dimage(i*16-(4*xCameraMax), j*16, &img_grass_1);
|
|
break;
|
|
case 1:
|
|
dimage(i*16-(4*xCameraMax), j*16, &img_grass_2);
|
|
break;
|
|
case 2:
|
|
dimage(i*16-(4*xCameraMax), j*16, &img_grass_3);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Affichage de l'écran
|
|
dimage((player.x-xCamera)*16-(4*xCameraMax), (player.y-yCamera)*16, &img_player);
|
|
dupdate();
|
|
|
|
//Gestion du clavier
|
|
switch(getkey().key) {
|
|
case KEY_UP:
|
|
player.y--;
|
|
if (player.y < 0) {
|
|
player.y = 0;
|
|
}
|
|
break;
|
|
case KEY_DOWN:
|
|
player.y++;
|
|
if (player.y > world.height-1) {
|
|
player.y = world.height-1;
|
|
}
|
|
break;
|
|
case KEY_LEFT:
|
|
player.x--;
|
|
if (player.x < 0) {
|
|
player.x = 0;
|
|
}
|
|
break;
|
|
case KEY_RIGHT:
|
|
player.x++;
|
|
if (player.x > world.width-1) {
|
|
player.x = world.width-1;
|
|
}
|
|
break;
|
|
case KEY_EXE:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |