tap tap +

Bonjour !

Bon j’ai fait une version un peu améliorée de taptap, et j’en profite pour poster mon premier “jeu” :slight_smile:
je suis preneur de vos retours sur la façon de faire le menu en rajoutant cette boucle interne dans le jeu … je m’y prends bien ?

merci !

Salut, je n’ai pas vu où tu avais posté ton jeu pour te faire des retours :wink:

c’est moins pratique :slight_smile:
il est lĂ  :


(la création automatique du topic a raté, je ne sais pas pourquoi).
mais bon une fois l’enthousiasme redescendu, c’est juste une version en couleur et à trois briques de taptap, à peine un dlc :smiley:

Wouai mais c’est bien, tu as réussi à faire ce que tu voulais, objectif atteint :wink:

héhé, c’est sympa merci !
prochaines Ă©tapes :

  • mettre du son (je n’y arrive toujours pas, peut-ĂŞtre parce que mes fichiers wav n’ont pas le bon format ?),
  • faire une vraie sauvegarde du high score,
  • une amie me dit que ce serait mieux que les cubes qui descendent gardent leur couleur,

mais pour l’instant je suis sur attrape-oeuf. Typiquement, c’est un jeu où les oeufs pourraient être programmés en tant qu’ “objets” non ?

Metttre du son => honnêtement évite le Wav. La réponse officielle était de les utiliser mais vraiment c’est consommateur en ressources, utilise plutôt la génération de sons.

Une vrai sauvegarde: Regarde dans Sauvegarde
Tu as aussi mon Pacman, la course UFO-Race, etc… où le score est sauvegardé (dans mon Pacman, j’ai juste modifié pour mon usage les procédures créés par Aurélien, je les ais trouvé faciles à utiliser mais si tu as un problème, demandes).

Ton amie a raison pour bien comprendre l’animation, il faut que le cube qui descende garde sa couleur. Tu dois donc soit utiliser un tableau avec les informations de tes cubes, soit mieux, avoir une classe pour ton cube qui descend avec son x, son y et sa couleur comme propriétés.

Enfin, oui, les oeufs pourraient être clairement programmés en tant qu’objets.
De toutes façons, tu peux les utiliser déjà en tant que structures comme pour la plupart des éléments à suivre. Ca permet de s’organiser. La programmation objet est une évolution ou tu rajoutes la façon de gérer les objets. Si tu es à l’aise la dessus, vas-y directement, c’est une façon plus structurée et plus moderne. Si tu n’es pas l’aise, commence par prendre de l’assurance dans tes programmes en utilisant des structures et quand tu te sentiras à l’aise, essaye de reprendre tes programmes pour les refaire en programmation orientée objets.

ok super merci ! programmer en classe, c’est comme programmer en objet, ou “objet” c’est plus poussé ?
et qu’entends-tu par structure ? juste de bien séparé entrée/logique/affichage, puis les différents éléments à l’intérieur, ou c’est autre chose ? Je ne suis pas encore très avancé comme tu le vois …

Une structure, c’est une variable composée de plusieurs parties.

Définition d’une structure

Une structure étant un regroupement d’objets, la première chose à réaliser est la description de celle-ci (techniquement, sa définition ), c’est-à-dire préciser de quel(s) objet(s) cette dernière va se composer.

La syntaxe de toute définition est la suivante.

struct Ă©tiquette
{
    /* Objet(s) composant(s) la structure. */
};

Prenons un exemple concret : vous souhaitez demander à l’utilisateur deux mesures de temps sous la forme heure(s):minute(s):seconde(s).milliseconde(s) et lui donner la différence entre les deux en secondes. Vous pourriez utiliser six variables pour stocker ce que vous fournit l’utilisateur, toutefois cela reste assez lourd. À la place, nous pourrions représenter chaque mesure à l’aide d’une structure composée de trois objets : un pour les heures, un pour les minutes et un pour les secondes.

struct temps {
    unsigned heures;
    unsigned minutes;
    double secondes;
};

Comme vous le voyez, nous avons donné un nom (plus précisément, une étiquette ) à notre structure : « temps ». Les règles à respecter sont les mêmes que pour les noms de variable et de fonction.

Pour le reste, la composition de la structure est décrite à l’aide d’une suite de déclarations de variables. Ces différentes déclarations constituent les membres ou champs de la structure. Notez bien qu’il s’agit de déclarations et non de définitions, l’utilisation d’initialisations est donc exclue.

Enfin, notez la présence d’un point-virgule obligatoire à la fin de la définition de la structure.

Une structure ne peut pas comporter plus de cent vingt-sept membres.

Définition d’une variable de type structure

Une fois notre structure décrite, il ne nous reste plus qu’à créer une variable de ce type. Pour ce faire, la syntaxe est la suivante.

struct Ă©tiquette identificateur;

La méthode est donc la même que pour définir n’importe quelle variable, si ce n’est que le type de la variable est précisé à l’aide du mot-clé struct et de l’étiquette de la structure. Avec notre exemple de la structure temps , cela donne ceci.

struct temps {
    unsigned heures;
    unsigned minutes;
    double secondes;
};


int main(void)
{
    struct temps t;

    return 0;
}

Initialisation

Comme pour n’importe quelle autre variable, il est possible d’initialiser une variable de type structure dès sa définition. Toutefois, à l’inverse des autres, l’initialisation s’effectue à l’aide d’une liste fournissant une valeur pour un ou plusieurs membres de la structure.

Initialisation séquentielle

L’initialisation séquentielle permet de spécifier une valeur pour un ou plusieurs membres de la structure en suivant l’ordre de la définition. Ainsi, l’exemple ci-dessous initialise le membre heures à 1, minutes à 45 et secondes à 30.560.

struct temps t = { 1, 45, 30.560 };

Initialisation sélective

L’initialisation séquentielle n’est toutefois pas toujours pratique, surtout si les champs que vous souhaitez initialiser sont par exemple au milieu d’une grande structure. Pour éviter ce problème, il est possible de recourir à une initialisation sélective en spécifiant explicitement le ou les champs à initialiser. L’exemple ci-dessous est identique au premier si ce n’est qu’il recourt à une initialisation sélective.

struct temps t = { .secondes = 30.560, .minutes =  45, .heures = 1 };

Notez qu’il n’est plus nécessaire de suivre l’ordre de la définition dans ce cas.

Il est parfaitement possible de mélanger les initialisations séquentielles et sélectives. Dans un tel cas, l’initialisation séquentielle reprend au dernier membre désigné par une initialisation sélective. Partant, le code suivant initialise le membre heures à 1 et le membre secondes à 30.560 .

struct temps t = { 1, .secondes = 30.560 };

Alors que le code ci-dessous initialise le membre minutes Ă  45 et le membre secondes Ă  30.560 .

struct temps t = { .minutes = 45, 30.560 };

Dans le cas où vous n’initialisez pas tous les membres de la structure, les autres seront initialisés à zéro ou, s’il s’agit de pointeurs, seront des pointeurs nuls.

#include <stdio.h>

struct temps {
    unsigned heures;
    unsigned minutes;
    double secondes;
};


int main(void)
{
    struct temps t = { 1 };

    printf("%d, %d, %f\n", t.heures, t.minutes, t.secondes);
    return 0;
}

RĂ©sultat

1, 0, 0.000000

Accès à un membre

L’accès à un membre d’une structure se réalise à l’aide de la variable de type structure et de l’opérateur . suivi du nom du champ visé.

variable.membre

Cette syntaxe peut être utilisée aussi bien pour obtenir la valeur d’un champ que pour en modifier le contenu. L’exemple suivant effectue donc la même action que l’initialisation présentée précédemment.

t.heures = 1;
t.minutes = 45;
t.secondes = 30.560;

Notion d’objet
L’idée fondamentale de la programmation orientée objet est que l’on considère des objets, à
savoir une association de données et de fonctions qui les concernent.
Les fonctions sont appelées les méthodes de l’objet, les données ses attributs.
Exemple.- On veut manipuler des points du plan. On considérera chaque point comme un objet.
Un point sera tout naturellement défini par deux coordonnées, donc deux données.
Les méthodes que l’on peut vouloir à propos d’un point sont, par exemple, de l’initialiser, de le déplacer et de l’afficher.
L’initialiser peut consister à lui donner des coordonnées dans un repère donné.
Le déplacer consiste à modifier ses coordonnées . L’afficher est soit l’afficher à l’écran, soit faire afficher les valeurs de ses coordonnées.

Notion de classe

La notion de classe est la généralisation de la notion de type pour une donnée : c’est le type
d’un objet. Bien entendu si les objets d’un même type ont des données différentes, par contre les
méthodes sont communes.
Exemple.- Pour la manipulation des objets points définis précédents, on peut considérer la classe
des points ayant les trois méthodes d’initialisation, de déplacement et d’affichage.

Bon, donc là c’est un peu subtile mais en plus en C++ tu peux avoir des fonctions dans les structures…
Donc, les structures et les classes sont presque pareils, mais il existe de nombreuses différences.
La différence majeure est que la classe offre la flexibilité de combiner des données et des méthodes et fournit la réutilisabilité appelée héritage alors que la Structure devrait normalement être utilisée pour regrouper des données. La seule différence, est la visibilité des données membres.
Par défaut, dans une structure, les membres sont publics alors que dans un classe elle est privée sauf si on la déclare publique.

Bon j’espère que tu n’as pas mal à la tête, ça fait beaucoup de notions et j’espère ne pas avoir dit de bétises mais Steph ou un autre théoricien / informaticien corrigera / complétera si besoin.

Salut les jeunes :slight_smile:

J’avais pourtant pris la peine d’expliquer tout ça ici.

Mais bon…

oui tout à fait, mais c’est beaucoup à ingérer d’un coup pour moi, donc ça me permet de recouper et d’intégrer peu à peu ! en tout cas vous êtes top !

Je comprends très bien que la chose n’est pas aisée au premier abord. Un déclic doit se faire, et tout va devenir limpide ensuite. Par contre, attention à bien maîtriser le vocabulaire, sinon tu risques de mélanger les notions. Et quand je lis ce post, malheureusement, il y’a beaucoup de confusions.

C’est pour cette raison que j’avais esquissé le paysage de la programmation orientée objet. Néanmoins, l’arbre cache la forêt. Il y’a encore beaucoup de choses à découvrir sur le sujet. Mais un certain nombre de prérequis sont à intégrer avant d’aller plus loin.

Comme te l’a suggéré @jicehel, commence par bien maîtriser les struct en C. Les objets arriveront plus naturellement ensuite. Chaque chose en son temps :wink:

2 Likes