celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 2011
-
25 mars 2011 à 11:50
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
29 mars 2011 à 14:34
Bonjour ,
je suis débutante en programmation C et je voudrais programmer un tic tac toe mais je galere un peu .
donc il s'agit de declarer une variable plateau 3X3 dans le main et de l'initialiser en indiquant que less cases sont vides.
=>
int main()
{
int Plateau[3][3]=({},{},{});
puis, il me faut ecrire une fonction AFFICHE qui nous permet d'avoir un plateau du genre
| | | |
| | | |
| | | |
il faut ensuite ecrire une fonction QUELCASE? qui demande au joueur de saisir les coordonnées ( ligne,colonne) de la case , et qui marque la case d'un ( 1 ou 2 suivant le joueur) si la case est vide ... sinon recommencer.
=>
void QuelCoup? ( int Plateau[3][3], int joueur);
{
int x;
int y;
printf ("joueur %d choisissez les coordonnées de votre case \n",joueur);
scandf ("%d,%d",&x,&y);
if ????? et la je sais pas comment exprimer le "si la case est prise alors recommencer sinon marquer...
ensuite il faut ecrire une fonction LIGNE , COLONNE ET DIAGONALE qui permettent de savoir si la ligne colonne ou diagonale sont entierement remplies par le meme joueur
puis la fonction " GAGNE!! et puis une fonction qui indique si toutes les cases sont remplies...
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 15:44
Pour l'instant "fin" ne sert à rien. Il sera utilisé plus tard, dans les autres étapes. On mettra "fin = 1" quand on voudra arrêter le programme. Par exemple, si l'on voit qu'un joueur a gagné la partie.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 25 mars 2011 à 12:29
Je te propose de le faire par étape.
Tout d'abord poste ton code, que je vois où tu en es.
Ensuite, je te corrigerais l'existant, et on verra comment faire la suite.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 25 mars 2011 à 16:25
Important: N'essaie pas de coder tout d'un coup. La bonne manière de faire, quelque soit ton niveau, c'est de faire les choses petit à petit. D'abord tu fais:
1) Un programme qui ne fait rien, à part afficher à l'écran: Tic Tac Toe.
2) Tu modifies le programme pour qu'il demande à chacun des joueurs de jouer, et demande une valeur. Pour l'instant, on n'exploitera pas la valeur.
3) Lorsque ça fonctionne, on créer le tableau de Tic Tac Toe (3x3), et on initialise ses cases à 0.
4) Ensuite on passe aux choses sérieuses: On écrit la fonction Affiche.
5) Écriture de la fonction quelCoup()
6) Écriture de la fonction qui teste si on a un gagnant.
Envoi moi le code de chacun des points mentionnés en commençant par le premier. Tu verras que tout sera bien plus facile si tu procèdes comme cela. Je te corrigerais sur chacune des étapes.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 10:29
L'opérateur modulo (le '%'), sert à garder le résultat de la division de a par b.
Ex:
Si 12 / 7 => 1 et il reste 5. Donc 12 % 7 => 5
De même 12 / 2 => 6 et il reste 0. Donc 12 % 6 => 0
#include <stdio.h>
#include <stdlib.h>
int main()
{
int joueur = 0;
int x;
int y;
int fin = 0;
while (!fin)
{
printf("Joueur %d saissisez les coordonnées de la case: ", (joueur % 2) + 1);
scanf("%d,%d", &x, &y);
printf("Joueur %d a saisi: %d,%d\n\n", (joueur % 2) + 1, x, y);
++joueur;
/* fin = 1, selon une condition qui ne nous intéresse pas encore à cette étape */
}
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Vous n’avez pas trouvé la réponse que vous recherchez ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 17:05
C'est bien, par d'erreur.
Toutefois, il serait plus judicieux de faire une fonction: "vider" qui permet de mettre toutes les cases du tableaux à 0.
En effet, si l'on veut refaire une partie, il n'y aura qu'a appeler cette fonction (juste appelée avant chaque début de partie).
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 20111 25 mars 2011 à 16:04
merci, mais deja est ce que le debut est juste ?
et je ne sais pas comment coder la case choisie...
if (x,y)!={} ( je sais pas comment ecrire cette ligne , mon erreur doit etre honteuse ... je veux dire par là que la case saisie n'est pas vide)
else
printf("la case %d,%d n'est pas valide, recommencez!",&x,&y);
celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 20111 27 mars 2011 à 23:55
ok merci .
1)Affiche TIC TAC TOE.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Tic Tac Toe\n");
return 0;
}
2) Modification
#include <stdio.h>
#include <stdlib.h>
int main()
{
int joueur;
int x;
int y;
for(joueur=1;joueur<3;joueur++)
printf("joueur %d saissisez les coordonnées de la case\n",joueur);
scanf("%d,%d",&x,&y);
return 0;
}
Le deuxieme algorithme je vois pas comment faire pour quil demande au premier joueur les coordonnées et après au 2em...
celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 20111 28 mars 2011 à 15:39
d'accord je comprends un peu ... mais j'ai quelques questions...
la variable "fin" concrètement correspond à quoi ?
j'aurais penser au debut faire un truc du genre " tant que les 9cases ne sont pas remplies faire "printf etc ... ""
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 17:43
La fonction affiche est très bien. Puisque tu n'as que 3x3 cases, tu peux l'écrire comme tu l'as fait. On pourrait faire une double boucle, mais ça serait plus long à écrire.
Tu confonds déclaration et affectation, il faut réviser les bases !
int Plateau[0][0]=0;
int Plateau[0][1]=0;
int Plateau[0][2]=0;
(etc...)
Pour vider le plateau, rien ne t'empêche de faire une double boucle, comme tu l'as fait pour l'étape 3.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 18:01
Pourquoi redéclares-tu Plateau si tu l'as déjà en argument ?
Tu as l'air d'éprouver des difficultés avec les concepts suivants:
- Portée d'une variable
- Passage en argument
- Masquage d'argument
Je t'invite à faire une petite recherche Google sur ces principes. Ce sont des bases importantes, et les approfondir t'aiderait énormément. Une fois que tu auras bien saisi ces principes, je pense que la plupart de tes problèmes se seront envolés.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 18:39
Le masquage d'argument c'est juste le fait d'avoir une variable qui cache un argument.
Exemple:
void maFonction(int a)
{
int a = 2; /* Cette variable "a" cache l'argument aussi appelé "a" */
printf("%d\n", a); // Affichera 2 au lieu de 5
}
maFonction(5); // Affichera 2 au lieu de 5
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 20111 28 mars 2011 à 19:32
ah d'accord ...
mais je suis peut etre bête mais je vois pas d'autre manière d'écrire la fonction VIDER...
et pourtant ça fait 30ans que je cherche ...
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 20:06
La fonction "vider", telle que tu l'as corrigé, est correcte.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 29 mars 2011 à 10:10
Tu mélanges un peu trop de chose. La fonction quelcoup() , ne fait QUE demander des coordonnées pour UN joueur et marquer une case, si elle n'est pas occupée.
La logique est donc:
1- Demander coordonnées
2- Si case est vide, alors mettre le numéro du joueur
3- Si case non vide ou si coordonnées invalide, alors revenir à l'étape 1
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question