Jeu : Pluzin
Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 04 Fév 2013, 22:44
Le jeu Pluzin se joue entre 2 personnes. Pluzin est une transcription phonetique de "plus un" (+1).
On a besoin d`une feuille de papier sur laquelle on dessine un tablier de 5 cases sur 5 cases et d`un crayon.
Le but du jeu : celui qui ecrit le nombre 5 perd la partie.
Au depart les 25 cases sont vides.
On choisit le joueur qui ecrit un nombre en premier.
Ensuite on alterne les tours.
A son tour le joueur doit inscrire un nombre sur une case vide.
Toutefois il y a une regle qui s`impose pour inscrire un nombre.
Le nombre a inscrire sur une case (i,j) i pour la ligne et j pour la colonne doit etre TOUJOURS ETRE egal a la valeur maximale inscrite sur la colonne et la ligne de la case (i,j) plus 1 (+1).
Exemple :
Si le joueur veut inscrire un nombre sur la colonne 1 et la ligne 3 il doit chercher la valeur maximale des nombres deja inscrits sur la colonne 1 et la ligne 3 et leur rajouter 1. Si la valeur maimale est par exemple 2 il doit ecrire 3 dans l`intersection de la colonne 1 et la ligne 3.
Le joueur ne peut pas passer son tour.
Le premier a ecrire le nombre 5 perd la partie.
Pluzin expose ici est la version standard 5x5.
Le jeu peut se jouer sur un tablier nxn et le nombre maximal ou un des joueurs perd est egal a n.
Pour 7x7 ce serait 7 au lieu de 5.
Mes questions :
Y a-t-il une strategie gagnante pour les 2 joueurs?
Que pensez-vous de la complexite du jeu?
Merci a toute reponse.
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 05 Fév 2013, 01:12
C`est evident que les 25 cases sont initialisees a zero au depart du jeu.
Un joueur ne peut ecrire que le nombre 1.
Apres, tout depend de la strategie de chacun des joueurs.
Le joueur peut soit ecrire 2 si la ligne et la colonne de la case visee contient deja 1 soit ecrire 1 dans une case ou la ligne et la colonne sont encore "vierges".
Bref, le jeu presente une multitude de choix.
Le jeu est facilement programmable.
Il est presqu`impossible de battre l`ordinateur si le programme est parfait.
Une impression apres quelques jeux serait souhaitable.
Merci.
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 06 Fév 2013, 17:39
Toujours pas de feeback?
Ce Pluzin finira par devenir Moinzin.
Au depart, j`avais envisage de denommer mon jeu Pluzinzin.
Ensuite vu que le jeu quoiqu`un peu brule-neurones est en fait maitrisable.
Un jeu apero a jouer dans un bar du genre jouons et celui qui perd paie une tournee.
Facile a mettre en place.
Une feuille de papier, on trace le tableau et chacun des joueurs sort son stylo.
Le tour est joue.
La partie peut commencer.
Ps : Attention, c`est un jeu bourre d`astuces.
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 06 Fév 2013, 20:42
Qui veut jouer a Pluzin?
Joueur 1 : Pluzin
Joueur 2 : ?
On fait la convention suivante :
Les colonnes A,B,C,D,E
Les lignes 1,2,3,4,5
Le tableau (les nombres separes par un tiret)
Mon premier coup : B2
0-0-0-0-0
0-1-0-0-0
0-0-0-0-0
0-0-0-0-0
0-0-0-0-0
A vous?
Un volontaire?
Un seul.
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 06 Fév 2013, 23:05
Pluzin a écrit:Qui veut jouer a Pluzin?
Joueur 1 : Pluzin
Joueur 2 : ?
On fait la convention suivante :
Les colonnes A,B,C,D,E
Les lignes 1,2,3,4,5
Le tableau (les nombres separes par un tiret)
Mon premier coup : B2
0-0-0-0-0
0-1-0-0-0
0-0-0-0-0
0-0-0-0-0
0-0-0-0-0
A vous?
Un volontaire?
Un seul.
Allez Fatal Error, un ti effort!
On joue!
Cela prendrait moins de 30 minutes.
Si je perds, je te paierais une biere.
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 07 Fév 2013, 19:43
Personne n`a essaye ce jeu pourtant si simple (d`apparence evidemment)?
I`m very sad :cry: :cry: :cry:
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 08 Fév 2013, 22:47
Aucune intervention jusqu`a present.
Ce jeu n`interessera que moi en fin de compte.
Je changerai les regles pour le jouer en solitaire.
Merci quand meme pour ce "silence assourdissant" (cette phrase n`est pas de moi je le precise, me souvient plus qui a dit ca).
Je ferme donc.
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 12 Fév 2013, 16:37
Bonjour,
Si tu veux j'ai développé ton jeu en mode 1 vs 1 et 1 vs Ordi (en version random).
Si tu souhaites les sources pour développer l'IA n'hésite pas à me le signaler !
-
Pluzin
- Membre Naturel
- Messages: 48
- Enregistré le: 04 Fév 2013, 22:17
-
par Pluzin » 22 Fév 2013, 01:04
ampholyte a écrit:Bonjour,
Si tu veux j'ai développé ton jeu en mode 1 vs 1 et 1 vs Ordi (en version random).
Si tu souhaites les sources pour développer l'IA n'hésite pas à me le signaler !
Merci.
Je suis revenu juste pour avoir le code.
Si tu peux envoyer la sauce vas-y!
J`ai change significativement les regles du jeu.
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 25 Fév 2013, 15:06
Désolé pour l'attente, j'ai oublié de revenir sur ce topic.
- Code: Tout sélectionner
#include
#include
#include
#include
int maxLineCol(int **mat, int size, int line, int col) {
int max = 0;
int i;
for (i = 0; i max) {
max = mat[line][i];
}
}
for (i = 0; i max) {
max = mat[i][col];
}
}
return max;
}
void afficherPlateau(int **mat, int size) {
int i, j;
for (i = 0; i 0\n");
}
}
sizeMem = size*size;
/* Initialisation du plateau*/
if ((mat = malloc(size*sizeof(int *))) == NULL) {
fprintf(stderr, "Erreur allocation plateau\n");
return EXIT_FAILURE;
}
for (i = 0; i = size || col >= size) {
printf("Cellule inexistante, choisir une cellule correct\n");
continue;
}
if (mat[line][col] != 0) {
printf("Cellule indisponible, recommencer le choix\n");
ok = 0;
} else {
ok = 1;
}
}
ok = 0;
/* On cherche le maximum entre ligne et colonne */
max = maxLineCol(mat, size, line, col);
/* On ajoute 1 a ce max */
mat[line][col] = max + 1;
afficherPlateau(mat, size);
if (mat[line][col] == size) {
printf("Vous avez perdu !\n");
win = 1;
}
}
} else { /* mode 1 vs ordi */
printf("version beta\n\n");
while (!win) {
while (!ok) {
printf("\nChoisir numero ligne : ");
scanf("%d", &line);
videbuffer();
printf("Choisir numero colonne : ");
scanf("%d", &col);
videbuffer();
if (line >= size || col >= size) {
printf("Cellule inexistante, choisir une cellule correct\n");
continue;
}
if (mat[line][col] != 0) {
printf("Cellule indisponible, recommencer le choix\n");
ok = 0;
} else {
ok = 1;
}
}
ok = 0;
max = maxLineCol(mat, size, line, col);
mat[line][col] = max + 1;
afficherPlateau(mat, size);
if (mat[line][col] == size) {
printf("Vous avez perdu !\n");
win = 1;
break;
}
/* Gestion de l'IA */
sprintf(buffer, "%d_%d", line, col);
swap(mem, sizeMem, buffer);
sizeMem--;
/* On retire le dernier char * du tableau */
if ((ptr = realloc(mem, sizeMem*sizeof(char*))) == NULL) {
fprintf(stderr, "Erreur reallocation Mem");
return EXIT_FAILURE;
} else {
mem = ptr;
}
/* On prend un index aleatoire dans le tableau restant */
randIdx = rand()%sizeMem;
buffer = strdup(mem[randIdx]);
/* On extrait la ligne et la colonne */
lineIA = atoi(strtok(buffer,"_"));
colIA = atoi(strtok(NULL, "_"));
max = maxLineCol(mat, size, lineIA, colIA);
mat[lineIA][colIA] = max + 1;
afficherPlateau(mat, size);
if (mat[lineIA][colIA] == size) {
printf("Vous avez gagne !\n");
win = 1;
break;
}
swap(mem, sizeMem, buffer);
sizeMem--;
if ((ptr = realloc(mem, sizeMem*sizeof(char*))) == NULL) {
fprintf(stderr, "Erreur reallocation Mem");
return EXIT_FAILURE;
} else {
mem = ptr;
}
}
}
/* liberation memoire*/
for (i = 0; i < size; i++) {
free(mat);
}
free(mat);
for (i = 0; i < sizeMem; i++) {
free(mem);
}
free(mem);
free(buffer);
return EXIT_SUCCESS;
}
Si tu as des questions sur le code n'hésite pas ! Je n'ai pas cherché à optimiser le code ou à travailler plus en profondeur sur l'IA mais tu as une bonne base si tu souhaites poursuivre ^^.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités