bool test_move() { bool result = true; piece p = new_piece_rh(0, 0, true, true); set_up(); for (int dist = 1; dist < NB_PIECES; dist++) for (int i=0; i < NB_PIECES; i++) { copy_piece(pieces[i],p); move_piece(p, LEFT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i])-dist,get_x(p),"move LEFT"); else result = result && test_equality_int(get_x(pieces[i]),get_x(p),"move LEFT"); copy_piece(pieces[i],p); move_piece(p, RIGHT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i])+dist,get_x(p),"move RIGHT"); else result = result && test_equality_int(get_x(pieces[i]),get_x(p),"move RIGHT"); copy_piece(pieces[i],p); move_piece(p, UP, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i])+dist,get_y(p),"move UP"); else result = result && test_equality_int(get_y(pieces[i]),get_y(p),"move UP"); copy_piece(pieces[i],p); move_piece(p, DOWN, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i])-dist,get_y(p),"move DOWN"); else result = result && test_equality_int(get_y(pieces[i]),get_y(p),"move DOWN"); } tear_down(); delete_piece(p); return result; }
bool test_copy() { piece p = new_piece_rh(0, 0, true, true); bool result = true; //the first one (set_up_1()) is with new_piece_rh (int x, int y, bool small, bool horizontal) set_up_1(); for (int i = 0; i < NB_PIECES; i++) { copy_piece(pieces[i], p); result = result && test_equality_int(get_height(pieces[i]), get_height(p), "copy get_height"); result = result && test_equality_int(get_width(pieces[i]), get_width(p), "copy get_width"); result = result && test_equality_int(get_x(pieces[i]), get_x(p), "copy get_x"); result = result && test_equality_int(get_y(pieces[i]), get_y(p), "copy get_y"); result = result && test_equality_bool(is_horizontal(pieces[i]), is_horizontal(p), "copy is_horizontal"); result = result && test_equality_bool(can_move_x(pieces[i]), can_move_x(p), "copy can_move_x"); result = result && test_equality_bool(can_move_y(pieces[i]), can_move_y(p), "copy can_move_y"); } tear_down(); //the second one (set_up_2()) is with new_piece(int x, int y, int width, int height, bool move_x, bool move_y) set_up_2(); for (int i = 0; i < NB_PIECES; i++) { copy_piece(pieces[i], p); result = result && test_equality_int(get_height(pieces[i]), get_height(p), "copy get_height"); result = result && test_equality_int(get_width(pieces[i]), get_width(p), "copy get_width"); result = result && test_equality_int(get_x(pieces[i]), get_x(p), "copy get_x"); result = result && test_equality_int(get_y(pieces[i]), get_y(p), "copy get_y"); result = result && test_equality_bool(is_horizontal(pieces[i]), is_horizontal(p), "copy is_horizontal"); result = result && test_equality_bool(can_move_x(pieces[i]), can_move_x(p), "copy can_move_x"); result = result && test_equality_bool(can_move_y(pieces[i]), can_move_y(p), "copy can_move_y"); } tear_down(); delete_piece(p); return result; }
bool play_move(game g, int piece_num, dir d, int distance){ if ((!can_move_y(g->pieces[piece_num]) && (d == 0 || d == 2)) || ((!can_move_x(g->pieces[piece_num])) && (d == 1 || d == 3))) return false; bool move_isAllowed = true; piece tmp_piece = new_piece(0,0,0,0,true,true); // Initialisation d'une pièce temporaire (mallocs) copy_piece(g->pieces[piece_num],tmp_piece); for (int i = 0; i < distance; i++) { // On decompose le mouvement en déplacement de une case move_piece(g->pieces[piece_num], d, 1); if ((get_x(g->pieces[piece_num])+get_width(g->pieces[piece_num])-1 >= game_width(g) || get_x(g->pieces[piece_num]) < 0) || (get_y(g->pieces[piece_num])+get_height(g->pieces[piece_num])-1 >= game_height(g) || get_y(g->pieces[piece_num]) < 0)) move_isAllowed = false; for(int p = 0; p < game_nb_pieces(g);++p) { // On verifie si le mouvement est valide (intersect+depassement grille) if (piece_num != p && intersect(g->pieces[piece_num], g->pieces[p])) move_isAllowed = false; } } if (move_isAllowed) { for(int p = 0; p < game_nb_pieces(g);++p) { if (piece_num != p && intersect(g->pieces[piece_num], g->pieces[p])) printf("Erreur\n"); } g->nb_mouv += distance; delete_piece(tmp_piece); return true; } // si le mouvement n'est pas valide on remets la piece a sa place initiale copy_piece(tmp_piece, g->pieces[piece_num]); delete_piece(tmp_piece); return false; }
bool test_move() { bool result = true; piece p = new_piece(0, 0, 2, 1, true, false); //move_x-> TRUE, move_y->FALSE set_up(); for (int dist = 1; dist < NB_PIECES; dist++) for (int i=0; i < NB_PIECES; i++) { // Test move LEFT copy_piece(pieces[i],p); move_piece(p, LEFT, dist); if (can_move_x(pieces[i])) result = result && test_equality_int(get_x(pieces[i])-dist,get_x(p),"move LEFT"); else result = result && test_equality_int(get_x(pieces[i]),get_x(p),"move LEFT"); // Test move RIGHT copy_piece(pieces[i],p); move_piece(p, RIGHT, dist); if (can_move_x(pieces[i])) result = result && test_equality_int(get_x(pieces[i])+dist,get_x(p),"move RIGHT"); else result = result && test_equality_int(get_x(pieces[i]),get_x(p),"move RIGHT"); // Test move UP copy_piece(pieces[i],p); move_piece(p, UP, dist); if (can_move_y(pieces[i])) result = result && test_equality_int(get_y(pieces[i])+dist,get_y(p),"move UP"); else result = result && test_equality_int(get_y(pieces[i]),get_y(p),"move UP"); // Test move DOWN copy_piece(pieces[i],p); move_piece(p, DOWN, dist); if (can_move_y(pieces[i])) result = result && test_equality_int(get_y(pieces[i])-dist,get_y(p),"move DOWN"); else result = result && test_equality_int(get_y(pieces[i]),get_y(p),"move DOWN"); } tear_down(); delete_piece(p); return result; }
void copy_game (cgame src, game dst){ for(int i=0;i < src->nb_pieces;i++) copy_piece(src->pieces[i],dst->pieces[i]); dst->nb_mouv = src->nb_mouv; dst->nb_pieces = src->nb_pieces; dst->w = src->w; dst->h = src->h; }
void copy_game (cgame src, game dst){ dst->nb_pieces = src->nb_pieces; dst->nb_moves = src->nb_moves; dst->pieces = (piece*)malloc(sizeof(src->nb_pieces*sizeof(piece*))); for(int i=0; i<src->nb_pieces; ++i){ dst->pieces[i] = new_piece_rh(0, 0, true, true); copy_piece(src->pieces[i], dst->pieces[i]); } }
game new_game_hr (int nb_pieces, piece *pieces){ game g = (game)malloc(sizeof(struct game_s)); g->nb_pieces = nb_pieces; g->nb_moves = 0; g->pieces = (piece*)malloc(nb_pieces*sizeof(piece)); for(int i=0; i<nb_pieces; ++i){ g->pieces[i] = new_piece_rh(0, 0, true, true); copy_piece(pieces[i], g->pieces[i]); } return g; }
void test_failure_piece(cpiece src) { piece dst = NULL; copy_piece(src, dst); move_piece(dst, LEFT, 1); intersect(src, src); get_y(src); get_x(src); get_width(src); get_height(src); is_horizontal(src); can_move_x(src); can_move_y(src); delete_piece(dst); }
void copy_game(cgame src, game dst) { dst->nb_pieces=src->nb_pieces; dst->nb_moves=src->nb_moves; dst->piece_list=malloc(sizeof (piece)*src->nb_pieces); for (int i=0; i<src->nb_pieces; i++) { dst->piece_list[i]=new_piece_rh(0, 0, false, false);// create a new piece copy_piece(src->piece_list[i], dst->piece_list[i]);// overwrite new piece with the wanted copy } dst->width=src->width; dst->height=src->height; dst->dir_prev=malloc(sizeof(int)*src->nb_pieces); for (int i=0; i<src->nb_pieces; i++) { dst->dir_prev[i]=src->dir_prev[i]; } }
bool test_copy() { piece p = new_piece_rh(0, 0, true, true); bool result = true; set_up(); for (int i = 0 ; i < NB_PIECES; i++) { copy_piece(pieces[i],p); result = result && test_equality_int(get_height(pieces[i]), get_height(p), "copy get_height"); result = result && test_equality_int(get_width(pieces[i]), get_width(p), "copy get_width"); result = result && test_equality_int(get_x(pieces[i]), get_x(p), "copy get_x"); result = result && test_equality_int(get_y(pieces[i]), get_y(p), "copy get_y"); result = result && test_equality_bool(is_horizontal(pieces[i]), is_horizontal(p), "copy is_horizontal"); } tear_down(); delete_piece(p); return result; }
bool test_copy() { bool result = true; piece p = new_piece(0, 0, 2, 1, true, false); set_up(); for (int i = 0 ; i < NB_PIECES; i++) { copy_piece(pieces[i],p); result = result && test_equality_int(get_height(pieces[i]), get_height(p), "copy get_height"); result = result && test_equality_int(get_width(pieces[i]), get_width(p), "copy get_width"); result = result && test_equality_int(get_x(pieces[i]), get_x(p), "copy get_x"); result = result && test_equality_int(get_y(pieces[i]), get_y(p), "copy get_y"); result = result && test_equality_bool(can_move_x(pieces[i]), can_move_x(p), "copy can_move_x"); result = result && test_equality_bool(can_move_y(pieces[i]), can_move_y(p), "copy can_move_y"); } tear_down(); delete_piece(p); return result; }
int main() { test_intersection(); /** * creation of 3 pieces */ piece test = new_piece_rh(1,2,true,false); piece test2 = new_piece_rh(2,2,false, false); piece test3 = new_piece_rh(0,0,true,true); display_piece(test); display_piece(test2); /** * display the two first pieces */ copy_piece(test, test3); /** * copy_piece is supposed to copy test in test3 */ display_piece(test3); /** * display test3 in order to verify that it's the same as test. - OK */ delete_piece(test); printf("\nx : %d \ny : %d \nhauteur : %d \nlongueur : %d\n", get_x(test2), get_y(test2), get_height(test2), get_width(test2)); /** * test of the getters */ printf("\nhorizontal : %d \n", is_horizontal(test2)); /** * test is_horizontal */ printf("\nin board : %d \n", is_in_board(test2)); /** * test is_in_board */ delete_piece(test2); delete_piece(test3); return EXIT_SUCCESS; }
bool test_move() { bool result = true; piece p = new_piece_rh(0, 0, true, true); //the first one (set_up_1()) is with new_piece_rh (int x, int y, bool small, bool horizontal) set_up_1(); for (int dist = 1; dist < NB_PIECES; dist++) for (int i = 0; i < NB_PIECES; i++) { copy_piece(pieces[i], p); move_piece(p, LEFT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i]) - dist, get_x(p), "move LEFT"); else result = result && test_equality_int(get_x(pieces[i]), get_x(p), "move LEFT"); copy_piece(pieces[i], p); move_piece(p, RIGHT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i]) + dist, get_x(p), "move RIGHT"); else result = result && test_equality_int(get_x(pieces[i]), get_x(p), "move RIGHT"); copy_piece(pieces[i], p); move_piece(p, UP, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i]) + dist, get_y(p), "move UP"); else result = result && test_equality_int(get_y(pieces[i]), get_y(p), "move UP"); copy_piece(pieces[i], p); move_piece(p, DOWN, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i]) - dist, get_y(p), "move DOWN"); else result = result && test_equality_int(get_y(pieces[i]), get_y(p), "move DOWN"); } tear_down(); //the second one (set_up_2()) is with new_piece(int x, int y, int width, int height, bool move_x, bool move_y) set_up_2(); for (int dist = 1; dist < NB_PIECES; dist++) for (int i = 0; i < NB_PIECES; i++) { copy_piece(pieces[i], p); move_piece(p, LEFT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i]) - dist, get_x(p), "move LEFT"); else result = result && test_equality_int(get_x(pieces[i]), get_x(p), "move LEFT"); copy_piece(pieces[i], p); move_piece(p, RIGHT, dist); if (is_horizontal(pieces[i])) result = result && test_equality_int(get_x(pieces[i]) + dist, get_x(p), "move RIGHT"); else result = result && test_equality_int(get_x(pieces[i]), get_x(p), "move RIGHT"); copy_piece(pieces[i], p); move_piece(p, UP, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i]) + dist, get_y(p), "move UP"); else result = result && test_equality_int(get_y(pieces[i]), get_y(p), "move UP"); copy_piece(pieces[i], p); move_piece(p, DOWN, dist); if (!is_horizontal(pieces[i])) result = result && test_equality_int(get_y(pieces[i]) - dist, get_y(p), "move DOWN"); else result = result && test_equality_int(get_y(pieces[i]), get_y(p), "move DOWN"); } tear_down(); delete_piece(p); return result; return false; }