Beispiel #1
0
/* Fonction qui retourne 1 s'il existe au moins un coup valide pour un joueur, 0 sinon */
int peut_jouer(matrice M, int joueur)
{
	int i, j;
	int nb_coups_jouables=0;
	for (i=0; i<8; i++)
	{
		for (j=0; j<8; j++)
		{
			nb_coups_jouables+=coup_valide(M, i, j, joueur);
		}
	}
	if (nb_coups_jouables == 0)
	{
		return 0;
	}
	else return 1;
}
Beispiel #2
0
matrice partie(matrice M, char *nom, int joueur)
{
	char coup[2];
	char *ordi="l\'ordinateur";
	int i, j;

	while ( peut_jouer(M, 1) || peut_jouer(M, 2))
	{
		if (!peut_jouer(M, joueur))
		{
			printf("%s ne peut pas jouer", (joueur==1)?nom:ordi);
			joueur=changer_joueur(joueur);
		}
		else
		{
			printf("Au tour de %s : \n", (joueur==1)?nom:ordi);
			do
			{	
				affiche_matrice(M);
				printf("Rentrez un coup :\n");
				fscanf(stdin, "%s", coup);
				if (verif_coup(coup))
				{
					if (verif_coup(coup) == 1)
					{
						i=convertir(coup[0]);
						j=convertir(coup[1]);
					}
					else
					{
						j=convertir(coup[0]);
						i=convertir(coup[1]);
					}
				}
				
			} while (!coup_valide(M, i, j, joueur));
			M=changer(M, i, j, joueur);
			joueur=changer_joueur(joueur);
			purger();
			clear();
		}

	}
	return M;
}
Beispiel #3
0
void button_jouer (int *menu, bool *continuer,int clicX, int clicY,int *i, int *nb_tour, int *retour_bouton, int qui_commence,int contre_IA)
{
	static SDL_Rect posPionTemp;
	static int t,l,j;
	static int l_bot=0,c_bot=0;
	
	int r=15,h=5,s=20;
	int test=*i;
	
	if(clicX >=38 && clicX<=204 && clicY >= 100 && clicY <=135)
		*menu=5;
		/*historique*/
	else if(clicX >=21 && clicX<=228 && clicY >= 200 && clicY <=235)		
	{
		save(test);
		/*Save*/
	}else if(clicX >=51 && clicX<=164 && clicY >= 300 && clicY <=327)
	{
		*menu = 7;
		*retour_bouton=1;
		/*retour*/
	}
	else if(clicX >=47 && clicX<=162 && clicY >= 400 && clicY <=432)
    		*menu = 7;
    		/*quitter*/
	else if(clicX >=601 && clicX<=678 && clicY >= 501 && clicY <=519)
	{
					/*valider*/
					//coup_valide=1;	
	}else if(clicX >=401 && clicX<=455 && clicY >= 501 && clicY <=521)
	{
		if (test>0)
			*i-=1;
		/*undo*/
	}
	else 
	{				
		l=(clicY-154)/(h+s);
		t=((clicX-274-(l*r)))/(2*r);
		
		if (t >= 0 && t <= 10 && l >= 0 && l <= 10 && coup_valide(test,l,t))
		{
			if (l % 2)
				posPionTemp.x=274+(t+l/2)*2*r+2*r-11;
			else
				posPionTemp.x=274+(t+l/2)*2*r+r-11;
						
			posPionTemp.y=154+l*(h+s)+h+(s/2)-11;
			plateau[test].posPions=posPionTemp;
			
			if (!qui_commence)
				if (test % 2)
					plateau[test].player=1;
				else
					plateau[test].player=0;
			else
				if (test % 2)
					plateau[test].player=0;
				else
					plateau[test].player=1;
					
			plateau[test].coordinates.ligne=l;
			plateau[test].coordinates.colonne=t;
			
			if (plateau[test].player)
				if (t == 0)
					plateau[test].bord=2;
				else if (t == 10)
					plateau[test].bord=4;
				else
					plateau[test].bord=0;
			else
				if (l == 0)
					plateau[test].bord=1;
				else if (l == 10 )
					plateau[test].bord=3;
				else
					plateau[test].bord=0;
				printf("test =%d\n",test);
			*i+=1;
			*nb_tour+=1;
			if(contre_IA)
			{
				if (test == 0)
				{
					l_bot =0;
					c_bot =0;
				}
				test=*i;
				l=l_bot;
				t=c_bot;
				if (!qui_commence)
				if (test % 2)
					plateau[test].player=1;
				else
					plateau[test].player=0;
			else
				if (test % 2)
					plateau[test].player=0;
				else
					plateau[test].player=1;
				
				if(!coup_valide(test,l,t))
					if (!plateau[test].player)
					{
						c_bot++; l_bot--;
					}else
					{
						l_bot++; c_bot--;
					}
				l=l_bot;
				t=c_bot;
				
				
				if (t >= 0 && t <= 10 && l >= 0 && l <= 10 && coup_valide(test,l,t))
				{
					printf("normal\n");
					if (l % 2)
						posPionTemp.x=274+(t+l/2)*2*r+2*r-11;
					else
						posPionTemp.x=274+(t+l/2)*2*r+r-11;
								
					posPionTemp.y=154+l*(h+s)+h+(s/2)-11;
					plateau[test].posPions=posPionTemp;
						
					if (!qui_commence)
						if (test % 2)
							plateau[test].player=1;
						else
							plateau[test].player=0;
					else		
						if (test % 2)
							plateau[test].player=0;
						else
							plateau[test].player=1;
					
					plateau[test].coordinates.ligne=l;
					plateau[test].coordinates.colonne=t;
			
					if (plateau[test].player)
						if (t == 0)
							plateau[test].bord=2;
						else if (t == 10)
							plateau[test].bord=4;
						else
							plateau[test].bord=0;
					else
						if (l == 0)
							plateau[test].bord=1;
						else if (l == 10 )
							plateau[test].bord=3;
						else
							plateau[test].bord=0;
					if (plateau[test].player)
						c_bot++;
					else
						l_bot++;
					*i+=1;
				
				}
				
			}
			
		}
	}
}
Beispiel #4
0
int main (int argc, char * argv[])
{
	
	Coord_SDL clic;
	s_Menu menu;
	s_Interface interface;
	s_Board board;
	
	interface = Init();
	board = load_Board(interface);
	menu = load_Menu(interface);
	
	SDL_Event event;
	Plateau board_tab;
	Coordonnees_tab coord_tab;
	Couleur joueur_courant = bleu, dernier_joueur = bleu;
	menu.actualMenu = menu.mainMenu;
	bool quit = false, premier_coup = true, IA = false;
	int choix;
	
	coord_tab.abscisse = 0;
	coord_tab.ordonnee = 0;
	
	
	while (!quit)  //Boucle des évènements
	{
		SDL_WaitEvent(&event);
		
		if (IA)
			if (joueur_courant == rouge)
			{
				event.button.button = SDL_BUTTON_LEFT;
				event.type = SDL_MOUSEBUTTONDOWN;
			}
		
		switch (event.type)
		{
			case SDL_QUIT:
				quit = true;
				break;
				
			case SDL_MOUSEBUTTONDOWN:	//On clique sur la souris
				if (event.button.button == SDL_BUTTON_LEFT)
				{
					clic.CoordX = event.motion.x;
					clic.CoordY = event.motion.y;
					
					choix = choix_Menu(clic, menu);
					
					
					/********************* Menus ***********************/
					
					if (menu.actualMenu == menu.mainMenu)	//Menu principal
					{
						if (choix == 1)
							
						{
							menu.actualMenu = menu.playMenu;
							MaJ_Menu(menu, interface, nbPlayMenuChoice);
						}
						if (choix == 2)
						{
							initialiser_plateau(board_tab);
							chargement(board_tab);
							MaJ_Board(board, interface, board_tab);
							menu.actualMenu = menu.inGameMenu;
							MaJ_Menu(menu, interface, nbinGameMenuChoice);
							premier_coup = false;
						}
						if (choix == 3)
						{
							quit = true;
						}
					}
					
					
					else if (menu.actualMenu == menu.playMenu)	//Menu de sélection de partie
					{
						if (choix == 0)
						{
							menu.actualMenu = menu.inGameMenu;
							MaJ_Menu(menu, interface, nbinGameMenuChoice);
							nouvelle_partie(board_tab);
							MaJ_Board(board, interface, board_tab);
							joueur_courant = bleu;
							premier_coup = true;
							IA = false;
							MaJ_Infos(menu, interface, joueur_courant, premier_coup);

						}
						if (choix == 1)
						{
							menu.actualMenu = menu.inGameMenu;
							MaJ_Menu(menu, interface, nbinGameMenuChoice);
							nouvelle_partie(board_tab);
							MaJ_Board(board, interface, board_tab);
							joueur_courant = bleu;
							premier_coup = true;
							IA = true;
							MaJ_Infos(menu, interface, joueur_courant, premier_coup);
							
						}
						if (choix == 2)
						{
							menu.actualMenu = menu.inGameMenu;
							MaJ_Menu(menu, interface, nbinGameMenuChoice);
							nouvelle_partie(board_tab);
							MaJ_Board(board, interface, board_tab);
							joueur_courant = bleu;
							premier_coup = true;
							IA = true;
							MaJ_Infos(menu, interface, joueur_courant, premier_coup);
						}
						if (choix == 3)
						{
							if (premier_coup == true)
								menu.actualMenu = menu.mainMenu;
							else
								menu.actualMenu = menu.inGameMenu;
							MaJ_Menu(menu, interface, nbMenuChoice);
						}
					}
					
					
					else if (menu.actualMenu == menu.inGameMenu)	//Menu en jeu
					{
						if (choix == 0)
						{
							menu.actualMenu = menu.playMenu;
							MaJ_Menu(menu, interface, nbPlayMenuChoice);
						}
						if (choix == 1)
						{
							board_save(board_tab);
						}
						if (choix == 2)
						{
							if (joueur_courant != dernier_joueur)
							{
								if (!premier_coup)
								{
								annuler(board_tab);
								MaJ_Board(board, interface, board_tab);
								MaJ_Infos(menu, interface, joueur_courant, premier_coup);
								joueur_courant = changer_joueur(joueur_courant);
								}
							}
						}
						if (choix == 3)
						{
							quit = true;
						}
						
						
						/********************* Tour de jeu *********************/
						
						if (!IA)	//Partie humain vs humain
						{
							if (clic_on_board(clic, board))
							{
								coord_tab = pos_pion_tab(clic, board);
								if (coup_valide(board_tab, coord_tab))
								{
									placer_pion(board, coord_tab, joueur_courant, interface, board_tab);
								
									if (joueur_courant == bleu)
										dernier_joueur = bleu;
									else
										dernier_joueur = rouge;
									
									historique(premier_coup, coord_tab, joueur_courant);
									premier_coup = false;
									MaJ_Infos(menu, interface, joueur_courant,premier_coup);

									if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab))
									{
										affiche_vainqueur(menu, interface, joueur_courant);
										menu.actualMenu = menu.mainMenu;
										MaJ_Menu(menu, interface, nbMenuChoice);
										joueur_courant = neutre;
									}
									joueur_courant = changer_joueur(joueur_courant);
								}
							}
						}
						
						else if (IA)	//Partie humain vs IA
						{
							if (joueur_courant == bleu)
								coord_tab = pos_pion_tab(clic, board);
							else
							{
								coord_tab = coup_IA1 (board_tab);
								SDL_Delay(500);
							}
							
							if (coup_valide(board_tab, coord_tab))
							{
								placer_pion(board, coord_tab, joueur_courant, interface, board_tab);
								historique(premier_coup, coord_tab, joueur_courant);
								premier_coup = false;
								MaJ_Infos(menu, interface, joueur_courant,premier_coup);
								
								if (verify_win(board_tab[coord_tab.abscisse][coord_tab.ordonnee], board_tab))
								{
									affiche_vainqueur(menu, interface, joueur_courant);
									menu.actualMenu = menu.mainMenu;
									MaJ_Menu(menu, interface, nbMenuChoice);
									joueur_courant = neutre;
								}
								joueur_courant = changer_joueur(joueur_courant);
							}
						}
					}
				}
				break;
				
				
			case SDL_KEYDOWN:
				switch (event.key.keysym.sym)
			{
				case SDLK_ESCAPE: //On appuie sur la touche ECHAP
					quit = true;
					break;
			}
				break;
		}
		
			//Met à jour l'écran
		SDL_UpdateWindowSurface(interface.window);
	}
	
	return 0;
}