Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
/** @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);
}
Пример #4
0
/** @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);
}