Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Puissance 4 (apprentisage du C)
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Puissance 4 (apprentisage du C)

Posté le 29/03/2023 20:24

Bonjour, je cherche actuellement à apprendre le C. Pour ça je me suis lancé dans un petit projet : un puissance 4. Mais depuis quelques jours je bloque. J'ai un sélecteur que je peut changer de couleur avec F1 (pour les tests) et je cherche donc à réaliser le coeur du jeu c'est à dire le placement des pions... Mon programme est en pièce jointe et si quelqu'un pouvait jeter un oeil je lui en serai reconnaissant.
Merci !

P.S : Je pense que le problème vient soit du tableau soit de ma boucle qui parcoure le tableau pour dessiner les pions, mais je n'arrive pas à trouver...
P.P.S : J'utilise Gint même si vous avez dû deviner

P.P.P.S (oui ça fait beaucoup ) : Il y a une erreur bête dans le programme sur la fonction dupdate(); je l'ai écrit dudpate(); mais ça ne résoud pas le problème.

Fichier joint


Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 29/03/2023 20:26 | # | Fichier joint


Et voici mon main.h !
Mon projet du moment : Memen'Casio
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 29/03/2023 23:05 | #


Yo, ton code a l'air clean ou en tous cas c'est ce que mon cerveau un peu fatigué à 23 heures prétend. Peux-tu joindre une copie complète du projet qu'on puisse le compiler et le tester stp ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 30/03/2023 12:38 | #


Comment est ce que je peux joindre tout mon projet ? Un seul fichier est autorisé, non ?
Mon projet du moment : Memen'Casio
Slyvtt En ligne Maître du Puzzle Points: 2410 Défis: 17 Message

Citer : Posté le 30/03/2023 12:47 | #


Tu fais un zip ou une archive que tu joins au message
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 30/03/2023 15:04 | # | Fichier joint


Voici le projet, il est compressé (merci Slyvtt !). En faisant quelques tests je me suis rendu compte de deux choses :
1) Trois pions sont dessinés dans le coin en bas à droite sans raison
2) La touche Shift ne marche pas, pourtant mon code ne diffère pas par rapport aux flèches directionnelles mais elle n'est pas détectée...
Mon projet du moment : Memen'Casio
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 30/03/2023 16:10 | #


Bon j'ai fait quelques test et je crois que c'est pas mal ! Le problème venait bien de la touche Shift, quand je remplace par Exe tout fonctionne presque bien !
Reste encore le problème des trois pions dessinés sans raison et ça sera bien ! EDIT : Problème résolu : j'avais inversé les lignes et les colonnes dans l'initialisation de mon tableau

P.S : Si quelqu'un pourvait m'expliquer pourquoi Shift ne va pas ça serait cool
Mon projet du moment : Memen'Casio
Slyvtt En ligne Maître du Puzzle Points: 2410 Défis: 17 Message

Citer : Posté le 30/03/2023 16:31 | #


Les touches SHIFT et ALPHA sont des modifieurs de touches, il faut jouer avec la fonction getkey_opt

Il faut faire :
key = getkey_opt(GETKEY_DEFAULT & ~GETKEY_MOD_SHIFT).key;


et pour ALPHA
key = getkey_opt(GETKEY_DEFAULT & ~GETKEY_MOD_ALPHA).key;


et pour les deux :
key = getkey_opt(GETKEY_DEFAULT & ~GETKEY_MOD_ALPHA & ~GETKEY_MOD_SHIFT).key;


sinon tes touches SHIFT et ALPHA ne sont pas traitées comme des touches "indépendantes"
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 30/03/2023 16:40 | #


Aaah ok ! Merci beaucoup Slyvtt !
Mon projet du moment : Memen'Casio
Slyvtt En ligne Maître du Puzzle Points: 2410 Défis: 17 Message

Citer : Posté le 30/03/2023 16:42 | #


Ca marche avec Shift du coup maintenant ?
Car j'ai fait de tête, j'ai pas ma machine pour coder pour vérifier.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 30/03/2023 17:03 | #


Oui parfaitement ! Maintenant je passe aux la vérifications de fin de jeu !
Mon projet du moment : Memen'Casio
Slyvtt En ligne Maître du Puzzle Points: 2410 Défis: 17 Message

Citer : Posté le 30/03/2023 17:06 | #


Parfait, continue bien alors.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 13/04/2023 17:01 | # | Fichier joint


Salut ! Je continue mon puissance 4 et je suis tombé sur un nouveau problème : la vérifications des diagonales...

Pour vous expliquer mon système de vérifications des lignes et des colonnes je vais prendre en exemple les lignes mais ça revient au même pour les colonnes (ça facilitera l'explication )

Donc... En fait je ne vérifie que la ligne du pion qui vient d'être posé. Cela m'évite d'avoir à parcourir tous le tableau. J'envoie la position y du pion fraichement posé à ma fonction end_check et je parcours la ligne de la gauche vers la droite.

Comme vous vous en doutez j'ai donc une variable v_end_check que j'incrémente à chaque fois que je croise un pion de la bonne couleur et que je remet à 0 quand je croise soit un vide soit un pion de la mauvaise couleur. Quand v_end_chek == 4 c'est qu'on a un gagnant

Voici donc mon problème : pour la ligne j'utilise la position y du nouveau pion et pour la colonne la position x pour faire mes vérifications. Mais pour les diagonales je ne peux pas ! Si mon pion est en 3;0 sur la grille il faut que j'aille en 0;3 pour la vérification et s'il est en 5;2 il faut que j'aille en 3;4... (ma grille fait 6 cases en longueur sur 4 en hauteur, je la met en pièce jointe)
J'aimerais donc savoir s'il existe une solution... J'avais pensé à tout rentrer à la main, mais je me serais fait bannir à vie de Planet Casio pour motif de code horrible

if(x == 3 && y == 0)
{
     xcheck = 0;
     ycheck = 3;
}

et ça 53 fois

J'espère avoir bien expliqué mon problème...
Voilà voilà... Merci d'avance
Mon projet du moment : Memen'Casio
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message

Citer : Posté le 13/04/2023 17:24 | #


Et tu ne peux pas incrémenter/décrémenter x en même temps que y du pion, ou j'ai mal compris quelque chose ?
EDIT :
En gros faire la même chose que pour les lignes mais en incrémentant/décrémentant x dans la boucle.
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 13/04/2023 17:33 | #


En fait ce que je veux c'est me positionner en bas à gauche de la diagonale pour pouvoir la parcourir sans problème. Mais je ne trouve pas de "formule" pour trouver la case tout en bas d'une diagonale en fonction de la position du pion qui vient d'être posé.
Je pense que ça n'est clair que pour moi ...
Mon projet du moment : Memen'Casio
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message

Citer : Posté le 13/04/2023 17:37 | #


Et bien tu fais x++ et y++ jusqu'à ce que le pion est de la mauvaise couleur, et le bas de la diagonale est donc à (x-1; y-1). Si la diagonale va vers la gauche par contre, c'est x-- et y++, et le bas de la diagonale est donc à (x+1; y-1).
J'espère que j'ai bien compris cette fois
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 13/04/2023 18:01 | #


Donc il faudrait que je fasse une boucle while du type :

xcheck = x; // x est la position x du pion posé
ycheck = y; //y est la position y du pion posé

while(xchek != 0 && ycheck != 4)
{
     xcheck--;
     ycheck++;
}

//La diagonale va du bas gauche vers le haut droit


C'est ça ?
Mon projet du moment : Memen'Casio
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message
Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 13/04/2023 18:12 | #


Sans typo ? Désolé je suis un peu nouveau ...
Merci beaucoup @Mb88 pour ton aide !
Mon projet du moment : Memen'Casio
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message

Citer : Posté le 13/04/2023 19:35 | #


Sans typo = sans faute de frappe : t'avais écrit "xchek" au lieu de "xcheck".

Et alors, ça fonctionne ?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 150 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd