Bonjours,
J'aimerai crée un jeu Reversi (Othello) sur Dv-c++ en utilisant sa bibliothèque graphique.
Avec deux mode de jeu.
- Pour deux joueurs
- Et avec une IA (Je ne suis pas très spécialiste en la matière)
Dans mon analyse des problème celui qui retient le plus mon attention est :
Comment Placer les pions
J'avais penser faire une matrice taille 8x8
et la remplir de ;
0 pour les cases vide
1 pour les poins blancs
-1 pour les poins noirs
{0 0 0 0 0 0 0 0}
{0 0 0 0 0 0 0 0}
{0 0 0 0 0 0 0 0}
{0 0 0 1 -1 0 0 0}
{0 0 0 -1 1 0 0 0}
{0 0 0 0 0 0 0 0}
{0 0 0 0 0 0 0 0}
{0 0 0 0 0 0 0 0}
(Début de partie)
Pour moi c'est assez simple:
Connaissant les limites mini et maxi de la matrice, les coordonnées de la case choisie, et la couleur du joueur courant, on doit recherche dans les 8 sens possibles (nord / nord-est / est / sud-est / sud / sud-ouest / ouest / nord-ouest).
- Si elles echouent toutes, alors on ne peut pas placer le pion.
- Si une fonctionne, alors on peut placer le pion.
Et pour faire les test, je propose de remplir un tableau a une dimension. (tabTest[])
--------------------------------------------
- include <stdio.h>
- include <stdlib.h>
- define MAX 8
int main()
{
int i,j,k,x,y;
typedef int t[MAX][MAX] = {{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,1,-1,0,0,0},
{0,0,0,-1,1,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}};
scanf("%d%d", &x,&y);
t[MAX][MAX]; // Aire de jeux
tabTest[MAX]; // Tableau pour tester les recherches
k = 0;
// tester si la case est vide
if (t[x][y] == 0)
{
// recherche dans le sens nord-ouest
// donc i et j diminuent
for (i=x; i>=0; i--)
{
for (j=y; j>=0; j--)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[k] = t[i][j];
indice++;
}
}
}
for (k=0; k<=MAX; i++)
{
if(tabTest[k]==-1 && tabTest[k+1]==0)
{
tabTest[k+1]=-1;
}
}
// Réinitialisation du tableau Test
for (k=0; k<=MAX; i++)
{
(TabTest[k]=0;
}
// Parcours "LIGNE EST"
for (j=y; i=x j<=8; j++)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[k] = t[i][j];
indice++;
}
// Parcours "LIGNE OUEST"
for (j=y; i=x j>=0; j--)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[k] = t[i][j];
indice++;
}
// Parcours "NORD"
for (i=x; j=y; i>=0; i--)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[k] = t[i][j];
indice++;
}
// Parcours "SUD"
for (i=x; j=y; i=<8; i++)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[k] = t[i][j];
indice++;
}
// Parcours "SUD EST"
for (i=x; i=<8; i++)
{
for (j=y; j=<8; j++)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[indice] = t[i][j];
indice++;
}
}
}
// Parcours "NORD EST"
for (i=x; i>=0; i--)
{
for (j=y; j=<8; j++)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[indice] = t[i][j];
indice++;
}
}
}
// Parcours "SUD OUEST"
for (i=x; i=<8; i++)
{
for (j=y; j>=0; j--)
{
// ajoute les valeurs des cases rencontrées dans le tableau de recherche
tabTest[indice] = t[i][j];
indice++;
}
}
}
return 0;
}
---------------------------------------------
Ce qui a c'est que je sais pas comment retourner les poins adverses.
Est ce que les différentes rechercher (Nord, Sud,....) doivent être dans une même boucle ?
Merci d'avance