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 !

JEU DE PAPILLON SYMPA


Information sur la source

Description

Cliquez pour voir la capture en taille normale
ce jeu montre l'utilisation excessif de CANVAS
Mais bon ce ne qu'un essai!!
Régaler vous!!
BY:OFFLAKE
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Jeu Sympa
    • Executable.rarTélécharger ce fichier [Réservé aux membres club]254 425 octets
    • FIRE.WAVTélécharger ce fichier [Réservé aux membres club]Voir ce fichier5 210 octets
    • Project1.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier378 octets
    • Project1.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 129 octets
    • Project1.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier315 octets
    • Project1.resTélécharger ce fichier [Réservé aux membres club]2 348 octets
    • SHOOT.WAVTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 960 octets
    • Unit1.~ddpTélécharger ce fichier [Réservé aux membres club]51 octets
    • Unit1.~dfmTélécharger ce fichier [Réservé aux membres club]143 724 octets
    • Unit1.~pasTélécharger ce fichier [Réservé aux membres club]8 025 octets
    • Unit1.bakTélécharger ce fichier [Réservé aux membres club]8 025 octets
    • Unit1.dcuTélécharger ce fichier [Réservé aux membres club]11 585 octets
    • Unit1.ddpTélécharger ce fichier [Réservé aux membres club]51 octets
    • Unit1.dfmTélécharger ce fichier [Réservé aux membres club]143 871 octets
    • Unit1.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier7 253 octets
    • Unit2.~ddpTélécharger ce fichier [Réservé aux membres club]51 octets
    • Unit2.~dfmTélécharger ce fichier [Réservé aux membres club]739 octets
    • Unit2.~pasTélécharger ce fichier [Réservé aux membres club]1 082 octets
    • Unit2.bakTélécharger ce fichier [Réservé aux membres club]1 082 octets
    • Unit2.dcuTélécharger ce fichier [Réservé aux membres club]4 511 octets
    • Unit2.ddpTélécharger ce fichier [Réservé aux membres club]51 octets
    • Unit2.dfmTélécharger ce fichier [Réservé aux membres club]741 octets
    • Unit2.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 023 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Bacterius le 05/10/2008 20:44:04

Pas mal Offlake, l'effet est réussi pour moi, même si il doit y avoir moyen d'améliorer la vitesse.
Bonne idée d'utiliser BitBlt, car c'est une manière très rapide de copier des blocs de couleur.

Il y a certaines choses qui me chiffonnent néanmoins :

"//stop and then start the game if it is running
  //or just show help window"

Ces commentaires ne viennent pas de toi je présume ... mais tu as dû t'en inspirer pour résoudre un problème. Passons ...

"Application.Terminate"

Mauvaise idée ... toujours utiliser Close, parce que Application.Terminate est l'équivalent d'une fermeture forcée de Windows. Close n'est pas appelé, certains composants créés dynamiquements ne sont pas libérés, bref ...
Utilise plutôt Close.

Tu utilises un Buffer (ce qui est correct), mais en tant que composant TImage.
Pas bon ...
Utilise TBitmap :

Buffer := TBitmap.Create; // Création

Buffer.Free; // Libération

Tu verras ça tournera déjà mieux.

"Form1.Cursor:=crDefault;" dans le bouton Exit (avant Application.Terminate).
Inutile de remettre le curseur à default quand tu quittes l'application, l'utilisateur n'en a pour ainsi dire rien a faire. Et c'est 1 ou 2 millisecondes de perdues ...

"if Not Timer1.enabled then exit;
  CurX:=x-10;
  CurY:=y-10;
  if y>= buffer.Height then Form1.Cursor:=crDefault
  else Form1.Cursor:=crNone;"

Dans le OnMouseMove

C'est à cause de ces quelques lignes que le curseur a des difficultés à bouger.
Arrange tout ça :)

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de offlake le 05/10/2008 23:10:36

dans ce code j'ai suivi une stratégie pendant laquelle j'ai opté pour l'utilisation de bloc!!
Et je vais Améliore ce travaille!!
parce que je suis aussi un Développeur C/C++ !!
BY:OFFLAKE

signaler à un administrateur
Commentaire de Forman le 06/10/2008 13:14:52

Bacterius: tu écris
"[...] Application.Terminate est l'équivalent d'une fermeture forcée de Windows. Close n'est pas appelé, certains composants créés dynamiquements ne sont pas libérés [...]"

Là je ne suis pas d'accord (et de plus je ne comprends pas pourquoi cette idée est autant répandue). Par défaut, la méthode Close(); de TForm est équivalente à la méthode hide();. En effet, à moins de définir l'événement OnClose avec Action:=caFree (la valeur par défaut étant caHide, qui se contente de cacher la form) c'est donc Hide(); qui est appelée en fin de compte (pas Free ou Destroy).

Il se trouve que lorsqu'on fait Close() sur la fiche principale (c'est à dire si Self=Application.MainForm) la méthode définie dans Forms.pas appelle tout simplement Application.Terminate. La preuve, un copier-coller de Delphi 7 (Forms.pas, ligne 4608):

procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
    if CloseQuery then
    begin
      if FormStyle = fsMDIChild then
        if biMinimize in BorderIcons then
          CloseAction := caMinimize else
          CloseAction := caNone
      else
        CloseAction := caHide;
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
    end;
end;

Ca parle de soi-même, non?

Il n'y a donc aucune différence entre MainForm.Close et Application.Terminate... Close ne détruit aucun objet, c'est le paradigme Delphi de hiérarchie des composants qui s'en charge. En effet, si l'Owner de toutes les forms est l'Application (c'est le cas par défaut quand on fait Application.CreateForm) c'est au moment où Application est détruite que tous ses sous-composants vont être eux-même détruits, en transmettant à leurs sous-composants, etc...

signaler à un administrateur
Commentaire de Forman le 06/10/2008 13:17:02

Ah oui, juste pour clore le débat: finalement, il est préférable d'utiliser Application.Terminate plutôt que TForm.Close() car Application.Terminate économise des cycles de processeur, pour exactement le même effet (pas de test pour déterminer s'il s'agit de la fiche principale).

:-)

signaler à un administrateur
Commentaire de cirec le 06/10/2008 14:45:57 administrateur CS

@Forman:
je suis pas d'accord avec toi ... d'ailleurs un simple teste le prouve:

une Form 2 Button
dans l'évènement du premier bouton on utilise "Close" et dans le deuxième "Application.Terminate"

et dans l'évènement OnClose de la Form ajouter:
"ShowMessage('Adieu');" par Ex.


procedure TForm1.btn_CloseClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.btn_TerminateClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShowMessage('Adieu');
end;


et lors du teste on remarque que si on passe par Application.Terminate l'évènement OnClose n'est pas exécuté.

signaler à un administrateur
Commentaire de Forman le 06/10/2008 14:55:06

Salut Cirec,

C'est normal que OnClose ne soit jamais exécuté, vu qu'on ne "close" pas la fiche, on la détruit directement. Mais ça n'a rien à voir avec la libération des resources... A priori, la libération doit intervenir dans OnDestroy (qui lui est effectivement appelé après un Terminate). Mettre la libération des resources dans OnClose est dangereux, car OnClose peut être appelé plusieurs fois (si tu recycles ton code et que tu le mets sur une fiche secondaire, vu que Close est équivalent à Hide par défaut, si tu la montres de nouveau il peut se produire un nouveau Close et tu va libérer plusieurs fois la mémoire -> access violation).

En plus, OnDestroy parait plus logique d'un point de vue sémantique pour libérer des resources, puisque c'est le moment où les resources de la TForm sont effectivement libérées. Et puis il n'est pas nécessaire de libérer quoi que ce soit si les resources crées dynamiquement sont des composants avec la Form comme Owner, Delphi s'en charge.

Je persiste vraiment à dire que Application.Terminate est mieux pour quitter, car ça "colle" mieux au paradigme des boucles de messages.

signaler à un administrateur
Commentaire de Forman le 06/10/2008 15:02:11

Un autre argument en faveur de Application.Terminate: ça peut être appelé depuis une autre fiche, sans avoir à mentionner explicitement la fiche principale (et devoir la mettre dans les uses).

Bien sûr je ne prétends pas qu'il y a unicité des façons de programmer, mais quand même je pense que c'est mieux d'utiliser Terminate. Ton argument du OnClose non appelé je le trouve dangereux, car typiquement OnClose ne doit servir qu'à poser la question à l'utilisateur de savoir s'il veut vraiment quitter (identique à OnCloseQuery) ou à définir un comportement spécifique différent de celui par défaut (par exemple détruire les fiches MDI au lieu de les minimiser). En aucun cas ça ne devrait servir à libérer des resources!

signaler à un administrateur
Commentaire de cantador le 06/10/2008 15:59:41

bonjour,
Application.Terminate ou Close ?
le débat fait rage sur CS..
et en fait, ce n'est pas évident.
Moi-même j'ai écrit un tout petit programme en marge d'une application afin de mettre en place une tache mensuelle.
tout marche, mais habitué aussi à mettre close pour fermer une appli, je me suis aperçu qu'en fait, si je voulais que mon appli exécutant une procédure sur le OnCreate (une fois terminée) se ferme automatiquement
alors le close ne fonctionne pas mais
en revanche Application.Terminate marche !

cantador

signaler à un administrateur
Commentaire de cantador le 06/10/2008 16:13:06

du moins avec close l'application s'arrête mais reste
néanmoins active..

signaler à un administrateur
Commentaire de offlake le 06/10/2008 17:36:40

Jai lhabitude de travaille avec Application.Terminate et peu avec Close

signaler à un administrateur
Commentaire de Bacterius le 06/10/2008 17:40:42

Moi je ne sais pas il me semble que Application.Terminate est assez brutale comme terminaison d'un processus ... Et Close semble plus propre également.
Et puis : il y a une procédure Close dans une fiche ; autant s'en servir !
De toute façon Application.Terminate est appelé en interne lorsque Application.Terminated a la valeur True.

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de Bacterius le 06/10/2008 17:41:21

et quand on fait un Close de la fiche principale :

Close => OnClose => Application.Terminated := True => Application.Terminate

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de Nicolas___ le 06/10/2008 20:18:36

"il y a une procédure Close dans une fiche ; autant s'en servir !", si tu n'écris rien dans ton Close, autant s'en passer !

signaler à un administrateur
Commentaire de Forman le 06/10/2008 22:32:52

Je trouve que le problème exposé par Cantador est représentatif. Close() simule le click sur le bouton de fermeture en haut à droite de la fenêtre. À mon avis il est préférable de le réserver aux commandes de l'utilisateur, du genre si on fait un bouton ou menu "quitter" sur la fiche principale, là il est logique de faire Close().

Mais quand on veut *vraiment* quitter l'application, Terminate est quand même recommandé. Et l'argument "oui, mais le OnClose n'est pas appelé" n'est pas recevable puisqu'il peut y avoir de toute façon des cas où OnClose n'est pas reçu, par exemple lorsque l'application reçoit un message WM_QUIT: même effet que Terminate dans ce cas, et pas de OnClose.

Ceci dit c'est vrai que dans le plupart des cas les 2 solutions vont quand même fonctionner...

signaler à un administrateur
Commentaire de offlake le 06/10/2008 23:04:04

JE SUIS AUSSI UN DEVELOPEUR C/C++

signaler à un administrateur
Commentaire de Forman le 06/10/2008 23:09:42

MOI AUSSI, DES FOIS, LOL

signaler à un administrateur
Commentaire de offlake le 06/10/2008 23:24:54

Je suis entrain de publié mes mini projet fait durant l'année 2008/2007
les derniers sont déjà fait!!
c tune chose bien non?
Pour Bacterius
OFFLAKE

signaler à un administrateur
Commentaire de offlake le 06/10/2008 23:31:21

LOL

signaler à un administrateur
Commentaire de cantador le 07/10/2008 09:52:08

Je suis entrain de publié mes mini projet fait durant l'année 2008/2007

Pas sûr que ça soit une bonne idée OFFLAKE..

Attention à faire du tri de ce que tu proposes(voir si la même chose n'existe pas déjà..)
et ne pas perdre à l'esprit l'intérêt apporté pour l'ensemble de la communauté.

cantador

signaler à un administrateur
Commentaire de yvessimon le 08/10/2008 13:39:09

Bonjour,

Pas très écolo de faire disparaître les papillons.

Mais bon programme.

Salutations

signaler à un administrateur
Commentaire de offlake le 08/10/2008 14:19:03

MERCI YVESSIMON
BY OFFLAKE

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Jeux du type serpent... [ par g0belin ] Ben voila, je souhaiterai faire un jeu comme le serpent du Nokia (principe simple bouffe souris=grandis)mais je ne sais pas comment faire le serpent e boucle thread simple exemple ! [ par fabiin ] Salut !Je cherche un exemple simple d'une boucle threadje n'est trouvé aucun tutorial français a ce sujet sur internet Merci par avance@+Fabs Enregistrer un richedit en TXT simple [ par nirousse ] Toujours pour mon éditeur de texte avec un RichEdit, J'ai remarqué qu'il me l'enregistre en rtf ou je ne sais pas trop quoi.Ce qui fait qu'il me rajou Ptite question toute simple [ par redfaction ] voila je dispose de 2 fichiers sous cette forme : rec1=record num:integer; nom acked array [1..25] of char;end;rec2=record num:inte Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage Debugger et jeux récent! [ par Don0Choa ] Bonjour, voila j'ai voulu installer 2 jeux tres réssent(Mafia et Age OfEmpre qui ne sort que le mois prochain) , mais apres l'installation, lorsque je Conseil pour Moteur 3D [ par dami ] Bonjour a tous .Je développe actuellement un jeux de stratégie 3D temps réel. J'ai décidé d'importer les objects via un loader 3ds que j'ai fais, je l Jeu de strategie avec directdraw [ par sebrs1 ] Tout d'abord, je vais vous expliquer ce que je veux fairec'est tout simple (enfin, simple a comprendre mais pas a faire)je voudrais faire un truc genr Saut, jeux [ par lan0sic ] Bonjour,J'aimerait fair bouger une image, comme si c'etait un type qui saute. (donc l'image doit monter et redecendre). Eseque quelqu'un pourrait m'ai


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.