void test_plateau_obtenir_piece()
{
    puts("Test plateau_obtenir_piece");

    plateau_siam plateau;
    plateau_initialiser(&plateau);

    piece_siam *piece = &(plateau.piece[0][0]);
    piece->type=elephant;
    piece->orientation=haut;

    piece = &(plateau.piece[0][1]);
    piece->type=rhinoceros;
    piece->orientation=haut;

    int kx=0;
    for(kx=0;kx<NBR_CASES;kx++)
    {
        int ky=0;
        for(ky=0;ky<NBR_CASES;ky++)
        {
            if(kx == 0 && ky == 0)
            {
                if(plateau_obtenir_piece(&plateau,kx,ky)->type != elephant)
                    printf("case [%d][%d] KO\n",kx,ky);

                if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != elephant)
                    printf("case [%d][%d] info KO\n",kx,ky);
            }
            else if(kx == 0 && ky == 1)
            {
                if(plateau_obtenir_piece(&plateau,kx,ky)->type != rhinoceros)
                    printf("case [%d][%d] KO\n",kx,ky);

                if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != rhinoceros)
                    printf("case [%d][%d] info KO\n",kx,ky);
            }
            else if(ky==2 && (kx>=1 && kx<=3))
            {
                if(plateau_obtenir_piece(&plateau,kx,ky)->type != rocher)
                    printf("case [%d][%d] KO\n",kx,ky);

                if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != rocher)
                    printf("case [%d][%d] info KO\n",kx,ky);
            }
            else
            {
                if(plateau_obtenir_piece(&plateau,kx,ky)->type != case_vide)
                    printf("case [%d][%d] KO\n",kx,ky);

                if(plateau_obtenir_piece_info(&plateau,kx,ky)->type != case_vide)
                    printf("case [%d][%d] info KO\n",kx,ky);
            }
        }
    }
}
예제 #2
0
void test_api_siam_tenter_introduire_nouvelle_piece_si_possible()
{
    puts("Test api_siam_tenter_introduire_nouvelle_piece_si_possible");

    jeu_siam jeu;
    jeu_initialiser(&jeu);

    coup_jeu coup;
    coup_jeu_initialiser(&coup);

    const piece_siam *piece = plateau_obtenir_piece_info(&(jeu.plateau),0,0);

	//on test si le coup est valide si on envoie des coordonnees au bord
    coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, haut);	
    if(coup.valide!=1 || piece->orientation!=haut || jeu.joueur!=1)
    	puts(" introduction case vide KO");

	//on test si le coup n'est pas valide si on envoie des coordonnees pas au bord
    coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 1, 1, haut);	
    if(coup.valide!=0 || jeu.joueur!=1)
	puts(" introduction pas au bord KO");

	//on test si le coup est valide si on introduit sur une case deja occupee avec une bonne orientation
    coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, haut);	
    if(coup.valide!=1 || jeu.joueur!=0)
	puts(" introduction sur une piece deja existante bonne orientation KO");

	//on test si le coup est non valide si on introduit sur une case deja occupee avec une mauvaise orientation
    coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, 0, 0, bas);	
    if(coup.valide!=0 || jeu.joueur!=0)
	puts(" introduction sur une piece deja existante mauvaise orientation KO");

	//on test si on essaye d'introduire trop de piece (plus de 5)

	//il y a déjà un éléphant, il faut en rajouter 4
    piece_siam *piece_4_4 = plateau_obtenir_piece(&(jeu.plateau), NBR_CASES-1, NBR_CASES-1);
    piece_4_4->type = elephant;
    piece_4_4->orientation = gauche;

    piece_siam *piece_3_4 = plateau_obtenir_piece(&(jeu.plateau), 3, NBR_CASES-1);
    piece_3_4->type = elephant;
    piece_3_4->orientation = gauche;

    piece_siam *piece_2_4 = plateau_obtenir_piece(&(jeu.plateau), 2, NBR_CASES-1);
    piece_2_4->type = elephant;
    piece_2_4->orientation = gauche;

    piece_siam *piece_1_4 = plateau_obtenir_piece(&(jeu.plateau), 1, NBR_CASES-1);
    piece_1_4->type = elephant;
    piece_1_4->orientation = gauche;

    coup = api_siam_tenter_introduire_nouvelle_piece_si_possible(&jeu, NBR_CASES-1, 0, haut);
    if(coup.valide!=0 || jeu.joueur!=0)
	puts(" introduction de plus de 5 pieces KO");
}
예제 #3
0
void test_api_siam_tenter_deplacer_piece_si_possible()
{
    puts("Test api_siam_tenter_deplacer_piece_si_possible");

    jeu_siam jeu;
    jeu_initialiser(&jeu);


    int x=0, y=0;
    piece_siam *piece = plateau_obtenir_piece(&(jeu.plateau),x,y);
    piece->type=elephant;
    piece->orientation=bas;

    coup_jeu coup;
    coup_jeu_initialiser(&coup);    
	
	//on test si le coup est valide en bougeant la bonne piece et avec des coordonnees dans le plateau
    coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, haut, bas);
    coordonnees_appliquer_deplacement(&x, &y, haut);
    piece_siam *piece_apres_deplacement = plateau_obtenir_piece(&(jeu.plateau),x,y);

    if(coup.valide!=1 || piece_apres_deplacement->orientation!= bas || jeu.joueur!=1)
    {printf("orientation = %d",piece_apres_deplacement->orientation); puts(" joueur 0/elephant orientation KO");}

	//on test si le coup n'est pas valide si on envoie des coordonnees pas dans le plateau
    coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, 6, 2, haut, bas);	
    if(coup.valide!=0 || jeu.joueur!=1)
	puts(" joueur 1/coordonnees pas au bord KO");

    //on test si le coup est non valide si on essaye de deplacer sur une case avec un animal d'orientation non opposée
    int copy_x=x, copy_y=y; //on copie les valeurs de x et y pour introduire une nouvelle piece
    coordonnees_appliquer_deplacement(&copy_x, &copy_y, droite); //on change les coordonnes pour introduire la nouvelle piece
								//à l'endroit desire
    piece_siam *nouvelle_piece = plateau_obtenir_piece(&(jeu.plateau), copy_x, copy_y);
    piece_apres_deplacement->type = rhinoceros; //on est au joueur 1 qui joue les rhino, or à la position x et y a il y a un elephant !
    nouvelle_piece->type = rhinoceros;
    nouvelle_piece->orientation = gauche;


    coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, droite, droite);	
    if(coup.valide!=0 || jeu.joueur!=1)
	puts(" joueur 1/deplacement sur une case avec un animal non oppose KO");                                         
	


	//on test si le coup est valide si on essaye de deplacer sur une case avec un animal d'orientation non opposée
    nouvelle_piece->orientation = bas;

    coup = api_siam_tenter_deplacer_piece_si_possible(&jeu, x, y, droite, droite);
    if(coup.valide!=0 || jeu.joueur!=1)
        puts(" joueur 0/deplacement sur une case avec un animal non oppose KO");
	
}
void plateau_modification_deplacer_piece(plateau_siam* plateau,
                                         int x0,int y0,
                                         orientation_deplacement direction_deplacement,
                                         orientation_deplacement orientation_final)
{
    assert(plateau_etre_integre(plateau));
    assert(coordonnees_etre_dans_plateau(x0, y0));
    assert(orientation_etre_integre_deplacement(direction_deplacement));
    assert(orientation_etre_integre(orientation_final));
    
    if ( (x0==0 && direction_deplacement==gauche) || (x0==4 && direction_deplacement==droite) || (y0==0 && direction_deplacement==bas) || (y0==4 && direction_deplacement==haut) )
    {
        piece_definir_case_vide(&plateau->piece[x0][y0]);
    }

    if(plateau_exister_piece(plateau, x0, y0) && coordonnees_etre_dans_plateau(x0, y0))
    {
        piece_siam* piece=plateau_obtenir_piece(plateau,x0,y0);
        type_piece type=piece->type;
        if(plateau_modification_deplacer_piece_etre_possible(plateau,x0,y0,direction_deplacement,orientation_final))
            {
                int x=x0;
                int y=y0;
                

                // on réalise des boucles afin de s'assurer que les coordonnées ne sortiront pas du plateau
                if (coordonnees_etre_bordure_plateau(x0, y0)==0)
                {
                    coordonnees_appliquer_deplacement(&x0,&y0,direction_deplacement);
                    

                }
                else if ( (x0==0 && direction_deplacement!=gauche) || (x0==4 && direction_deplacement!=droite) || (y0==0 && direction_deplacement!=bas) || (y0==4 && direction_deplacement!=haut) )
                {
                    coordonnees_appliquer_deplacement(&x0,&y0,direction_deplacement);
                    

                }
                else if ( (x0==0 && direction_deplacement==gauche) || (x0==4 && direction_deplacement==droite) || (y0==0 && direction_deplacement==bas) || (y0==4 && direction_deplacement==haut) )
                {
                    piece_definir_case_vide(&plateau->piece[x0][y0]);
                    plateau->piece[x0][y0].orientation=aucune_orientation;
                }

                if (piece_etre_case_vide(&plateau->piece[x0][y0]) )
                {
                    if (type!=case_vide)
                    {piece_definir(&plateau->piece[x0][y0],type,orientation_final);}
                }
                else
                {
                    
                    poussee_realiser(plateau, x0, y0, plateau->piece[x0][y0].type, direction_deplacement);
                }
                
                piece_definir_case_vide(&plateau->piece[x][y]);
            }
    }
   
}
예제 #5
0
//fonctions de tests
void test_api_siam_tenter_changer_orientation_piece_si_possible()
{
    puts("Test api_siam_tenter_changer_orientation_piece_si_possible");   

    jeu_siam jeu;
    jeu_initialiser(&jeu);

    piece_siam *piece = plateau_obtenir_piece(&(jeu.plateau),1,1);
    piece->type=elephant;
    piece->orientation=bas;
    
    coup_jeu coup;
    coup_jeu_initialiser(&coup);

	//on test si le coup est valide en changeant l'orientation de l'éléphant avec le bon joueur
    coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,haut);
    if(coup.valide!=1 || piece->orientation!=haut || jeu.joueur!=1)
        puts("joueur 0/elephant haut KO");

	//on test si le coup est non valide en changeant l'orientation d'une piece avec le mauvais joueur
    coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,bas);
    if(coup.valide!=0 || jeu.joueur!=1)
        puts("joueur 1/elephant haut KO");

    jeu.joueur=0; //on revient au premier joueur (des elephants)

	//on test si le coup est non valide en envoyant la meme orientation
    coup = api_siam_tenter_changer_orientation_piece_si_possible(&jeu,1,1,haut);
    if(coup.valide!=0 || jeu.joueur!=0)
        puts("joueur 0/meme orientation KO");
}
void plateau_modification_changer_orientation_piece(plateau_siam* plateau,int x0,int y0,orientation_deplacement orientation)
{
    assert(plateau_etre_integre(plateau));
    assert(plateau_modification_changer_orientation_piece_etre_possible(plateau, x0, y0, orientation)==1);
    
    piece_siam* piece=plateau_obtenir_piece(plateau, x0, y0);
    piece->orientation=orientation;
    
    
}
void plateau_initialiser(plateau_siam* plateau)
{
    // Initialise l'ensemble des cases du plateau a piece_vide
    // sauf les 3 cases du milieu avec un rocher (1,2), (2,2) et (3,2)
    //
    // L'etat de l'echiquier initial est le suivant:
    //
    // [4] *** | *** | *** | *** | *** |
    // [3] *** | *** | *** | *** | *** |
    // [2] *** | RRR | RRR | RRR | *** |
    // [1] *** | *** | *** | *** | *** |
    // [0] *** | *** | *** | *** | *** |
    //     [0]   [1]   [2]   [3]   [4]
    //


    int kx=0;
    for(kx=0 ; kx<NBR_CASES ; ++kx)
    {
        int ky=0;
        for(ky=0 ; ky<NBR_CASES ; ++ky)
        {
            piece_siam* piece=plateau_obtenir_piece(plateau,kx,ky);
            assert(piece!=NULL);

            if(ky==2 && (kx>=1 && kx<=3) )
                piece_definir_rocher(piece);
            else
                piece_definir_case_vide(piece);
        }
    }
    /*
    piece_siam piece;
    piece.orientation = gauche;
    piece.type = elephant;

    plateau->piece[1][1] = piece;
    */
    assert(plateau_etre_integre);
}