forked from Massena/zkwul
spikes :D
This commit is contained in:
parent
9face1d63c
commit
51a262ccae
|
@ -26,6 +26,7 @@ set(ASSETS_fx
|
|||
set(ASSETS_cg
|
||||
assets-cg/img/player.png
|
||||
assets-cg/img/wall.png
|
||||
assets-cg/img/spike.png
|
||||
# ...
|
||||
)
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 134 B After Width: | Height: | Size: 169 B |
|
@ -14,4 +14,5 @@ struct Player {
|
|||
|
||||
struct TwoValues search(int x, int level[16][16]);
|
||||
int collide_pixel(int x, int y, int obj, int level[16][16]);
|
||||
int collide(int x, int y, int obj, int level[16][16]);
|
||||
int collide(int x, int y, int h, int obj, int level[16][16]);
|
||||
struct Player level_reset(struct Player player);
|
24
src/levels.c
24
src/levels.c
|
@ -1,18 +1,18 @@
|
|||
const int level[16][16] = {
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
|
||||
{1, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1},
|
||||
{1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1},
|
||||
{1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1},
|
||||
{1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1},
|
||||
{1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
||||
{1, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 1},
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||
};
|
45
src/main.c
45
src/main.c
|
@ -29,23 +29,30 @@ int collide_pixel(int x, int y, int obj, int level[LEVEL_SIZE][LEVEL_SIZE]) {
|
|||
}
|
||||
}
|
||||
|
||||
int collide(int x, int y, int obj, int level[LEVEL_SIZE][LEVEL_SIZE]) {
|
||||
int collide(int x, int y, int h, int obj, int level[LEVEL_SIZE][LEVEL_SIZE]) {
|
||||
// Check if there's something in
|
||||
// the square (x + 1, y + 1, x + 11, y + 11)
|
||||
if( collide_pixel(x / TILE_SIZE, y / TILE_SIZE, obj, level) ||
|
||||
collide_pixel(x / TILE_SIZE, (y + TILE_SIZE - 1) / TILE_SIZE, obj, level) ||
|
||||
collide_pixel((x + TILE_SIZE - 1) / TILE_SIZE, y / TILE_SIZE, obj, level) ||
|
||||
collide_pixel((x + TILE_SIZE - 1) / TILE_SIZE, (y + TILE_SIZE - 1) / TILE_SIZE, obj, level)
|
||||
// The size of the hitbox changes with h
|
||||
if( collide_pixel((x + h) / TILE_SIZE, (y + h) / TILE_SIZE, obj, level) ||
|
||||
collide_pixel((x + h) / TILE_SIZE, (y + TILE_SIZE - h - 1) / TILE_SIZE, obj, level) ||
|
||||
collide_pixel((x + TILE_SIZE - h - 1) / TILE_SIZE, (y + h) / TILE_SIZE, obj, level) ||
|
||||
collide_pixel((x + TILE_SIZE - h - 1) / TILE_SIZE, (y + TILE_SIZE - h - 1) / TILE_SIZE, obj, level)
|
||||
) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct Player level_reset(struct Player player) {
|
||||
player.pos = player.spawn;
|
||||
return player;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
extern bopti_image_t img_player;
|
||||
extern bopti_image_t img_wall;
|
||||
extern bopti_image_t img_spike;
|
||||
|
||||
extern int level[LEVEL_SIZE][LEVEL_SIZE];
|
||||
|
||||
|
@ -57,39 +64,51 @@ int main(void)
|
|||
.spawn = {0, 0}
|
||||
};
|
||||
player.spawn = search(2, level);
|
||||
player.pos = player.spawn;
|
||||
player = level_reset(player);
|
||||
|
||||
// main loop
|
||||
while(running) {
|
||||
|
||||
dclear(C_BLACK);
|
||||
|
||||
// drawing the player
|
||||
dimage(player.pos.x, player.pos.y, &img_player);
|
||||
|
||||
// drawing the level
|
||||
for(int m = 0; m < LEVEL_SIZE; ++m) {
|
||||
for(int n = 0; n < LEVEL_SIZE; ++n) {
|
||||
if(level[n][m] == 1) {
|
||||
dimage(m * TILE_SIZE, n * TILE_SIZE, &img_wall);
|
||||
switch(level[n][m]) {
|
||||
case 1:
|
||||
// walls
|
||||
dimage(m * TILE_SIZE, n * TILE_SIZE, &img_wall);
|
||||
break;
|
||||
case 3:
|
||||
// spikes
|
||||
dimage(m * TILE_SIZE, n * TILE_SIZE, &img_spike);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// drawing the player
|
||||
dimage(player.pos.x, player.pos.y, &img_player);
|
||||
|
||||
dupdate();
|
||||
int mov_x = keydown(KEY_RIGHT) - keydown(KEY_LEFT);
|
||||
int mov_y = keydown(KEY_DOWN) - keydown(KEY_UP);
|
||||
clearevents();
|
||||
|
||||
// trying to move the player >w<
|
||||
if(!collide(player.pos.x + mov_x, player.pos.y, 1, level)) {
|
||||
if(!collide(player.pos.x + mov_x, player.pos.y, 0, 1, level)) {
|
||||
player.pos.x += mov_x;
|
||||
}
|
||||
|
||||
if(!collide(player.pos.x, player.pos.y + mov_y, 1, level)) {
|
||||
if(!collide(player.pos.x, player.pos.y + mov_y, 0, 1, level)) {
|
||||
player.pos.y += mov_y;
|
||||
}
|
||||
|
||||
// d i e
|
||||
if(collide(player.pos.x + mov_x, player.pos.y + mov_y, 2, 3, level)) {
|
||||
player = level_reset(player);
|
||||
}
|
||||
|
||||
if(keydown(KEY_EXIT)) {running = 0;}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue