コード例 #1
0
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
//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");
}
コード例 #2
0
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
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
ファイル: api_siam.c プロジェクト: JeremBlain/Jeu_Siam
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");
	
}
コード例 #4
0
ファイル: entree_sortie.c プロジェクト: DiAifU/Projet_Siam
void entree_sortie_lire_jeu_fichier(const char* filename,jeu_siam* jeu)
{
    const char *lgn_joueur = "joueur %d"; 
    int joueur;
    const char *lgn_int = "[%d]";
    const char *lgn_str = "[%s]";
    char y_str[10];
    char buffer[100];
    
    FILE *identifiant = fopen(filename, "r");
    jeu_initialiser(jeu);
    if (identifiant == NULL) {
      printf("Erreur ouverture fichier %s\n", filename);
      exit(1);
    }
    int y, i;
    // 100 : valeur arbitraire, fgets() s'arrete au \n
    while (fgets(buffer, 100, identifiant) != 0) {
      if (sscanf(buffer, lgn_joueur, &joueur) == 1)
	jeu->joueur = joueur;
      else if (sscanf(buffer, lgn_int, &y) == 1) {
	sscanf(buffer, lgn_str, &y_str);
	if (y < 0 || y > NBR_CASES) {
	  puts("Erreur lecture numero de ligne");
	  exit(1);
	}
	for (i = 0; i < NBR_CASES; i++) {
	  char type_piece_nom_cours[4];
	  type_piece_nom_cours[0] = buffer[strlen(y_str) + 2 + i*6];
	  type_piece_nom_cours[1] = buffer[strlen(y_str) + 3 + i*6];
	  type_piece_nom_cours[2] = buffer[strlen(y_str) + 4 + i*6];
	  type_piece_nom_cours[3] = '\0';
	  jeu->plateau.piece[i][y] = piece_correspondre_nom_cours(type_piece_nom_cours);
	}
      }
    }
    if (!jeu_etre_integre(jeu)) {
      printf("Jeu invalide lecture fichier %s\n", filename);
      exit(1);
    }
}
コード例 #5
0
ファイル: mode_interactif.c プロジェクト: JeremBlain/Jeu_Siam
void mode_interactif_lancer()
{

    puts("\n***********************");
    puts("Jeu SIAM mode interactif:");
    puts("***********************");
    puts("Commandes:");
    puts("> #                 : Commentaires, tout ce qui suit # n'est pas analyse.");
    puts("> i                 : [I]nitialisation du jeu.");
    puts("> n x0 y0 dir       : [N]ouvelle piece introduite en (x0,y0) avec direction indiquee.");
    puts("> d x0 y0 dir0 dir1 : [D]eplacement piece de (x0,y0) dans le sens dir0 indique");
    puts("                         et ayant la direction dir1 a l'arrive.");
    puts("> o x0 y0 dir       : [O]rientation nouvelle de la piece en (x0,y0).");
    puts("> lit [NOM_FICHIER] : Lire un fichier externe.");
    puts("");
    puts("directions possibles: gauche <, droite >, haut ^, bas v.");
    printf("***********************\n\n");
    fflush(stdout);



    int victoire=0;
    jeu_siam jeu;
    jeu_initialiser(&jeu);

    action_a_realiser action;
    action_initialiser(&action);

    mode_interactif_sauvegarder_jeu_fichier(&jeu);

    char buffer_ligne_commande[MAX_NOM_FICHIER_TAILLE];

    do
    {
        puts("");fflush(stdout);
        jeu_afficher(&jeu);

        printf("> ");
        fflush(stdout);

	if(jeu.joueur == 0)
	{
       		 fgets(buffer_ligne_commande,MAX_LIGNE_COMMANDE,stdin);
       		 ligne_de_commande_parser(buffer_ligne_commande,&action);
	}

	else
	{	
		ai_joue_tour(&jeu);
		FILE *fid=fopen("AI_instructions.txt","r");
	
		fscanf(fid, "%7c\n", buffer_ligne_commande);
		
		int c=fclose(fid);
   		if(c!=0)
   		{
    			printf("Erreur fermeture fichier %s\n", "AI_instructions.txt"); exit(1);
   		}

		ligne_de_commande_parser(buffer_ligne_commande,&action);
	}

        switch(action.type_action)
        {
        case deplacement:
            mode_interactif_deplacer_piece(&jeu,action.x_depart,action.y_depart,action.deplacement,action.orientation,&victoire);
            break;
        case introduction:
            mode_interactif_introduire_nouvelle_piece(&jeu,action.x_depart,action.y_depart,action.orientation,&victoire);
            break;
        case changement_orientation:
            mode_interactif_changer_orientation(&jeu,action.x_depart,action.y_depart,action.orientation);
            break;
        case lecture_fichier:
            mode_interactif_lire_fichier(&jeu,action.filename);
            break;
        case initialisation:
            printf("Initialisation du jeu\n");fflush(stdout);
            jeu_initialiser(&jeu);
            mode_interactif_sauvegarder_jeu_fichier(&jeu);
            break;
        case fin:
            printf("Fin de la partie\n");fflush(stdout);
            break;
        default:
            puts("\nLigne non valide, action non realisee\n");fflush(stdout);
            break;
        }

    } while(action.type_action!=fin && victoire==0);
}