begin process at 2008 07 20 04:30:06
1 213 129 membres
50 nouveaux aujourd'hui
14 166 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR POUR JEU DE CUBES.


Information sur la source

Catégorie :Graphique Classé sous : poo, timage, rotation, asm, cube Niveau : Débutant Date de création : 01/03/2007 Vu / téléchargé: 2 898 / 558

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


Description

Pour faire simple, je dirai que ce sont des cubes 2D qu'on dirait des cubes 3D.
Un peu comme les "photo-cubes", si vous connaissez.

A l'origine, j'ai fait ça pour réaliser un jeu de cubes, pour une petite nièce. Mais ça peut, peut-être, servir à autre chose...
En tout cas, c'est pour cette raison que vous remarquerez 2 types de cubes. Un type virtuel, où les images sont toujours présentées à l'endroit, et un type réel, où les images peuvent se présenter dans n'importe quel sens (y'a qu'à essayer pour comprendre).
Ca peut sembler un peu "louf" de se casser la nénette pour obtenir un comportement qui, somme toute, n'est pas pratique et bcp plus lourd à coder, mais il y a une raison humanitaire à ça :)   Au jour où on peut lire que plus de la moitié des français pensent encore que c'est le soleil qui tourne autour de la Terre, je n'ai pas voulu polluer l'esprit des enfants à qui ce jeu était destiné par une représentation erronée d'un cube tournant dans l'espace... C'est la seule raison de cette loufoquerie.
Le code n'est pas très bien commenté, à mon goût... Mais je n'ai pas réussi à commenter sans petits croquis. De tout façon, c'est de la géométrie basique.

Conclusion

Les cubes tournent par simple clic sur leurs bords. Les cubes "réels" tournent, en plus selon l'axe des Z, par clic dans les coins. Ils sont tous dragables.
A part s'amuser 15 secondes avec ce code, il peut aussi servir aux débutants en POO, puisque j'en suis un.
Et ce débutant vous serait reconnaissant de toutes les remarques qui le pousseraient, un tant soit peu, vers l'élite de ce site.  
(Et y'aura du boulot pour les + courageux...)
:)))
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de Francky23012301 le 01/03/2007 02:45:57

    Alors objectivement : c'est génial. L'effet et le rendu sont bleuffant. Et le tout est fluide.

    Coté code : ben rien à redire c'est du grand art, Monsieur Débiars à du souci à se faire.

    Je trouve que la facon dont tu as pris le problème tres élégante.

    10/10

  • signaler à un administrateur
    Commentaire de Caribensila le 01/03/2007 03:22:10

    :)
    T'es gentil, Francky. Heureux que ça te plaise.
    Merci.
    Mais Monsieur Debiars est, j'espère, entre d'autres, notre maître à tous.
    Et, avec moi, il n'a pas trop de soucis à se faire...

  • signaler à un administrateur
    Commentaire de cantador le 01/03/2007 20:44:29

    J'ai juste testé rapidos le truc..
    ben, c'est très bon et ya du boulot !
    @+

  • signaler à un administrateur
    Commentaire de cirec le 01/03/2007 23:25:52 administrateur CS

    Salut,

    ça a l'air bien tout ça ... avec une approche originale

    juste un truc (je ne sais pas si c'est normal ou non) en mode réel si je clique en bas à droite le cube éffectue une rotation sur lui même d'un quart de tour vers la droite mais en virtuel il ne se passe rien ?

    en tous cas c'est réussit ... bravo

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de Caribensila le 01/03/2007 23:39:46

    Merci les gars.

    @ Cirec
    Pourquoi voudrais-tu faire pivoter une image qui est dans le bon sens?
    C'est la seule raison d'être des cubes virtuels : toujours présenter des images dans le bon sens.

    Tu pensais à quelque chose qui pourrait être utile?..

  • signaler à un administrateur
    Commentaire de cirec le 02/03/2007 02:43:48 administrateur CS

    ah oui je comprend mieux maintenant ...

    j'avais pas remarqué que les images étaient toujours dans le bon sens en mode Réel. Désolé ... ;)

    Effectivement pas besoin, dans ce cas, d'éffectuer une rotation.

    Remarque je l'avais noté "(je ne sais pas si c'est normal ou non)"

  • signaler à un administrateur
    Commentaire de Caribensila le 02/03/2007 03:58:25

    Y'a pas de mal, Cirec.
    Les cubes, on croit tous bien les connaître, mais quand on code pour eux, on se rend vite compte que c'est des pourris.
    ...
    Enfin, c'est ma conviction, now.  ;)




  • signaler à un administrateur
    Commentaire de japee le 02/03/2007 14:06:33 administrateur CS

    Bah, Caribensila : la cubiture* de la sphère... on n'a pas fini d'épiloguer là-dessus !

    * ça fait un peu gros mot...

  • signaler à un administrateur
    Commentaire de Caribensila le 02/03/2007 16:37:19

    Woui, Japee.
    La cubiture? Ce serait pas encore un truc relevant de la bistromatique, ça?

  • signaler à un administrateur
    Commentaire de cirec le 02/03/2007 22:16:59 administrateur CS

    Qui comprend la cubiture acquière la Delphitude

    ... et je n'ai même pas eu à aller sur la grande muraille pour ça!  lol

    @Japee: je constate que les allocutions d'une pseudo tête couronnée t'ont marquées

  • signaler à un administrateur
    Commentaire de Debiars le 04/03/2007 10:43:51

    Effectivement, me voilà en pleine soucitude...
    Je suis déjà en train de me fouiller pour trouver à quelle sauce accomoder ce moteur là.
    Je vois bien un gros cube avec des carrés de toutes les couleurs (6 par exemple) et qu'on ferait tourner par tranche pour essayer de rassembler toutes les couleurs identiques sur la même face...génial, non?

    @Carib : le coup du petit cube en papier, j'ai déjà utilisé également!

  • signaler à un administrateur
    Commentaire de florenth le 04/03/2007 11:13:36

    Je viens de tomber sur ce code et je n'ai qu'une chose à dire: bravo !

    Y'a de l'idée, une très bonne réalisation, et même un peu d'ASM !
    J'ai cependant quelques remarques (après tout, c'est ce que tu voulais):
    - Tu n'es pas obligé de libérer explicitement les TCube que tu crée puisque que spécifie le Owner dans le constructeur. C'est donc la fiche qui libère automatiquement les composants.
    - Tu a pas mal de procédures imbriquées dans une seule, ce serait plus simple à comprendre si elles étaient toutes indépendantes.

    En tout cas, bienvenue dans le fabuleux monde de la POO ! Plein de bugs et nuit blanches en perspectives !! ^^ lol

    Juste un truc:
    "Pour faire simple, je dirai que ce sont des cubes 2D qu'on dirait des cubes 3D."
    Mais non ! C'est de la vraie 3D que tu viens de coder là !
    La troisième dimension, c'est en fait l'art de la représenter en 2D !"(bon, je vous laisse méditer là... encore de la cubiture...)

    ++

  • signaler à un administrateur
    Commentaire de Caribensila le 04/03/2007 15:56:38

    @ Debiars : Génial, le Debiar's Cube!
    Et tu vas commencer par un prototype en papier?  lol

    @ florenth : Merci pour tes remarques.
    Bein oui, c'est pour ça que je poste. Pas pour ma libido...  lol

    -Alors, je mets de l'ordre dans mes idées. Si j'ai bien compris, le Owner (la fiche) fera appel, lors de sa destruction, au destructor de chaque cube et ainsi tous les Bitmap seront libérés en cascade. Donc, pas la peine de faire explicitement appel au destructor quand il y a un Owner. C'est bien ça, Florent?
    Mais n'est-ce pas un bon reflex que de libérer tout ce qu'on crée, même si c'est superflu? Je croyais que c'était un principe en POO. Quelle est la bonne attitude à adopter, finalement?

    -Les procédures imbriquées apportent des avantages au niveau de la portée des variables et permettent le copier-coller d'une seule procédure lors de la conception. Mais c'est vrai que ça ne facilite pas la lecture, et c'est important quand on poste. Je ne le ferai donc plus.

    -La POO, c'est passionnant, c'est vrai! Et je recommande à tous les débutants de s'y mettre le plus tôt possible. Programmer, n'est-ce pas organiser sa pensée pour tenter de mettre le monde réel en phrases binaires? D'où cette intense satisfaction de se sentir approcher la condition divine. Et la POO facilite grandement cela. Il y a un moment où tout s'éclaire comme une révélation, et je souhaite à tous les programmeurs débutants de connaître cette sensation.

    -Minute cubiturique: Pour moi, la vraie programmation 3D n'existe que dans l'info embarquée des machines-outils modernes. Ici, c'est de la pseudo 3D. Et je crois que c'est bien plus compliqué que la vraie 3D.

    re-@ Debiars : N'abandonne surtout pas le cinéma pour les cubes, Jean-Pierre!!!
    ( Les autres comprendront bientôt : Debiars a qq chose sur le feu pour vous ;)

  • signaler à un administrateur
    Commentaire de florenth le 04/03/2007 17:16:55

    @Cari:

    "Pas pour ma libido..." => Peut-être que la prog' a des vertus cachées ... ^^

    Pour l'histoire de libération, tu as deux choix:
    - Soit tu laisses la fiche détruire tes cubes
    - Soit tu met "nil" au constructeur et dans ce cas tu le détruis toi même.
    Les deux sont équivalents dans la plupart des cas, alors autant prendre le plus simple !
    Ca me rappelle un questinnement de Cirec sur une de mes sources: http://www.delphifr.com/code.aspx?ID=32414 (voir commentaires)

    "avantages au niveau de la portée des variables"
    => Tout à fait d'accord avec toi mais gare à ne pas en abuser !!! Ici, c'est délicat à comprendre, surtout que la procédure complète (avec ses sous procédures) a une taille démesurée par rapport aux autres ...
    Mais évidemment, tout est question de relativisme, il ne faut évidemment pas les bannir pour autant.

    "c'est de la pseudo 3D": eh oui, bien plus dur de dessiner en cube en pseudo-3D plutôt qu'en OpenGL... c'est pour cela que j'admire particulièrement ton code. En plus, je n'ai pas eu de scintillements.

    Et je confirme, l'exaltation de joie lors de l'appui sur la touche F9 après avoir passé une heure à coder une série de classes, ça vaut le coup d'être vécu ... (qu'est ce qu'on ferait pas comme pub, hein ? ^^)

  • signaler à un administrateur
    Commentaire de f0xi le 05/03/2007 18:07:21 administrateur CS

    Bah 3D ou 2D c'est la grande question.

    la 3D permet d'obtenir des effets qui demanderais des centaines de lignes de codes en 2D.

    l'avantage de la 3D (DirectX ou OpenGL (de preference)) c'est les performances a l'affichage et toute les fonctions de bases deja disponible, performantes, optimisées etc.

    ce sont deux monde a part et puis le resultat est tellement bien reussi qu'on ne peu rien dire sur cela.
    pas d'erreur de texture, effet 3D reussi, on pourrait juste demander un affichage aleatoire des texture sur les faces des cubes :

    procedure TForm1.Shp_CreerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      Index,StartIndex : Integer;
      UnJpeg : TJPEGImage;
      NomFichier, ImgPath : String;
    begin
      UnCube := TCube.Create(self);
      with UnCube do
      begin
        Virtuel := Rbt_Virtuel.Checked;
        Parent  := Self;
        Taille  := StrToInt(Edt_Taille.Text);
        Vitesse := 50 - Tkb_Vitesse.Position;
        Top     := 30;
        Left    := 270;
        
    UnJpeg := TJPEGImage.Create;
        try
      StartIndex := Random(100);
      AppPath    := ExtractFilePath(ParamStr(0)) + 'cubeengine_images\';
          for Index := 0 to 5 do
      begin
            NomFichier := ImgPath+ 'Ima' + IntToStr((StartIndex + Index) mod 6) + '.jpg';
            if FileExists(NomFichier)then
    begin
              UnJpeg.LoadFromFile(NomFichier);
              ChargerJpg(Index, UnJpeg);
            end;
          end;
        finally
      UnJpeg.Free;
    end;
      end;
    end;

  • signaler à un administrateur
    Commentaire de p314 le 15/03/2007 15:58:49

    10/10 pour la source,

    je me demandais, pour le tableau avec les faces, s'il ne vallais pas mieux utiliser des quaternions, genre  representer le cube en 3D dans la memoire et l'afficher en pseudo-3D, ce qui permetrais de se passer du cube en papier.
    Ca donnerais un tableau pour les 6 faces, avec un vecteur pour la direction de chaque face, et un vecteur pour l'orientation celles-ci.
    Et il suffirais de faire une rotation de chaque vecteur pour tourner le cube, et de trouver le bon vecteur a afficher (par ex. (0,0,1,0)) dans la liste des directions, son homologue servant pour definir l'orientation de la face avec par ex. ses 2 premieres coordonées (x,y,#,#).

    C'est lourd mais ca peux servir a faire évoluer le moteur, pour afficher 3 faces du cube ou autre..
    Finalement je vais le coder pour voir... :)

  • signaler à un administrateur
    Commentaire de Bad Compagny le 14/05/2007 03:33:03

    bravo pour le code source!

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS