Demineur like : des NSButtons créés par programmation ou une autre solution ?

Paisible.frPaisible.fr Membre
14:37 modifié dans API AppKit #1
Bonjour,

Admettons que je veuille réaliser une copie de célèbre démineur !  :-\\

Je vois très bien comment réaliser la chose pour le "moteur" en revanche je saurais beaucoup moins comment m'y prendre pour la partie GUI.

Ce qui me viendrais à  l'esprit ce serais de faire une création dynamique de NSButtons en fonction de la taille de la grille. C'est à  dire créer les boutons par programmation en y association les IBactions, le changement d'image suivant la situation etc...

Mais je me demandais s'il n'y aurais pas quelques choses de plus judicieux pour faire ce genre de choses ...

Et vous, vous feriez comment ?

Réponses

  • NoNo Membre
    14:37 modifié #2
    Une NSMatrix de NSButtonCell serait plus appropriée.
  • Paisible.frPaisible.fr Membre
    14:37 modifié #3
    dans 1220900638:

    Une NSMatrix de NSButtonCell serait plus appropriée.

    Très juste. Mais ça reste fondamentalement peu ou prou la même chose au niveau du principe...
    Même si ça doit simplifier grandement le travail je pense.

    Moi je me demandais si d'autres personne ne serait pas tenté par une approche totalement différente.
    Genre une NSView où on dessine dedans et suivant la position du clic on dessine autre chose pour changer un case du démineur. Ou que sais-je d'autre...
  • schlumschlum Membre
    14:37 modifié #4
    Une simple NSView serait encore plus appropriée  :P

    Un démineur c'est beaucoup de cases... même avec une NSMatrix, c'est pas trop fait pour.
  • olofolof Membre
    14:37 modifié #5
    J'en ai fait un il y a quelques années. Une NSMatrix custom qui contient des NSImageCell custom aussi. Depuis le temps, je ne me souviens plus des détails... Mais si t'as des questions, je peux essayer d'exhumer la chose !

  • Paisible.frPaisible.fr Membre
    14:37 modifié #6
    dans 1220905898:

    J'en ai fait un il y a quelques années. Une NSMatrix custom qui contient des NSImageCell custom aussi. Depuis le temps, je ne me souviens plus des détails... Mais si t'as des questions, je peux essayer d'exhumer la chose !


    Exhume, exhume... çà  m'intéresse et ça servira certainement à  d'autres !
    Merci à  toi d'avance 
  • Paisible.frPaisible.fr Membre
    14:37 modifié #7
    Sinon je pensais à  une autre approche :

    • Une NSView globable representant la grille
    • Une NSView custom repressantant une cellule, que j'instancierais n fois en l'ajoutant à¡ la grille à  la bonne position


    Questions :
    • Est-il possible de recuperer le clic dans la NSView custom pour changer son display ?
    • Que pensez-vous de cette approche ?
  • NoNo Membre
    14:37 modifié #8
    dans 1220901086:

    Une simple NSView serait encore plus appropriée  :P
    Un démineur c'est beaucoup de cases... même avec une NSMatrix, c'est pas trop fait pour.

    Ben si justement.
    NSMatrix a pour but d'éviter de multiples NSControls (donc des NSViews, donc gourmand en ressource), en ne manipulant que des NSCells.
    Le seul inconvénient de NSMatrix est sa "rigidité" puisque l'affichage ne peut se faire que dans une matrice à  colonnes et lignes de taille fixe.
    Pour le démineur ça peut encore aller.
  • NoNo Membre
    14:37 modifié #9
    dans 1220950720:

    Sinon je pensais à  une autre approche :
    • Une NSView globable representant la grille
    • Une NSView custom repressantant une cellule, que j'instancierais n fois en l'ajoutant à¡ la grille à  la bonne position


    Justement, c'est l'écueil que Schlum a montré : le côté gourmand en ressource.
    Si tu veux passer par une custom NSView, les cellules devront être dessinées directement dedans (et non en passant par des NSView intermédiaires), un peu comme pour... NSMatrix !

    dans 1220950720:

    Questions :
    • Est-il possible de recuperer le clic dans la NSView custom pour changer son display ?
    • Que pensez-vous de cette approche ?


    1. oui, bien sûr.
    2. je pense comme Schlum : complexe et gourmand.
  • Paisible.frPaisible.fr Membre
    14:37 modifié #10
    Donc, si j'ai bien compris l'option recommandée c'est une simple et unique NSView et je gére tout dedans :
    - dessin de chaque case
    - clique sur une case (en detectant le clic et sa position)
  • NoNo Membre
    14:37 modifié #11
    dans 1220964470:

    Donc, si j'ai bien compris l'option recommandée c'est une simple et unique NSView et je gére tout dedans :
    - dessin de chaque case
    - clique sur une case (en detectant le clic et sa position)

    Oui...

    Ou d'utiliser une NSMatrix (qui est une NSView) qui va s'occuper à  ta place de dessiner les cases (c'est son boulot, après tout), et cerise sur le gâteau, te permet de récupérer le numéro de la colonne/ligne dans lequel le clic souris a eu lieu.
    Pour le dessin des cellules, tu peux utiliser NSButtonCell avec affichage en icône et en texte.
  • olofolof Membre
    14:37 modifié #12
    dans 1220937037:

    dans 1220905898:

    J'en ai fait un il y a quelques années. Une NSMatrix custom qui contient des NSImageCell custom aussi. Depuis le temps, je ne me souviens plus des détails... Mais si t'as des questions, je peux essayer d'exhumer la chose !


    Exhume, exhume... çà  m'intéresse et ça servira certainement à  d'autres !
    Merci à  toi d'avance 


    C'est exhumé. Mais attention, c'était un de mes premiers projet après les habituels hello world et autres fougères. Donc faudra probablement fermer les yeux sur certaines choses  ;)

    Si y'a des questions, faudra que je m'y replonge !
Connectez-vous ou Inscrivez-vous pour répondre.