spo dur trouille. Faut juste réfléchir à un process qui permette de faire marcher un puissance4.
Tu dois décomposer en instructions simples ce qu'il faut faire en excluant toute prise d'initiative.
Par exemple placer un pion dans le jeu. Le pion tombe le plus bas possible, on est d'accord?
Ben l'algo est comme suit
Déjà, est ce que je peux placer un pion sur cette colonne? Comment savoir? Ben s'il y a un pion sur la case la plus haute, c'est que la colonne est complete. C'est quelque chose que tu fais sans y penser. Disons que toi tu vois la colonne complete mais un pc ne voit rien. En revanche un pc peut vérifier des choses si tu lui dis précisément ou regarder et quoi regarder.
Donc tu sais que tu peux glisser un pion là. Mais où dans la colonne va t il atterrir? Ben juste au dessus du pion le plus haut. Ok, mais il est où le pion le plus haut? Ben je prend la case la plus haute, je regarde si elle est vide. Si elle l'est, je regarde la case en dessous et je vérifie qu'elle est vide et je passe à la suivante. Je continue jusqu'à trouver un pion ou bien jusqu'à me retrouver tout en bas de la colonne (oui, c'est con un PC, faut penser à tous les cas de figure sinon il est perdu).
Maintenant je sais où est le pion le plus haut. Ben je dois placer mon pion juste au dessus.
en terme d'algo, ça se formalise comme ça
Faut juste savoir que le pc voit la grille comme un tableau à 2 dimensions d'entier. 0 pas de jeton, 1 c'est un jeton rouge, 2 c'est un jeton jaune.
Soit col, la colonne choisie par le joueur et couleur la couleur du joueur
si (grille[col][6] == 0) // je vérifie le haut de la grille donc la case aux coordonnées (col;6), 6 étant le haut de la grille. Si c'est égal à 0 alors c'est vide et donc la colonne n'est pas complete
alors{ // ça signifie que toute les instructions ci dessous sont compris dans la condition. Si la condition n'est pas remplie, on ne fera pas tout ce qu'il y a ci dessous.
j = 6; // C'est un compteur pour savoir sur quelle ligne nous nous trouvons. Ben ouais, il faut que le pc compte dans sa tête parce qu'il ne sait accéder à une case que via ses coordonnées contrairement à un humain qui peut comprendre la notion de case du dessous.
tant que (j>0 ET grille[col][j] == 0) faire j--; //attention, c'est le moment tendu
. Il y a une action répétitive à effectuer. Tant que j>0 autrement dit qu'on n'a pas atteint le bas de la grille et que la case qu'on est en train de regarder est vide, on regarde la case d'en dessous en décrémentant j qui représente le numéro de la ligne courante. Le pc va donc faire ceci: est ce que je ne suis pas encore arrivé ligne 0? Est ce que la case (col;j) est vide? si oui alors je recommence avec la case du dessous sinon je m'arrête et j est donc égal soit à 0 soit à la ligne du pion le plus haut.
grille[col][j+1]=couleur; //je sais que la case(col;j) est occupé par un pion ou bien que c'est le bas de la grille donc j'informe la machine que sur la case du dessus (col,j+1), je met un pion de la couleur du joueur.
exit(ok);}// fin du bloc d'instruction conditionnel
sinon // si la case la plus haute de la grille est occupée par un pion, la colonne est déjà complété, on ne peut pas jouer ici
exit(choisi une autre colonne);Et donc je m’aperçois que sur l'algo donné plus tot, j'avais inversé pratiquement tous les contrôles
.