my_sokoban

Présentation par Loïc BRANSTETT

Le 19/12/2018

Sommaire

  1. Présentation du projet
  2. Organisation
  3. Architecture
  4. Tests automatisé
  5. Bonus
  6. Questions ?

Présentation du projet

Sokoban est un jeu vidéo de puzzle inventé au Japon.

Gardien d'entrepôt, le joueur doit ranger des caisses sur des cases cibles. Il peut se déplacer dans les quatre directions, et pousser (mais pas tirer) une seule caisse à la fois. Une fois toutes les caisses rangées le joueur gagne.

Organisation

49

48

Architecture

Traitement des entrées

Action des entrées

Vérification de la victoire

Vérification de l'échec

Affichage de la map

Chargement de

la map

Vérification de la map

Architecture

my_sokoban.h:
#define BLOCK_EMPTY   0
#define BLOCK_WALL    1
#define BLOCK_OBJ     2
#define BLOCK_LOC     3
#define BLOCK_PLAYER  4
#define BLOCK_PL_LOC  5
#define BLOCK_OBJ_LOC 6

map.c:
unsigned int map_get_chr(int v)
{
    if (v == BLOCK_WALL)
        return ('#');
    if (v == BLOCK_PLAYER || v == BLOCK_PL_LOC)
        return ('P');
    if (v == BLOCK_OBJ || v == BLOCK_OBJ_LOC)
        return ('X');
    if (v == BLOCK_LOC)
        return ('O');
    if (v == BLOCK_EMPTY)
        return (' ');
    return (84);
}

Architecture

tab.h:
tab_t *tab_create(int width, int heigth);
int tab_delete(tab_t *tab);
int tab_get(tab_t *tab, int x, int y);
int tab_set(tab_t *tab, int x, int y, int val);
1 2 3
4 5 6
7 8 9
1 2 3 4 5 6 7 8 9

Tests automatisé

[===] Synthèse: Testés: 26 | Validés: 26 | Échoués: 0 | Plantages: 0

#include <criterion/criterion.h>
#include <criterion/redirect.h>
#include "my_sokoban.h"

Test(map, initialize_values)
{
    map_t *map = tests_map_load();
    cr_assert_eq(map->moves, 0);
    cr_assert_eq(map->leaved_code, 0);
    cr_assert_eq(map->leaved_reason, NULL);
}

Test(map, get_chr)
{
    map_t *map = tests_map_load();
    cr_assert_eq(map_get_chr(tab_get(map->tab, 0, 0)), '#');
    cr_assert_eq(map_get_chr(tab_get(map->tab, 0, 1)), '#');
    cr_assert_eq(map_get_chr(tab_get(map->tab, 1, 1)), ' ');
    cr_assert_eq(map_get_chr(tab_get(map->tab, 4, 2)), 'P');
    cr_assert_eq(map_get_chr(tab_get(map->tab, 1, 9)), 'O');
    cr_assert_eq(map_get_chr(tab_get(map->tab, 2, 9)), 'X');
    cr_assert_eq(map_get_chr(200), 84);
}

Tests automatisé

------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
game.c                                        45       5    11%   14,16,...
game_check.c                                  38      26    68%   14-16,...
game_check_map.c                              22      20    90%   38,40
game_movements.c                              46      21    45%   13,...
map.c                                         77      71    92%   49-51,...
tab.c                                         33      31    93%   17,20
tests/test_map.c                             175     175   100%   
------------------------------------------------------------------------------
TOTAL                                        436     349    80%
------------------------------------------------------------------------------

Bonus

Bonus

Questions ?

FIN

my_sokoban

By urgau-1

my_sokoban

  • 116