|
Dernière réponse | |
---|---|
Sujet : Pascal : faire un timer | |
bartus | Ok merci, je vais essayer ça. |
Aperçu |
---|
Vue Rapide de la discussion |
---|
bartus | Ok merci, je vais essayer ça. |
taureau | pour la culture générale ...
version en ligne du livre "programmation des jeux d'arcade en C" de diana gruber (en version originale) http://www.makegames.com/sidescroller/ meme si le bouquin date (1994) c'est la référence pour les jeux 2d à défilement et c'est très facile d'adapter cela en pascal |
taureau | le plus propre serait que tu gères tout cela au sein de la boucle principale de ton jeu.
tu ne dois absolument pas bloquer ton jeu pour attendre l'explosion, il suffit simplement que tu maintiennes un compteur qui tu incrémentes à chaque tick (chaque itération de la boucle principale) et lorsque la valeur critique est atteinte tu fais passer l'état de ton lutin bombe à "explosion", l'état "explosion" pouvant elle même durer un certain temps au bout du quel ton lutin passe à l'état "disparition", ce n'est pas trop compliqué. la boucle principale de ton jeu devrait etre du style while pas_fin do begin tester_clavier; action_joueur; actions_autres_lutins; comptage_score_et_infos; dessin_decor; dessin_autres_lutins; dessin_joueur; dessin_score_et_infos; end; |
bartus | Merci de vos réponses.
Je m'en suis inspiré et g aboutis a la solution suivante : je vous ai mis en gras certains instructions afin de rendre le texte plus lisible PROCEDURE BOMBE(posx,posy:integer); var he,min,sec,cent,counter1,counter2:word; ch:char; posrobx,posroby:integer; begin setcolor(4); setfillstyle(interleavefill,red); { dessine le corps du C4 en rouge } bar(posx+30,posy+15,posx+40,posy+40); { dessine la meche en marron } setfillstyle(interleavefill,brown); bar(posx+34,posy+15,posx+36,posy+5); gettime(he,min,sec,cent); counter1:=sec+(min*60)+(he*3600); while counter2<=(counter1+3) do begin repeat until keypressed; ch:=littouche; { Test quelle touche a ?t? pr?ss?e } { Deplacement Droit } if ch='d' then begin { Dessine le robot tout en noir afin de l effacer} dessine_robot(posrobx,posroby,0,0,0); { Dessine le robot avec les nouvelles coordonn?es } posrobx:=posrobx+10; end; { Deplacement Gauche } if ch='q' then begin dessine_robot(posrobx,posroby,0,0,0); posrobx:=posrobx-10; end; { Deplacement Haut } if ch='z' then begin dessine_robot(posrobx,posroby,0,0,0); posroby:=posroby-10; end; { Deplacement Bas } if ch='s' then begin dessine_robot(posrobx,posroby,0,0,0); posroby:=posroby+10; end; gettime(he,min,sec,cent); counter2:=sec+(min*60)+(he*3600); end; { Fin des Proc?dures } Le problème est que j'obtiens la même chose qu'avec l'instruction delay, à savoir que pendant les 3 secondes le programme s'arrete et cela bloque les autres fonctions, le bonhomme ne peut donc pas se déplacer. Je pense que le problème vient du fait que la boucle est exécutée trop rapidement :??: mais à vrai dire je ne sais pas trop :sarcastic: A+ et encore merci d'avance pour vos réponses :jap: |
[SDF]Poire |
|
Buitoni |
|
jawad | bartus au fais ton bomberman minteresse tu pourais me le filler;) |
jawad |
|
Buitoni | Le thread n'existe pas en programmation DOS... Et tu peux te permettre 100% de CPU, vu que... Tu as aucun autre soft qui tourne sur la machine! |
[SDF]Poire |
|
Buitoni | Mmh... Pour moi t'as pas le choix, a toi de te gérer ta propre boucle de message perso genre...
while SecondsBetween(time1,now)<5 do begin case key of .... end; end; ou un brol comme ca, ca fait longtemps que j'ai plus touché au pascal pur et dur ;-) |
AlainTech | Dis, Poire, dans ce cas-ci, une boucle dans laquelle il dessine son bonhomme et qui teste une valeur "time" (contrairement à la petite routine Qbasic de Pilou2001), ça me parraît indiqué.
Qu'en penses-tu? :??: |
[SDF]Poire | Des Threads ? Des timers ?
Je parle pour Delphi... donc ce n'est peut être pas bon pour ton cas.... Sinon pour les intéruptions C chaud (expérience en C/C++ donc je pense que idem pour Pascal) en + WinNT/2000/XP va pas trop aimer je pense.... et les nouveaux compilo ne l'accepte po... (je parle interruption du style int86x ou truc du genre en C...) Sinon doit y avoir moyen avec interruption/traitement de messages..... Enfin plein de possibilités quoi... :hello: |
bartus | Salut, afin que vous compreniez bien ma question autant vous expliquer précisément mon problème.
Je suis en train de faire un "bomberman" sur pascal mais je me heurte à un problème, pour l'explosion d'une bombe il faut attendre un moment mais à ma connaissance seule la fonction DELAY permet d'attendre un nombre déternimé de secondes or cette commande bloque toutes les autres pendant son exécution ce qui fait que mon bonhomme après avoir posé sa bombe ne peut pas bouger pendant que le décompte avant l'explosion se fasse, et donc il meurt.. le pauvre :( Voila, g cherché sur plusieurs sites mais g peur qu'il faille utiliser les interruptions et ça ben ..... :D Merci d'avance. Bye. [jfdsdjhfuetppo]--Message édité par bartus--[/jfdsdjhfuetppo] |