Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal

Tout Blanc tout noir

2 participants

Aller en bas

Tout Blanc tout noir Empty Tout Blanc tout noir

Message  amelie Sam 21 Nov 2009 - 16:28

Bonjour à tous,

J'ai commencé cette année l'informatique (le langage C) et dans l'ensemble sava mais j'ai un programme que je dois faire et je bloque.

Il s'agit du jeu du tout noir, tout Blanc
Support : une grille à m lignes et n collones avec des cases pouvant prendre deux couleurs ( noir ou blanc).
Au départ toutes les cases sont noires. En retournant une case noir, le joueur en change sa couleur ainsi que celle des 4 voisines ( nord, sud, est, ouest)
But : le but est de rendre la grille toute blanche.

Projet : Construire une telle zone de jeu, ou l'utilisateur qui clique sur une case en change la couleur ainsi que celle des voisines.

Je pensez faire ce programme à base d'un graphique.




#include <stdio.h>
#include "graphsimple.h"

Je pense qu'ensuite il faut mettre tout le graphique en noir en utilisant RectanglePlein
Puis faire avec les coordonnées
Mias après le me perd avec des boucles et des tableau pour faire des cases ce qui me fait planter tout mon programme


Merci à ceux qui pourront m('aider
C'est très important pour moi de réussir ce programme

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Sam 21 Nov 2009 - 20:37

amelie a écrit:Il s'agit du jeu du tout noir, tout Blanc
Support : une grille à m lignes et n colonnes avec des cases pouvant prendre deux couleurs ( noir ou blanc).
Au départ toutes les cases sont noires. En retournant une case noir, le joueur en change sa couleur ainsi que celle des 4 voisines ( nord, sud, est, ouest)
But : le but est de rendre la grille toute blanche.

Projet : Construire une telle zone de jeu, ou l'utilisateur qui clique sur une case en change la couleur ainsi que celle des voisines.

Je pensez faire ce programme à base d'un graphique.
Avant de le lancer dans le graphisme, qui est une chose compliquée et non portable, je ferais le jeu en mode texte. Il est même possible de le faire en mode 'conversationnel", c'est à dire en mode standard (printf() ...), sans placement direct à l'écran ni effacement.

Il suffit d'afficher le nouveau terrain de jeu après chaque modification. C'est pas très joli, mais ça permet de tester "l'intelligence" du programme sans perdre de temps.

Il faut bien déterminer quels sont les évènements qui agissent sur ton système, et réagir en conséquence par la modification adéquate du tableau. Le tableau est très certainement un tableau à 2 dimensions.
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  amelie Sam 21 Nov 2009 - 21:06

Bonjour,

Merci de votre réponse

En fait le prof nous a dit de le faire plustot en graphique qu'en texte

C'est pour ca que je suis partie sur un graphique

Avez vous une idée de comment je peux faire avec un graphe ?


Merci

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Sam 21 Nov 2009 - 23:04

amelie a écrit:Bonjour,

Merci de votre réponse

En fait le prof nous a dit de le faire plustot en graphique qu'en texte

C'est pour ca que je suis partie sur un graphique

Avez vous une idée de comment je peux faire avec un graphe ?


Merci
Certes, mais il n'empêche qu'il est plus logique de procéder en 2 étapes :
1 - je valide le principe du jeux (sa logique dans le cadre bien connu : entrée -> traitement -> sortie) :
1.1 - une boucle qui attend des commandes (coordonnée de la pièce à retourner, par eemple)
1.2 - un traitement qui met à jour le tableau selon les critères définis.
1.3 - un affichage simpliste de contrôle qui permet de vérifier le résultat et donc la validité de la logique réalisée en 2.

Une fois que c'est au point,

2 - je réalise une interface E/S en mode graphique qui

2.1 - initialise le mode graphique
Dans une boucle :
2.2 - gère les entrées en mode graphique (clavier ? Souris ?)
2.3 - appelle la fonction de traitement (1.2) qui agit sur le tableau en fonction des coordonnées de la pièce
2.4 - modifie l'affichage en fonction du nouveau contenu du tableau

Comme toujours, avant de coder quoique ce soit, il faut bien définir ce que l'on veut faire (spécifications) , puis trouver les moyens de le réaliser (Analyse)
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  amelie Dim 22 Nov 2009 - 0:17

Merci beaucoup,

Il faudra faire marcher ce jeux avec la souris.

Par contre j'ai une autre question, il va falloir faire avec des procédures mais je n'arrive pas à les faires :

# include <stdio.h>

void remplissage_tableau(int a, int b)
for ( i=0, i>NMAX;i++);
printf(tableau[a][b]=1)

Mais je n'arrive pas à faire les autres procedures.
Désolé l'info commence en ce moment à ce compliquer pour moi.

Merci

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Dim 22 Nov 2009 - 4:58

amelie a écrit:Merci beaucoup,

Il faudra faire marcher ce jeux avec la souris.
Alors il faut utiliser des fonctions non standards qui dépendent de ta plateforme ou d'une bibliothèque tierce. Mais pour le moment, on en est pas là...

Par contre j'ai une autre question, il va falloir faire avec des procédures mais je n'arrive pas à les faire :
Code:
# include <stdio.h>

void remplissage_tableau(int a, int b)
for ( i=0, i>NMAX;i++);
printf(tableau[a][b]=1)
Une 'procédure' en C est une fonction qui ne retourne rien (void).

Il faut bien relire ton cours de C. Pour écrire une fonction, il y a une syntaxe bien précise à respecter.
Code:

<type retourné> <nom de la fonction> (<parametres> ou void)
{
    <instructions>
}
Ensuite pour une boucle for, attention, si tu mets un ';' ça veut dire que la boucle est vide. Là encore, relis ton cours...

Enfin, même si c'est techniquement possible, (le C possède 40.000 manières d'écrire du code illisible) il est préférable de ne pas mélanger les actions :

= sert à affecter
printf() sert à afficher.

ensuite, on ne voit pas bien ce que sont a et b... Si le tableau a 2 dimensions, il faut 2 boucles imbriquées et 2 indices (traditionnellement i et j).

Il semble que tu ne connaisses pas du tout les bases les plus élémentaires de la programmation. Tu as raté les cours ?


Dernière édition par -ed- le Dim 22 Nov 2009 - 14:54, édité 1 fois
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  amelie Dim 22 Nov 2009 - 11:12

Merci, Non je n'ai pas raté les cours puisque que nous n'en n'avons pas, on fait tous sur les TP donc j'ai appris avec un livre de la BU.

Merci pour votre aide

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Dim 22 Nov 2009 - 13:17

amelie a écrit:Non je n'ai pas raté les cours puisque que nous n'en n'avons pas, on fait tous sur les TP donc j'ai appris avec un livre de la BU.
A moins d'avoir beaucoup de temps pour expérimenter soi-même, ou d'être très doué(e) (ok, ça arrive), il me semble difficile d'apprendre la programmation et le langage C tout(e) seul(e). Quelle est donc cette école qui prétend que c'est possible ?
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  amelie Dim 22 Nov 2009 - 14:29

Alors le programme devrait donner :
Code:

# include <stdio.h>
# define NBRELIGNES 5
# define NBRECOLLONES 5

int grille[m][n];
 void initialiser_grille(int tab[m][n]){

for(i=1 ; i > Nbrelignes ; i++)
    for (j=1, j>nbrecollones ; i++)
tab[m][n]=0                                                    je considère 0 cases noires et 1 cases blanches
printf("tab[%d][%d]", m, n);
qu'en pensez vous ? Mais après je ne sais pas. Question


Dernière édition par -ed- le Dim 22 Nov 2009 - 14:53, édité 1 fois (Raison : Penser à utiliser les balises de code...)

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Dim 22 Nov 2009 - 15:11

amelie a écrit:Alors le programme devrait donner :
Code:

# include <stdio.h>
# define NBRELIGNES 5
# define NBRECOLLONES 5

int grille[m][n];
 void initialiser_grille(int tab[m][n]){

for(i=1 ; i > Nbrelignes ; i++)
    for (j=1, j>nbrecollones ; i++)
tab[m][n]=0                                                    je considère 0 cases noires et 1 cases blanches
printf("tab[%d][%d]", m, n);
qu'en pensez vous ? Mais après je ne sais pas. Question
Je pense que tu devrais te relire avant d'écrire des énormités !

D'abord, il faut un 'main()'.
Code:

int main (void)
{
  return 0;
}
Ensuite, dans ce main(), on va définir le tableau correctement (c'est à dire en utilisant les constantes que tu as définies et non des m et n inconnus !)
Code:

#define NB_LIGNES 5
#define NB_COLONNES 5

int main (void)
{
  int grille[NB_LIGNES][NB_COLONNES];
 
  return 0;
}
Ne pas hésiter à compiler chaque étape intermédiaire pour vérifier que la syntaxe est correcte.

Ensuite, on va définir la fonction 'vide' et l'appeler correctement :
Code:

#define NB_LIGNES 5
#define NB_COLONNES 5

void initialiser_grille (int tab[NB_LIGNES][NB_COLONNES])
{
}

int main (void)
{
  int grille[NB_LIGNES][NB_COLONNES];
 
  initialiser_grille (grille);
 
  return 0;
}
Ensuite on va remplir correctement la fonction d'initialisation :
Code:

#define NB_LIGNES 5
#define NB_COLONNES 5

/* je considère 0 cases noires et 1 cases blanches */
#define NOIR 0
#define BLANC 1

void initialiser_grille (int tab[NB_LIGNES][NB_COLONNES])
{
  int i;
  for (i = 0; i < NB_LIGNES; i++)
  {
      int j;
      for (j =0; j < NB_COLONNES; j++)
      {
        tab[i][j] = NOIR;
      }
  }
}

int main (void)
{
  int grille[NB_LIGNES][NB_COLONNES];

  initialiser_grille (grille);

  return 0;
}
Jusque là, rien de spectaculaire. Je conseille donc de créer une fonction d'affichage, qui affiche 'o' pour les noirs et '*' pour les blancs...
Je mets le squelette et l'appel, à toi de compléter le code de la fonction d'affichage :
Code:

#define NB_LIGNES 5
#define NB_COLONNES 5

/* je considère 0 cases noires et 1 cases blanches */
#define NOIR 0
#define BLANC 1

void initialiser_grille (int tab[NB_LIGNES][NB_COLONNES])
{
  int i;
  for (i = 0; i < NB_LIGNES; i++)
  {
      int j;
      for (j =0; j < NB_COLONNES; j++)
      {
        tab[i][j] = NOIR;
      }
  }
}

void afficher_grille (int tab[NB_LIGNES][NB_COLONNES])
{
  /* a completer */
}

int main (void)
{
  int grille[NB_LIGNES][NB_COLONNES];

  initialiser_grille (grille);
  afficher_grille (grille);

  return 0;
}
Pour le moment, ça devrait évidemment donner ceci :
Code:

ooooo
ooooo
ooooo
ooooo
ooooo

Process returned 0 (0x0)  execution time : 0.042 s
Press any key to continue.
L'informatique, c'est pas difficile si on apprend à découper des problèmes compliqués en problèmes simples...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  amelie Dim 22 Nov 2009 - 15:20

je vous remercie énormément de votre aide et du temps que vous y consacré.

Juste une question pour après changé les cases noires en blanches et vices versa je reste bloqué car j'ai essayé avec une valeur temporaire pour échanger les cases mais cela ne donne rien.


Merci

amelie

Messages : 6
Date d'inscription : 21/11/2009

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  -ed- Dim 22 Nov 2009 - 15:33

amelie a écrit:Juste une question pour après changé les cases noires en blanches et vices versa je reste bloqué car j'ai essayé avec une valeur temporaire pour échanger les cases mais cela ne donne rien.
Et je suis censé deviner quel est le code qui ne fonctionne pas ?

Pour faire un 'toggle', il n'y a pas besoin de variable intermédiaire. C'est un bête automate d'état dont les évènements sont

init (déjà fait) et
toggle (inversion).

Les états sont ANY (indeterminé), NOIR et BLANC

Les 3 transitions sont

ANY -> NOIR / INIT
NOIR -> BLANC / TOGGLE
BLANC -> NOIR / TOGGLE

L'algorithme de toggle est donc
Code:

SI etat est NOIR
 etat devient BLANC
SINON, SI etat est BLANC
 etat devient NOIR
SINON
 grave erreur
FIN SI
La fonction de toggle d'un élément devrait donc ressembler à
Code:

void inverser_element (int tab[NB_LIGNES][NB_COLONNES], int i, int j)
{
}
Je te laisse compléter.

Avec
Code:

<...>

int main (void)
{
  int grille[NB_LIGNES][NB_COLONNES];

  initialiser_grille (grille);
  afficher_grille (grille);
  inverser_element (grille, 1, 2);
  afficher_grille (grille);

  return 0;
}
ça donne :
Code:

ooooo
ooooo
ooooo
ooooo
ooooo

ooooo
oo*oo
ooooo
ooooo
ooooo


Process returned 0 (0x0)  execution time : 0.115 s
Press any key to continue.
Je rappelle que les indices vont de 0 à N-1 ...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tout Blanc tout noir Empty Re: Tout Blanc tout noir

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser