{"id":21526017,"url":"https://github.com/zephylac/multi-checkers","last_synced_at":"2025-03-17T18:22:59.523Z","repository":{"id":80621663,"uuid":"73209835","full_name":"zephylac/multi-checkers","owner":"zephylac","description":"A game developped under C library","archived":false,"fork":false,"pushed_at":"2017-01-01T18:58:24.000Z","size":212,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-24T05:31:53.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zephylac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-08T17:23:07.000Z","updated_at":"2019-11-10T14:33:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"4c6367f1-4fd4-415b-aa59-19f552ddb6de","html_url":"https://github.com/zephylac/multi-checkers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zephylac%2Fmulti-checkers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zephylac%2Fmulti-checkers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zephylac%2Fmulti-checkers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zephylac%2Fmulti-checkers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zephylac","download_url":"https://codeload.github.com/zephylac/multi-checkers/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244085027,"owners_count":20395523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T01:41:35.403Z","updated_at":"2025-03-17T18:22:59.506Z","avatar_url":"https://github.com/zephylac.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Checkers-\nA game developped under C library\n\nJeux de dames++\n\nI- Introduction\n\n\tLe jeux de dames++ consiste à adapter un jeu de dames afin de pouvoir y jouer à 4 joueurs. Pour pouvoir permettre  la réalisation de ce jeux nous devrons adapter le tableaux ainsi que certaines règles.\n\nII- Règles\n\n1 – Le matériel\n\n- Le plateau sera modifié, il contiendra 225 cases.\n-Chaque joueurs disposera de 18 pions.\n- La partie se joue en deux contre deux.\n- Il y a deux types de pièce : les pions et les dames\n\t\n2 – La marche des pièces\n\n-Une fois le pion sélectionné, le joueur a alors l’obligation de le jouer si cela est possible\n- Un coup ne peut être annulé.\n\tLes pions :\n\t- Un pion se déplace obligatoirement vers l’avant, en diagonale, sur un case vide.\n\t-Lorsqu’un pion atteint la dernière rangé, le pion devient dame.\n\n\tLes dames :\n\t- Une dame rentre en action après que l’adversaire ait joué au moins une fois depuis \t\tsa création.\n\t- Une dame peut se déplacer en arrière ou en avant sur toute la longueurs de ses deux \t\tdiagonales\n3 – La prise\n\t\t\n-La prise des pièces adverses est obligatoire dans cette version du jeux sauf pour les pions alliés\n\n-Lorsqu’un pion se trouve en présence, diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette pièce et occuper la case libre. Cette pièce adverse est alors enlevée du damier. Cette opération complète est la prise par un pion.\n\n-Lorsqu’une dame se trouve en présence sur la même diagonale, directement ou à distance, d’une pièce adverse derrière laquelle se trouvent une ou plusieurs cases libres, elle doit obligatoirement passer par-dessus cette pièce et occuper, au choix, une des cases libres. Cette pièce est alors enlevée du damier. Cette opération complète est la prise par une dame.\n\n-Lorsqu’au cours d’une prise par un pion, celui-ci se trouve à nouveau en présence, diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et ainsi de suite, et occuper la case libre se trouvant derrière la dernière pièce capturée. Les pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise. Cette opération complète est une rafle par un pion.\n \nLorsqu’au cours d’une prise par une dame, celle-ci se trouve à nouveau en présence, sur une même diagonale, d’une pièce adverse derrière laquelle se trouve une ou plusieurs cases libres, elle doit obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et ainsi de suite, et occuper au choix une case libre se trouvant derrière et sur la même diagonale que la dernière pièce capturée. Les pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise. Cette opération complète est une rafle par une dame.\n\nAu cours d’une rafle, il est interdit de passer au-dessus de ses propres pièces. Mais il est possible de passer au-dessus des pièces de son allié cependant les pièces seront prise aussi.\n\nAu cours d’une rafle, il est permis de passer plusieurs fois sur une même case libre mais il est interdit de passer plus d’une fois au-dessus d’une même pièce adverse.\n\n4 – Fin de partie\n\nUne partie est considérée comme fini lorsque l’un des deux joueurs adverses n’a plus de pion.\nLorsqu’un joueur ne peut plus jouer, alors son équipe perd.\n\nIII – Mode d’interaction\n\n-Le jeux se joue au tour par tour, le programme indiquera quelle joueur doit jouer. \n \n-Les coordonnées seront repéré grâce à une lettre et un chiffre.\n\n-L’utilisateur entrera les coordonnées du pion qu’il veut déplacer. En fonction de cette saisie, le programme affichera si oui ou non le déplacement est possible. Si oui, les possibilités de déplacement.\n\n- On identifiera les pions et les dames de chaque joueurs de manière unique.\n\n-Les cases vides seront identifiés par des points (‘.’). \n\nIV – Les contraintes\n\n-Le jeux sera développé sous l'environnement  C.\n\n-Le jeux doit être rendu avant le 16 décembre.\n\nIV – La conception\n\n\n1 -  Structure de données\n\n\nUn enum permettant de savoir quel joueur est concerné :\n\ttypedef enum t_joueur(vide, joueur_1, joueur_2, joueur_3, joueur_4, invalide);\n\nUn enum permettant de savoir à quelle type de pièce nous faisons face.\n\ttypedef enum t_piece(sans , pion , dame) ;\n\nUn enum permettant de savoir l'équipe d'un joueur et donc de connaître le statut en 2 joueur \n\ttypedef enum t_equipe(aucune, equipe_1, equipe_2) ;\n\nUn enum regroupant les lettres servant à L'affichage.\n\ttypedef enum {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q}t_lettre;\n\nUne structure gerant la position des cases et pieces\n\ttypedef struct {int x; int y}t_coordonnees;\n\t\nUne structure contenant les infos du contenu de chaque case\n\ttypedef struct {t_joueur joueur; t_piece piece; t_equipe equipe} t_contenu;\n\t\nUne structure case, établie à partir des coordonnées et du contenue. Elle compose le plateau\n\ttypedef struct {t_coordonnees coordonnees; t_contenu contenu} t_case;\n\t\nUne structure Stats, permettant le retour des statistiques en fin de partie\n\ttypedef struct {char nom[20]; int pions_pris; int pions_perdus; int nb_coup} t_stats;\n\t\nLes Stats sont définies en variables globales, pouvant etre reutilisées partout\t\n\tt_stats statsj2;\n\tt_stats statsj3;\n\tt_stats statsj4;\n\nDefinition du plateau, sur lequel sera basé le programme\n\tt_contenu plateau[Z][Z];\n\nDefinition de deux listes, l'une repertoriant les coups disponibles, l'autre les coups forcés \n\tt_liste ls_coup_d;\n\tt_liste ls_coup_f;\n\t\n2 –  Fonctions\n\nUtilisées dans plateau.c:\n\nvoid ChangeJoueur(int l, int c,t_joueur nouv); change la valeur de joueur à un emplacement donné\nint litJoueur(int l,int c); retourne la valeur de joueur à un emplacement donné\nvoid DeplaAjout(int l, int c,t_liste* ls_coup); Ajoute à la liste prise en parametre le déplacement vers les coordonnées données\nint dispoPion(t_coordonnees coor,t_liste *ls_coup_d); retourne 1 si au moin 1 pion peut jouer, et indique à quel endroit \nint dispoDame(t_coordonnees coor,t_liste *ls_coup_d); retourne 1 si au moin 1 dame peut jouer, et indique à quel endroit\nvoid creerDame(t_coordonnees coor); verifie si une dame peut etre créée suite à un deplacement, et la créée si possible \nvoid viderContenu(t_contenu contenu); Vide le contenu de la case selectionnée\nvoid InitCase(int l,int c,t_joueur j); initialise la case selectionnée\nvoid init(); initialise le plateau à l'aide de InitCase\nvoid afficher(); Affiche le damier \nint coupForce(t_joueur j,t_liste* ls_coup_arr, t_liste* ls_coup_dep); retourne 1 si au moin un coup est obligatoire, et liste leur point de depart ainsi que leur point d'arrivée\nint coupDispo(t_coordonnees coor,t_joueur j,t_liste* ls_coup_d);  retourne 1 si au moin un coup est possible, et les liste    \nvoid deplacerPiece(t_coordonnees dep,t_coordonnees arriv); deplace la piece choisie à l'emplacement selectionné\nvoid prendrePiece(t_coordonnees dep,t_coordonnees arriv); prends la piece située entre l'arrivée et le depart \nvoid switchCoord( int x, int y); transforme deux int en un t_coordonnees\nvoid tourner(); fais tourner le plateau de 90°\n\nutilisées dans joueur.c:\n\nint convertir(char carac); convertis un caractère en entier\nt_coordonnees traiteEntree(char c_colonne, int ligne); fonction qui traite ce que l'utilisateur a entré\nvoid afficherLettre (t_lettre lettre); prends en entier le type enum lettre, et affiche la lettre correspondante\nt_coordonnees choisir(t_liste * ls_coup, t_joueur joueur); Fonction qui affiche les choix possibles et demande à l'utilisateur de choisir un coup\nvoid jouerTour(t_joueur joueur); Fonction qui exécute le tour d'un joueur entré en paramètre\nvoid deroulementPartie(void); Fonction qui s'occupe de la gestion des tours entre différents joueur\n\nutilisées dans jeu.c:\n\n\nint hors_plateau(int i, int j); fonction retournant 1 si les coordonnées en paramètre sont hors plateau (dans une case invalide ou non existante)\nint verifierDefaite(); fonction qui retourne le numéro du joueur perdant, s'il y en a un\nvoid ajoutListe(t_coordonnees coord, t_joueur joueur, t_piece piece, t_liste* liste); fonction ajoutant les valeurs en paramètre à la liste en paramètre\nint peutPrendrepion(t_coordonnees coord, t_joueur joueur,t_liste* ls_coup_arr, t_liste* ls_coup_dep); fonction renvoyant 1 si le pion aux coordonnées passées en paramètre peut prendre un pion adjacent. ajoute ensuite dans la liste toutes les coordonnées d'arrivées possibles\nint peutPrendredame(t_coordonnees coord, t_joueur joueur,t_liste* ls_coup_arr, t_liste* ls_coup_dep); fonctionne comme peutPrendrepion, mais avec une dame\nint peutPrendre(t_coordonnees coord, t_joueur joueur,t_liste* ls_coup_arr, t_liste* ls_coup_dep); fonction qui appelle les deux fonctions précédentes et renvoie 1 si la pièce aux coordonnées passées en paramètre peut prendre une autre piece\nint depPossible(t_joueur joueur); retourne 1 si le joueur en paramètre peut déplacer au moins une pièce, s'il ne peut pas, il perd la partie\nint partieFinie(int joueur); retourne le numéro du joueur ayant perdu, s'il y en a un\nvoid afficherStats(); affiche les statistiques pour tous les joueurs\nvoid finPartie(int joueur); affiche à l'écran que la partie est finie, en disant pourquoi, et affiche les stats de fin de partie\nvoid reinitStatsJoueur(t_joueur joueur); réinitialise les statistiques d'un joueur\nvoid reinitStats(); réinitialise les statistiques de tous les joueurs\nvoid statPionpris(t_joueur joueur); incrémente le nombre de pions pris par le joueur en paramètre\nvoid statPionperdu(t_joueur joueur); incrémente le nombre de pions perdus par le joueur en paramètre\nvoid statDep(t_joueur joueur); incrémente le nombre de déplacement effectués par le joueur en paramètre\n\n\nschéma des fonctions:\n\n3 -  Structure de fichiers\n\nplateau.c / plateau.h\n\t-plateau's management\n\t-pion's movement\njoueur.c / joueur.h\n\t-player's interaction\ngame.c / game.h\n\t-win / loss condition\n\t-other game rules\nmain.c\n\n[gitter](https://gitter.im/multi-checkers/Lobby?utm_source=share-link\u0026utm_medium=link\u0026utm_campaign=share-link)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzephylac%2Fmulti-checkers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzephylac%2Fmulti-checkers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzephylac%2Fmulti-checkers/lists"}