示例#1
0
文件: jouer.c 项目: Neckara/Gosh
static void event_jouer(struct state* state, SDL_Event event)
{
	struct jouerdata* jouer = state->data;
	utiliser_event_textinput(jouer->nom_partie, event);
	if (jouer->nom_partie->active) {
		afficher_sauvegarder(jouer);
		return; // ne pas interférer entre la saisie et les raccourcis claviers
	}
	if (event.type == SDL_MOUSEMOTION) {
		jouer->hovered = get_position_depuis_ecran(jouer, event.motion.x, event.motion.y);
	} else if (event.type == SDL_MOUSEBUTTONUP) {
		int b = event.button.button;
		if (b == 1) {
			Position pos = get_position_depuis_ecran(jouer, event.motion.x, event.motion.y);
			if (position_est_valide(pos)) {
				s_Coup coup = {pos};
				partie_jouer_coup(jouer->partie, coup);
				afficher_sauvegarder(jouer);
			}
		} else if (b == 2) {
			s_Coup coup;
			coup.position = POSITION_INVALIDE;
			partie_jouer_coup(jouer->partie, coup);
			afficher_sauvegarder(jouer);
		} else if (b == 4) {
			partie_annuler_coup(jouer->partie);
			afficher_sauvegarder(jouer);
		} else if (b == 5) {
			partie_rejouer_coup(jouer->partie);
			afficher_sauvegarder(jouer);
		}
	} else if (event.type == SDL_KEYDOWN) {
		if (event.key.keysym.sym == SDLK_p) {
			s_Coup coup = {POSITION_INVALIDE};
			partie_jouer_coup(jouer->partie, coup);
			afficher_sauvegarder(jouer);
		} else if (event.key.keysym.sym == SDLK_a) {
			partie_annuler_coup(jouer->partie);
			afficher_sauvegarder(jouer);
		} else if (event.key.keysym.sym == SDLK_r) {
			partie_rejouer_coup(jouer->partie);
			afficher_sauvegarder(jouer);
		}
	}
	utiliser_event_bouton(jouer->passer_son_tour, event);
	utiliser_event_bouton(jouer->sauvegarder, event);
	utiliser_event_bouton(jouer->retour_menu, event);
}
示例#2
0
文件: regles.c 项目: Neckara/Gosh
/** @ingroup test
 *  @brief Teste le rejout d'un coup
 *  @param partie de test
 *  @param inutilisé
 *  @param inutilisé
 *  @return valeur de retour de partie_rejouer_coup
 */
bool handle_rejouer(Partie partie, FILE* file, const char* arguments)
{
	(void) file;
	(void) arguments;
	bool valide = partie_rejouer_coup(partie);
	return valide;
}
示例#3
0
void cli_jouer_partie(Partie partie)
{
	char choix;

	do {

		char label[32];
		char rep[32];
		while (!partie->finie) {
			enum CouleurJoueur couleur = partie_get_joueur(partie);

			if (partie->joueurs[couleur].type == HUMAIN) {
				snprintf(label, sizeof(label), "Au joueur %s de jouer",
				         couleur == JOUEUR_BLANC ? "blanc" : "noir");
				cli_demander_string(label, rep, sizeof(rep));

				if (! strcmp(rep, "s")) {
					char filename[4096];
					cli_demander_string("Sauvegarder la partie dans le fichier", filename, sizeof(filename));
					if (! sauvegarder_partie_fichier(filename, partie))
						perror("Erreur dans la sauvegarde de la partie");
					continue;
				} else if (! strcmp(rep, "p")) {
					s_Coup passer = { POSITION_INVALIDE };
					partie_jouer_coup(partie, passer);
					continue;
				} else if (! strcmp(rep, "a")) {
					partie_annuler_coup(partie);
					cli_afficher_plateau(partie->plateau);
					continue;
				} else if (! strcmp(rep, "r")) {
					partie_rejouer_coup(partie);
					cli_afficher_plateau(partie->plateau);
					continue;
				} else if (! strcmp(rep, "q")) {
					break;
				}


				bool valide;
				s_Coup coup = cli_convertir_coup(partie, rep, &valide);
				if (valide) {
					bool reussi = partie_jouer_coup(partie, coup);
					(void) reussi; // pour les erreurs de compilation en mode release
					gosh_debug("coup reussi: %s", reussi ? "oui" : "non");
					cli_afficher_plateau(partie->plateau);
				}
			} else {
				partie_jouer_ordinateur(partie);
				cli_afficher_plateau(partie->plateau);
			}
		}
		if (partie->finie) {
			printf("Partie terminée !\n");
			float scores[2];
			partie_score_joueurs(partie, scores, VALEUR_KOMI_FRANCE);
			enum CouleurJoueur gagnant = scores[JOUEUR_NOIR] > scores[JOUEUR_BLANC] ? JOUEUR_NOIR : JOUEUR_BLANC;
			printf("Gagnant : %s (%s)\n", partie->joueurs[gagnant].nom,
			       gagnant == JOUEUR_NOIR ? "noir" : "blanc");
			printf("Score des noirs : %.1f\n", scores[JOUEUR_NOIR]);
			printf("Score des blancs : %.1f\n", scores[JOUEUR_BLANC]);
		}

		choix = cli_choisir_option("Que souhaitez-vous faire ?", 0, 'r', "rejouer la partie",
		                           's', "sauvegarder la partie",
		                           'q', "quitter", 0);
		if (choix == 's') {
			char filename[4096];
			cli_demander_string("Sauvegarder la partie dans le fichier", filename, sizeof(filename));
			if (! sauvegarder_partie_fichier(filename, partie))
				perror("Erreur dans la sauvegarde de la partie");
		} else if (choix == 'r') {
			reinitialisation_partie(partie);
			partie->finie = false;
			cli_afficher_plateau(partie->plateau);
		}
	} while (choix != 'q');
}