Example #1
0
File: ui.c Project: hahahafr/ziege
void jouer_ui(jeu_s jeu, aff_s aff)
{
    coup_s c;
    int erreur=0;
    int x, y;

    while(!is_end(jeu))
    {
        maj_affichage(jeu, aff);
        if (jeu->participant[jeu->g->joueur].is_ai)
            c = choix_coup_ai(jeu);
        else
            c = saisir_coups(jeu, aff);
        erreur = jouer(jeu, c);


    if(!erreur == 0)
    {
        char buf[256];
        snprintf(buf, sizeof buf, "%s %d|%d -> %d|%d", error[erreur-1],
          c->source[ORD], c->source[ABS], c->destination[ORD], c->destination[ABS]);
        afficher_message(aff, buf);
    }
    else
    {
        clear_message(aff);
    }

    }
        clear();
        getmaxyx(stdscr, y, x);
        attron(A_BOLD | A_REVERSE); 
        keypad(stdscr, FALSE);
        if (jeu->participant[TIGRE].score == 7)
            mvprintw((y/2), (x/2)-23, "Les tigres ont gagnés !");
        else
            mvprintw((y/2), (x/2)-24, "Les chèvres ont gagnés !");  

    getch();
}
Example #2
0
int main(int argc, char *argv[])
{
    if (argc != 2) {
		fprintf(stderr, "Usage: %s nombre\n", argv[0]);
		exit(3);
	}

	nombre_processus = atoi(argv[1]);
	int pid;
	int i, j;
	for (i = 2; i <= nombre_processus; i++) {
		// On bloque tous les sémaphores sauf le premier
		P(i);
	}

	// Exécution 5 fois de l'affichage
	for (i = 0; i < 5; i++) {
		// Forkons NOMBRE_PROCESSUS fois
		for (j = 1; j <= nombre_processus; j++) {
			pid = fork();
			if (pid == 0) {
				// Processus enfant
				afficher_message(j);
				exit(0); // <== Important
			}
		}

		// Maintenant on les attends tous
		for (j = 0; j < nombre_processus; j++) {
			wait(NULL);
		}

		printf("\n"); // Pour mieux séparer
	}
	
    exit(0);
}
Example #3
0
File: ui.c Project: hahahafr/ziege
coup_s
saisir_coups(jeu_s jeu, aff_s aff)
{
    int c;
    MEVENT event;
    mousemask(ALL_MOUSE_EVENTS, NULL);



    int clics_sont_valides = 0;
    int err;

    coup_s coup = malloc(sizeof(t_coup_s));

    int second_click = 0;


    if (get_phase(jeu) == PHASE_PLACEMENT && get_joueur(jeu) == CHEVRE)
    {
        coup->source[ABS]=-1;
        coup->source[ORD]=-1;
        second_click = 1;
        wattron(aff->etat, A_REVERSE | A_BOLD);
        mvwprintw(aff->etat, 1, 2, "Positionnez une chèvre");
        wattroff(aff->etat, A_REVERSE | A_BOLD);
        wrefresh(aff->etat);
    }
    if (get_phase(jeu) == PHASE_DEPLACEMENT && get_joueur(jeu) == CHEVRE)
    {
        wattron(aff->etat, A_REVERSE | A_BOLD);
        mvwprintw(aff->etat, 1, 2, "Déplacez une chèvre");
        wattroff(aff->etat, A_REVERSE | A_BOLD);
        wrefresh(aff->etat);
    }
    if (get_joueur(jeu) == TIGRE)
    {
        wattron(aff->etat, A_REVERSE | A_BOLD);
        mvwprintw(aff->etat, 1, 2, "Déplacez un tigre");
        wattroff(aff->etat, A_REVERSE | A_BOLD);
        wrefresh(aff->etat);
    }

    do
    {
        keypad(stdscr, TRUE);
        c = getch();
        if (c == KEY_MOUSE)
            if(getmouse(&event) == OK)
                if(event.bstate & BUTTON1_CLICKED)
                {
                    wmove(aff->etat, 1, 2);
                    wclrtoeol(aff->etat);
                    wmove(aff->etat, 2, 2);
                    wclrtoeol(aff->etat);
                    wmove(aff->etat, 3, 2);
                    wclrtoeol(aff->etat);
                    if (second_click)
                    {

                        wattron(aff->etat, A_BOLD);
                        mvwprintw(aff->etat, 3, 2, "FAIRE SELECTION");
                        wattroff(aff->etat, A_BOLD);
                        wrefresh(aff->etat);

                        err = coord_aff_vers_jeu(aff, event.y, event.x, &(coup->destination[ABS]),
                         &(coup->destination[ORD]));
                        if (!err)
                        {
                            clics_sont_valides = 1;

                            wmove(aff->etat, 2, 2);
                            wclrtoeol(aff->etat);
                            mvwprintw(aff->etat, 2, 2, "DX: ");
                            wattroff(aff->etat, A_BOLD);
                            wattron(aff->etat, A_BOLD);
                            wprintw(aff->etat, "%d ", coup->destination[ABS]);
                            wattroff(aff->etat, A_BOLD);
                            wprintw(aff->etat, "DY: ");
                            wattron(aff->etat, A_BOLD);
                            wprintw(aff->etat, "%d", coup->destination[ORD]);
                            wattroff(aff->etat, A_BOLD);
                            wrefresh(aff->etat);
                        }
                        else
                        {
                            wattron(aff->etat, A_REVERSE | A_BOLD);
                            mvwprintw(aff->etat, 2, 2, "Clic invalide, cliquez sur un pion!");
                            wattroff(aff->etat, A_REVERSE | A_BOLD);
                            wrefresh(aff->etat);
                        }
                    }
                    else
                    {

                        wattron(aff->etat, A_BOLD);
                        mvwprintw(aff->etat, 3, 2, "CHOIX DE LA DESTINATION");
                        wattroff(aff->etat, A_BOLD);
                        wrefresh(aff->etat);

                        err = coord_aff_vers_jeu(aff, event.y, event.x, &(coup->source[ABS]),
                         &(coup->source[ORD]));
                        if (!err)
                        {
                            second_click = 1;
                            wmove(aff->etat, 1, 2);
                            wclrtoeol(aff->etat);
                            wmove(aff->etat, 2, 2);
                            wclrtoeol(aff->etat);
                            mvwprintw(aff->etat, 1, 2, "SX: ");
                            wattroff(aff->etat, A_BOLD);
                            wattron(aff->etat, A_BOLD);
                            wprintw(aff->etat, "%d ", coup->source[ABS]);
                            wattroff(aff->etat, A_BOLD);
                            wprintw(aff->etat, "SY: ");
                            wattron(aff->etat, A_BOLD);
                            wprintw(aff->etat, "%d", coup->source[ORD]);
                            wattroff(aff->etat, A_BOLD);
                            wrefresh(aff->etat);
                        }
                        else
                        {
                            wmove(aff->etat, 1, 2);
                            wclrtoeol(aff->etat);
                            wmove(aff->etat, 2, 2);
                            wclrtoeol(aff->etat);
                            wattron(aff->etat, A_REVERSE | A_BOLD);
                            mvwprintw(aff->etat, 1, 2, "Clic invalide, cliquez sur un pion!");
                            wattroff(aff->etat, A_REVERSE | A_BOLD);
                            wrefresh(aff->etat);
                        }
                    }
                }
    if (c == 's')
    {
        sauvegarder(jeu);   
        afficher_message(aff, "Partie sauvegarder dans save.txt");
    }
    else if (c == 'c')
    {
        charger(jeu);
        maj_affichage(jeu, aff);
        afficher_message(aff, "Partie save.txt chargé");
    }
    else if (c == 'u')
    {
        jeu = undo(jeu);
        maj_affichage(jeu, aff);
        afficher_message(aff, "Action précedente annulée");
    }
    } while (!clics_sont_valides);

    coup->type=get_joueur(jeu);

    return coup;
}
Example #4
0
int menu_clic(SDL_Surface *screen, Menu *menu, int *page, Curseur c, Plateau *p, bool *tourJ1, Item *items[], TTF_Font *font, SDL_Color *color, Item** message, bool* game, int* mode) {
    for (int i = 0; i < menu[*page]->size; i++) {
        if (mnit_is_over(menu[*page]->items[i], &c)) {
            switch (*page) {
                case 0:
                    switch (i) {
                        case 0:
                            menu[0]->on_screen = false;
                            menu[1]->on_screen = true;
                            *page = 1;
                            return 1;
                        case N_MAINMENU - 1:
                            return 0;
                        default:
                            break;
                    }
                    break;
                case 1:
                    switch (i) {
                        case 0:
                            menu[1]->on_screen = false;
                            menu[2]->on_screen = true;
                            *page = 2;
                            return 1;
                        case 1:
                            new_game(p);
                            int res = save_charger(p, tourJ1, "./saves/save.txt", mode);
                            if (res != 0) {
                                menu[0]->on_screen = true;
                                menu[1]->on_screen = false;
                                res_placer_pion(*p, res-1, tourJ1, message, game, NULL, *mode);
                                *page = 0;
                                if (res >= 2) {
                                    afficher_message(message, res+1);
                                    *game = false;
                                } else
                                    *game = true;
                            }
                            return 1;
                        default:
                            break;
                    }
                    break;
                case 2:
                    switch (i) {
                        case 0:
                            *game = true;
                            *tourJ1 = true;
                            menu[0]->on_screen = true;
                            menu[2]->on_screen = false;
                            *page = 0;
                            for (i = 0; i < N_ITEM; i++)
                                items[i]->on_screen = true;
                            new_game(p);
                            return 2;
                        case 1:
                            menu[2]->on_screen = false;
                            menu[3]->on_screen = true;
                            *page = 3;
                            return 1;
                        default:
                            break;
                    }
                    break;
                case 3:
                    *game = true;
                    *tourJ1 = true;
                    switch (i) {
                        case 0:
                            menu[0]->on_screen = true;
                            menu[3]->on_screen = false;
                            *page = 0;
                            *mode = 1;
                            for (i = 0; i < N_ITEM; i++)
                                items[i]->on_screen = true;
                            new_game(p);
                            return 2;
                        case 1:
                            menu[0]->on_screen = true;
                            menu[3]->on_screen = false;
                            *page = 0;
                            *mode = 2;
                            for (i = 0; i < N_ITEM; i++)
                                items[i]->on_screen = true;
                            new_game(p);
                            return 2;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
            break;
        }
    }
    return true;
}