s_Coup cli_convertir_coup(const Partie partie, const char* str, bool* valide) { (void) partie; int taille = plateau_get_taille(partie->plateau); s_Coup coup = str2coup(str, taille, valide); if (*valide) { if (! position_est_valide(coup.position)) { *valide = false; } } return coup; }
struct state* creer_jouer(struct state* parent, Partie partie) { struct state* state = gosh_alloc(*state); state->afficher = afficher_jouer; struct jouerdata* jouer = gosh_alloc(*jouer); jouer->parent = parent; jouer->partie = partie; jouer->taille = plateau_get_taille(partie->plateau); state->data = jouer; state->mise_a_jour = mise_a_jour_jouer; state->mousemotion = event_jouer; state->mousebuttondown = event_jouer; state->mousebuttonup = event_jouer; state->keydown = event_jouer; char buf[TAILLE_NOM_JOUEUR + 64]; set_color(230, 200, 150); snprintf(buf, sizeof(buf), "Au tour de %s", partie->joueurs[JOUEUR_NOIR].nom); jouer->au_tour_de[JOUEUR_NOIR] = creer_label(buf, W / 2, H * .1, CENTER_XY, BIG); snprintf(buf, sizeof(buf), "Au tour de %s", partie->joueurs[JOUEUR_BLANC].nom); jouer->au_tour_de[JOUEUR_BLANC] = creer_label(buf, W / 2, H * .1, CENTER_XY, BIG); jouer->handicap = creer_label("Pierre de handicap", W / 2, H * .1, CENTER_XY, BIG); jouer->partie_finie = creer_label("Partie terminée !", W / 2, H * .1, CENTER_XY, BIG); set_color(155, 50, 50); struct bouton* bouton = creer_bouton("Retour menu", 10, H * .81, 140, 30); bouton->callback = jouer_bouton_retour; bouton->userdata = state; jouer->retour_menu = bouton; set_color(255, 255, 255); bouton = creer_bouton("Passer son tour", W * .75, H * .15, 150, 30); bouton->callback = jouer_bouton_passer; bouton->userdata = state; jouer->passer_son_tour = bouton; set_color(255, 255, 255); bouton = creer_bouton("Sauvegarder", W * .75, H * .93, 150, 30); bouton->callback = jouer_bouton_sauvegarder; bouton->userdata = state; bouton->visible = false; jouer->sauvegarder = bouton; set_color(150, 150, 150); jouer->nom_partie = creer_textinput(W * 0.5, H * .94, 180, 20, 16); jouer->hovered = POSITION_INVALIDE; return state; }
/** @ingroup test * @brief Affiche le plateau en mode "debug" * @param plateau à afficher. */ void afficher_plateau(Plateau plateau) { int taille = plateau_get_taille(plateau); // pour tester les chaines Position position_chaine = position(taille / 2, taille / 2, taille); Chaine chaine = plateau_determiner_chaine(plateau, position_chaine); Libertes libertes = determiner_libertes(plateau, chaine); Territoire territoire = determiner_territoire(plateau, position(taille - 1, taille - 1, taille)); const char* couleur_territoire = NULL; switch (ensemble_colore_couleur(territoire)) { case BLANC: couleur_territoire = C_YELLOW; break; case NOIR: couleur_territoire = C_BLUE; break; case VIDE: couleur_territoire = C_GREY; break; } for (int y = 0; y < taille; y++) { for (int x = 0; x < taille; x++) { Couleur couleur = plateau_get(plateau, x, y); // highlight de la chaine const char* ansi = C_NORMAL; if (chaine != NULL && gosh_appartient(chaine, position(x, y, taille))) ansi = C_RED; else if (libertes != NULL && gosh_appartient(libertes, position(x, y, taille))) ansi = C_GREEN; else if (territoire != NULL && gosh_appartient(territoire, position(x, y, taille))) ansi = couleur_territoire; printf("%s%d "C_NORMAL, ansi, couleur); } printf("\n"); } if (chaine) detruire_chaine(chaine); if (libertes) detruire_libertes(libertes); if (territoire) detruire_territoire(territoire); }
/** @ingroup test * @brief Teste les plateaux * */ void test_plateau(void) { int taille = 19; Plateau plateau = creer_plateau(taille); assert(plateau_get_taille(plateau) == taille); for (int y = 0; y < taille; y++) { for (int x = 0; x < taille; x++) { Couleur c = rand() % 3; plateau_set(plateau, x, y, c); assert(plateau_get(plateau, x, y) == c); } } afficher_plateau(plateau); detruire_plateau(plateau); }