int recuperer_valeur() { if (turn == 1) { printf("[SYS] Au tour de \"%s\"(X). Que voulez-vous jouer ? ",joueur1); scanf("%s",jeu); if (strcmp(jeu,"tab") == 0) afficher_plateau(); else printf("[SYS] Vous avez joué %s\n\n",jeu); } else if (turn == 2) { if (contre_ia) { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (test_adjacence(i,j) && test_coup(i,j)) { jeu[0] = i+65; jeu[1] = j+49; } } } /* if (i == 8 && j == 8) return -1; */ printf("[SYS] PC a joué : %s\n", jeu); } else { printf("[SYS] Au tour de \"%s\"(O). Que voulez-vous jouer ? ",joueur2); scanf("%s",jeu); if (strcmp(jeu,"tab") == 0) afficher_plateau(); else printf("[SYS] Vous avez joué %s\n\n",jeu); } } else { fprintf(stderr, "[ERR] Erreur selection joueur\n"); return -1; } return 1; }
/** @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); }
int main() { morpion_t partie = creer_partie(); int vainqueur = VIDE , i = 0; while(vainqueur == VIDE && i < 9) { vainqueur = tour(&partie); afficher_plateau(partie); changer_joueur(&partie); i++; } if(vainqueur == ROND) printf("LE JOUEUR ROND A GAGNÉ\n"); else if(vainqueur == CROIX) printf("LE JOUEUR CROIX A GAGNÉ\n"); else printf("PERSONNE N'A GAGNE\n"); return EXIT_SUCCESS; }
int main () { char choix; printf("Voulez-vous jouer contre l'ordinateur ? (O/n)\n"); scanf("%c",&choix); if (choix == 'O' || choix == 'o') contre_ia = 1; printf("[SYS] Entrez le nom du joueur1 (X) : "); scanf("%s",joueur1); if (contre_ia) { strcpy(joueur2,"PC"); } else { printf("[SYS] Entrez le nom du joueur2 (O) : "); scanf("%s",joueur2); } printf("[SYS] Joueur1(X): \"%s\", Joueur2(O): \"%s\"\n",joueur1, joueur2); initialiser(); afficher_plateau(); int finished=0; while(!finished) { int val = recuperer_valeur(); if (val < 0) finished=1; /* Dans la table ASCII: • les minuscules sont entre 97 et 122 • Les majuscules entre 65 et 90; */ int x,y; y = (jeu[1] - '0') -1; if (jeu[0] >= 65 && jeu[0] < 73) /* 73 pour s'arrêter à H */ x = jeu[0] - 65; else if (jeu[0] >= 97 && jeu[0] < 105) /* 105 pour s'arrêter à h */ x = jeu[0] - 97; else { fprintf(stderr, "[ERR] Vous avez entré une valeur erronnée.\n"); continue; } if (strcmp(jeu,"tab") == 0) continue; if ((x < 0 || x > 8 || y < 0 || y > 8)) { fprintf(stderr, "[ERR] Vous avez entré une valeur erronnée.\n"); continue; } if (plateau[x][y] != 0) { fprintf(stderr, "[ERR] La case est déjà remplie :( Réessayez\n"); continue; } if (!test_adjacence(x,y) || !test_coup(x,y)) { fprintf(stderr, "[ERR] Ce coup est impossible. Réessayez\n"); continue; } jouer_coup(x,y); turn = (turn == 1) ? 2 : 1; afficher_plateau(); } printf("Terminé ! %s a eu %d, %s a eu %d\n",joueur1, score_j1, joueur2, score_j2); return 0; }
void jeu( processeur liste_processeur[][16], int nbTours ){ adresse ad; int x, y; processeur *p ; short int mot; while(nbTours > 0){ printf("tours restants : %d\n\n",nbTours); nbTours -= 1; appliquer_interruptions(liste_processeur); appliquer_modifications(liste_processeur); afficher_plateau(liste_processeur,C1,C2); afficher_processeur_debug(liste_processeur[0][0]); for(x = 0; x<16; x+=1){ for(y = 0; y<16; y+=1){ ad.x = x; ad.y = y; ad.adresse_memoire = 0; p = & liste_processeur[ad.x][ad.y]; mot = *(short int *)&p->ram[(p->r[PC])%256]; /*Si le processeur n'a pas joué*/ if(!p->aJoue){ /*si le timer est actif*/ if(p->ram[TIMER_ACTIF]){ /*Si le timer n'est pas arrivé à expiration*/ if(p->ram[HORLOGE]<p->ram[VALEUR_LIMITE]){ /*si on detecte une instruction illegale*/ if((mot>>11)==0x001F){ ajouter_liste_interruption(&ad,ILLEGAL); } else{ tableau_de_commandes[((mot>>11)&0x001F)%30](liste_processeur,&ad); /*On appelle la commande associée à la commande décodée dans le mot*/ p->cycles+=1; if(p->cycles >= p->ram[CYCLES]){ p->ram[HORLOGE]+=1; p->cycles = 0; } } } else{ ajouter_liste_interruption(&ad,TIMER); p->ram[HORLOGE]=0; p->ram[TIMER_ACTIF]=0; p->cycles = 0; } } else{ /*si on detecte une instruction illegale*/ if((mot>>11)==0x001F){ ajouter_liste_interruption(&ad,ILLEGAL); } else{ tableau_de_commandes[((mot>>11)&0x001F)%30](liste_processeur,&ad); } /*On appelle la commande associée à la commande décodée dans le mot*/ } }