Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //gcc main.c board.o -o main
- #include <stdio.h>
- #include "board.h"
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- #define MAX 100
- void espaces(int nbr)
- {
- for (int i = 0; i < nbr; i++)
- {
- printf(" ");
- }
- }
- void affichage_placer_piece(board game, int currentPlayer)
- {
- int line = -1, col = -1;
- do
- {
- if (get_piece_size(game, line - 1, col - 1) == 3 && line != -1 && col != -1)
- {
- printf("\033[0;31mIl y a déjà une pièce et vous ne pouvez pas la recouvrir\033[00m \n");
- }
- do
- {
- printf("Entrez un numéro de ligne (entre 1 et 3) : ");
- scanf("%d", &line);
- while ((getchar()) != '\n')
- ;
- } while (line < 1 || line > 3);
- do
- {
- printf("Entrez un numéro de colonne (entre 1 et 3) : ");
- scanf("%d", &col);
- while ((getchar()) != '\n')
- ;
- } while (col < 1 || col > 3);
- if (get_piece_size(game, line, col) == 3)
- {
- printf("Il y a déjà une pièce dans la case séléctionnée, et vous ne pouvez pas la recouvrir\n");
- }
- } while (get_piece_size(game, line - 1, col - 1) == 3);
- int taille = -1;
- do
- {
- if (taille != -1 && get_nb_piece_in_house(game, currentPlayer, taille) == 0)
- {
- printf("\033[0;31mVous avez utilisé toutes vos pièces de taille %ls, veuillez choisir une autre taille\033[00m \n", &taille);
- }
- if (taille != -1 && (taille <= get_piece_size(game, line - 1, col - 1)))
- {
- printf("\033[0;31mVous ne pouvez pas recouvrir la pièce\033[00m \n");
- }
- printf("\n─────────── Quelle est la taille de la pièce à placer dans la case (%d,%d) ?───────────\n", line, col);
- printf(" Petite (1) - Moyenne (2) - Grande (3)\n");
- printf("─────────────────────────────────────────────────────────────────────────────────────\n");
- scanf("%d", &taille);
- while ((getchar()) != '\n')
- ;
- } while (taille < 1 || taille > 3 || taille <= get_piece_size(game, line - 1, col - 1) || get_nb_piece_in_house(game, currentPlayer, taille) == 0);
- place_piece(game, currentPlayer, taille, line - 1, col - 1);
- }
- void affichage_deplacer_piece(board game, int currentPlayer)
- {
- int line = -1, col = -1, line2 = -1, col2 = -1;
- if (get_nb_piece_in_house(game, currentPlayer, 1) == 2 && get_nb_piece_in_house(game, currentPlayer, 2) == 2 && get_nb_piece_in_house(game, currentPlayer, 3) == 2)
- {
- printf("\033[0;31mVous n'avez pas encore placer de pièces, il faut en placer une d'abord\033[00m \n");
- affichage_placer_piece(game, currentPlayer);
- }
- else
- {
- do
- {
- if (get_piece_size(game, line - 1, col - 1) == 0 && line != -1 && col != -1)
- {
- printf("\033[0;31mIl y a pas de pièce dans la case séléctionnée\033[00m\n");
- }
- else if (get_place_holder(game, line - 1, col - 1) != currentPlayer && line != -1 && col != -1)
- {
- printf("\033[0;31mLa pièce dans cette case ne vous appartient pas, vous ne pouvez pas la déplacer\033[00m\n");
- }
- do
- {
- printf("Entrez le numéro de ligne de la pièce à déplacer (entre 1 et 3) : ");
- scanf("%d", &line);
- while ((getchar()) != '\n')
- ;
- } while (line < 1 && line > 3);
- do
- {
- printf("Entrez le numéro de colonne de la pièce à déplacer (entre 1 et 3) : ");
- scanf("%d", &col);
- while ((getchar()) != '\n')
- ;
- } while (col < 1 && col > 3);
- } while (get_place_holder(game, line - 1, col - 1) != currentPlayer || get_piece_size(game, line - 1, col - 1) == 0);
- do
- {
- if (get_piece_size(game, line - 1, col - 1) <= get_piece_size(game, line2 - 1, col2 - 1))
- {
- printf("\033[0;31mVous ne pouvez pas déplacer la pièce dans la case selectionnée car votre pièce ne permet pas de recouvrir celle déjà présente\033[00m\n");
- }
- do
- {
- printf("Entrez le numéro de ligne de la case où vous voulez déplacer la pièce (entre 1 et 3) : ");
- scanf("%d", &line2);
- while ((getchar()) != '\n')
- ;
- } while (line2 < 1 && line2 > 3);
- do
- {
- printf("Entrez le numéro de colonne de la case où vous voulez déplacer la pièce (entre 1 et 3) : ");
- scanf("%d", &col2);
- while ((getchar()) != '\n')
- ;
- } while (col2 < 1 && col2 > 3);
- } while (get_piece_size(game, line - 1, col - 1) <= get_piece_size(game, line2 - 1, col2 - 1));
- move_piece(game, line - 1, col - 1, line2 - 1, col2 - 1);
- }
- }
- void couleurTaillePion(player joueur, size taille)
- {
- if (joueur == 1)
- {
- printf("\033[0;36m");
- switch (taille)
- {
- case SMALL:
- printf(".");
- break;
- case MEDIUM:
- printf("x");
- break;
- case LARGE:
- printf("#");
- break;
- default:
- printf(" ");
- break;
- }
- }
- else
- {
- printf("\033[0;31m");
- switch (taille)
- {
- case SMALL:
- printf(".");
- break;
- case MEDIUM:
- printf("o");
- break;
- case LARGE:
- printf("0");
- break;
- default:
- printf(" ");
- break;
- }
- }
- printf("\033[00m");
- }
- void pointsRestants(board jeu, player joueur)
- {
- //--------------- SMALL ---------------//
- int small = get_nb_piece_in_house(jeu, joueur, SMALL); // Détermination du nombre de pièce SMALL
- for (int i = 0; i < small; i++)
- {
- printf("."); // Affichage de x caractères en fonction de pieces restantes (joueur 1 et joueur 2)
- }
- for (int i = 0; i < 2 - small; i++)
- {
- printf(" "); // Affichage de x espaces, en fonction des piosn déjà placés
- }
- //--------------- MEDIUM ---------------//
- int medium = get_nb_piece_in_house(jeu, joueur, MEDIUM); // Détermination du nombre de pièce MEDIUM
- for (int i = 0; i < medium; i++)
- {
- if (joueur == 1)
- {
- printf("X"); // Affichage de x caractères en fonction de pieces restantes (joueur 1)
- }
- else
- {
- printf("o"); // Affichage de x caractères en fonction de pieces restantes (joueur 2)
- }
- }
- for (int i = 0; i < 2 - medium; i++)
- {
- printf(" "); // Affichage de x espaces, en fonction des piosn déjà placés
- }
- //--------------- LARGE ---------------//
- int large = get_nb_piece_in_house(jeu, joueur, LARGE); // Détermination du nombre de pièce LARGE
- for (int i = 0; i < large; i++)
- {
- if (joueur == 1)
- {
- printf("#"); // Affichage de x caractères en fonction de pieces restantes (joueur 1)
- }
- else
- {
- printf("0"); // Affichage de x caractères en fonction de pieces restantes (joueur 2)
- }
- }
- for (int i = 0; i < 2 - large; i++)
- {
- printf(" "); // Affichage de x espaces, en fonction des piosn déjà placés
- }
- }
- void affichagePion(board jeu, int pion, int line)
- {
- for (int col = 0; col < 3; col++) // Affichage des trois cases
- {
- for (int i = 0; i < 10; i++) // Strucure du plateau
- {
- if (i % 5 == 0 && i % 10 != 0 && pion == 1)
- {
- // Récupération du joueur et de la taille du pion de la case (line,col)
- couleurTaillePion(get_place_holder(jeu, line, col), get_piece_size(jeu, line, col));
- }
- else if (i % 5 == 0 && i % 10 == 0)
- {
- //Structure plateau
- printf("║");
- }
- else
- {
- //Structure plateau
- printf(" ");
- }
- }
- }
- //Structure plateau
- printf("║");
- }
- void affichageInfoGauche(int line, char *pseudo_current_player, player current_player)
- {
- int tailleNom = 0;
- tailleNom = strlen(pseudo_current_player);
- switch (line)
- {
- case 1:
- for (int i = 0; i < 15 - tailleNom / 2; i++)
- {
- printf("─");
- }
- if (current_player == 1)
- {
- printf(" \033[0;36m%s\033[00m - Faites un choix ", pseudo_current_player);
- }
- else
- {
- printf(" \033[0;31m%s\033[00m - Faites un choix ", pseudo_current_player);
- }
- if (tailleNom % 2 != 0)
- {
- tailleNom += 1;
- }
- for (int i = 0; i < 15 - tailleNom / 2; i++)
- {
- printf("─");
- }
- break;
- case 2:
- printf(" 1) Placer une pièce");
- break;
- case 3:
- printf(" 2) Déplacer une pièce");
- break;
- case 4:
- printf(" 3) Quitter la partie");
- break;
- case 5:
- for (int i = 0; i < 50; i++)
- {
- printf("─");
- }
- break;
- default:
- break;
- }
- }
- void affichageInfoDroite(board jeu, int line, char *pseudo_j1, char *pseudo_j2)
- {
- int tailleNom1 = 0;
- int tailleNom2 = 0;
- tailleNom1 = strlen(pseudo_j1);
- tailleNom2 = strlen(pseudo_j2);
- switch (line)
- {
- case 1:
- for (int i = 0; i < 17; i++)
- {
- printf("─");
- }
- printf(" Pions Restants ");
- for (int i = 0; i < 17; i++)
- {
- printf("─");
- }
- break;
- case 2:
- for (int i = 0; i < 11 - tailleNom1 / 2; i++)
- {
- printf(" ");
- }
- printf("\033[0;36m%s\033[00m", pseudo_j1);
- for (int i = 0; i < (9 - tailleNom1 / 2) + 15 + (9 - tailleNom2 / 2); i++)
- {
- printf(" ");
- }
- printf("\033[0;31m%s\033[00m", pseudo_j2);
- for (int i = 0; i < 9 - tailleNom2 / 2; i++)
- {
- printf(" ");
- }
- printf("\n");
- break;
- case 3:
- espaces(8);
- printf("\033[0;36m");
- pointsRestants(jeu, 1);
- printf("\033[00m");
- espaces(27);
- printf("\033[0;31m");
- pointsRestants(jeu, 2);
- printf("\033[00m");
- printf("\n");
- break;
- case 4:
- espaces(3);
- for (int i = 0; i < 50; i++)
- {
- printf("─");
- }
- printf("\n");
- break;
- default:
- break;
- }
- }
- void titreJeu()
- {
- //--------------- Affichage du Titre ---------------//
- espaces(47);
- printf("\033[0;36m╔═╗\033[00m┌─┐┌┐ ┌┐ ┬ ┌─┐┌┬┐ \033[0;31m╔═╗\033[00m┌─┐┌┐ ┌┐ ┬ ┌─┐┬─┐┌─┐\n");
- espaces(47);
- printf("\033[0;36m║ ╦\033[00m│ │├┴┐├┴┐│ ├┤ │ \033[0;31m║ ╦\033[00m│ │├┴┐├┴┐│ ├┤ ├┬┘└─┐\n");
- espaces(47);
- printf("\033[0;36m╚═╝\033[00m└─┘└─┘└─┘┴─┘└─┘ ┴ \033[0;31m╚═╝\033[00m└─┘└─┘└─┘┴─┘└─┘┴└─└─┘\n");
- }
- void affichagePlateau(board jeu, char *pseudo_j1, char *pseudo_j2, char *pseudo_current_player, player current_player)
- {
- system("clear"); // Clear de la console
- titreJeu(); // Affichage du titre du jeu
- espaces(53); // Espaces
- printf("╔═════════╦═════════╦═════════╗\n"); // Affichage de la première ligne du plateau
- espaces(53);
- printf("║ ║ ║ ║\n"); // Affichage de la deuxième ligne du plateau
- espaces(53);
- affichagePion(jeu, 1, 0); // Affichage de la troisième ligne du plateau, comportant les pions
- printf("\n");
- espaces(53);
- printf("║ ║ ║ ║\n"); // Affichage de la première ligne du plateau
- affichageInfoGauche(1, pseudo_current_player, current_player); // Affichage de la première ligne d'informations à gauche
- espaces(3);
- printf("╠═════════╬═════════╬═════════╣");
- printf(" ");
- affichageInfoDroite(jeu, 1, pseudo_j1, pseudo_j2); // Affichage de la première ligne d'informations à droite
- printf("\n");
- /******* Pareil que précédement, mais avec la suite du plateau, et d'autres informations *****/
- affichageInfoGauche(2, pseudo_current_player, current_player);
- espaces(29);
- printf("║ ║ ║ ║");
- affichageInfoDroite(jeu, 2, pseudo_j1, pseudo_j2);
- affichageInfoGauche(3, pseudo_current_player, current_player);
- espaces(27);
- affichagePion(jeu, 1, 1);
- printf("\033[0m\n");
- affichageInfoGauche(4, pseudo_current_player, current_player);
- espaces(28);
- printf("║ ║ ║ ║");
- affichageInfoDroite(jeu, 3, pseudo_j1, pseudo_j2);
- affichageInfoGauche(5, pseudo_current_player, current_player);
- espaces(3);
- printf("╠═════════╬═════════╬═════════╣");
- affichageInfoDroite(jeu, 4, pseudo_j1, pseudo_j2);
- espaces(53);
- printf("║ ║ ║ ║\n");
- espaces(53);
- affichagePion(jeu, 1, 2);
- printf("\n");
- espaces(53);
- printf("║ ║ ║ ║\n");
- espaces(53);
- printf("╚═════════╩═════════╩═════════╝\n");
- }
- int quitter()
- {
- return (0);
- }
- void jeu(board game, char *pseudo_j1, char *pseudo_j2, player current_player)
- {
- int choix;
- char pseudo_current_player[12] = {""}; // Variable stockant le pseudo du joueur qui doit jouer ( pour l'affichage )
- if (current_player == 1) // Si c'est au joueur 1 de jouer
- {
- strcpy(pseudo_current_player, pseudo_j1); // Copie du pseudo_j1 dans la variable pseudo_current_player
- }
- else
- {
- strcpy(pseudo_current_player, pseudo_j2);
- } // Copie du pseudo_j2 dans la variable pseudo_current_player
- do
- {
- system("clear"); // Clear de la console
- affichagePlateau(game, pseudo_j1, pseudo_j2, pseudo_current_player, current_player); // Affichage du plateau de jeu
- scanf("%d", &choix);
- while ((getchar()) != '\n')
- ; // Clear du buffer
- } while (choix < 1 || choix > 3);
- switch (choix)
- {
- case 1:
- affichage_placer_piece(game, current_player); // Appel de la fonction pour placer une pièce
- affichagePlateau(game, pseudo_j1, pseudo_j2, pseudo_current_player, current_player); // Affichage du plateau de jeu
- if (get_winner(game) != 0)
- {
- printf("%s A GAGNE", pseudo_current_player);
- }
- else
- {
- current_player = next_player(current_player); // Changement de joueur
- jeu(game, pseudo_j1, pseudo_j2, current_player); // Retour au début de la boucle pour un nouveau tour
- }
- break;
- case 2:
- affichage_deplacer_piece(game, current_player); // Appel de la fonction pour déplacer une pièce
- affichagePlateau(game, pseudo_j1, pseudo_j2, pseudo_current_player, current_player); // Affichage du plateau ded jeu
- if (get_winner(game) != 0)
- {
- printf("%s A GAGNE", pseudo_current_player);
- }
- else
- {
- current_player = next_player(current_player); // Changement de joueur
- jeu(game, pseudo_j1, pseudo_j2, current_player); // Retour au début de la boucle pour un nouveau tour
- }
- break;
- case 3:
- destroy_game(game); // Déstruction du plateau de jeu
- quitter();
- break; // Break pour quitter la partie, et le programme
- default:
- break;
- }
- }
- void start_new_game()
- {
- board grille_de_jeu = new_game(); // Creation d'une nouvelle grille de jeu
- //Pseudos
- char pseudo_j1[12], pseudo_j2[12];
- printf("Pseudo du\033[0;36m Joueur 1\033[00m : "); // Pseudo Joueur 1
- scanf("%s", pseudo_j1);
- printf("Pseudo du\033[0;31m Joueur 2\033[00m : "); // Pseudo Joueur 2
- scanf("%s", pseudo_j2);
- jeu(grille_de_jeu, pseudo_j1, pseudo_j2, 1); // Appel de la fonction de la fonction jeu
- }
- int main(int args, char **argv)
- {
- int choix;
- do
- {
- system("clear"); // Remise à Zéro de la Console
- choix = 0; // Réinitialisation du choix, en cas de boucle
- /********** Affichage de l'interface de choix **********/
- printf(" ─────────── Faites un choix ───────────\n");
- printf(" 1) Commencez une Partie\n");
- printf(" 2) Quittez le programme\n");
- printf(" ───────────────────────────────────────\n");
- /*******************************************************************************/
- scanf("%d", &choix); // Scan du choix de l'utilisateur
- while ((getchar()) != '\n')
- ; // Remise à Zéro du Buffer d'entrée
- system("clear"); // Clear de la console
- } while (choix != 1 && choix != 2); // Boucle tant que l'utilisateur ne choisit pas entre les deux choix
- switch (choix) // Switch suivant le choix de l'utilisateur
- {
- case 1:
- start_new_game(); // Appel de la fonction pour commencer une nouvelle partie
- break;
- default:
- break; // Sinon, fin du programme
- }
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement