Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1216 connectés 

  FORUM HardWare.fr
  Programmation

  Pascal : faire un timer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pascal : faire un timer

n°114538
bartus
^_^
Posté le 19-03-2002 à 23:36:03  profilanswer
 

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]

mood
Publicité
Posté le 19-03-2002 à 23:36:03  profilanswer
 

n°114545
[SDF]Poire
Vive Grumly
Posté le 19-03-2002 à 23:40:56  profilanswer
 

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:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°114610
AlainTech
Pas trouvé? Cherche encore!
Posté le 20-03-2002 à 00:41:32  profilanswer
 

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? :??:


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
n°114628
Buitoni
Posté le 20-03-2002 à 03:24:15  profilanswer
 

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 ;-)


---------------
Vendredi c'est Buitoni
n°114638
[SDF]Poire
Vive Grumly
Posté le 20-03-2002 à 07:04:04  profilanswer
 

AlainTech a écrit a écrit :

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? :??:  




Oui... mais le problème C que ça va bouclé en permanence pendant la durée de la boucle (Je C ça veut rien dire) et donc le temps de la boucle tu seras à 100% des ressources procs (si 5s de temps 5s à 100%) et pendant le temps de l' explosion de la bombe tu dois avoir un traitement parallelle (déplacement du perso,....) Donc le mieux je pense et de mettre en place des sprites ou utiliser un thread si C possible...


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°115022
Buitoni
Posté le 20-03-2002 à 15:46:31  profilanswer
 

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!


---------------
Vendredi c'est Buitoni
n°115053
jawad
Posté le 20-03-2002 à 16:20:46  profilanswer
 

Buitoni a écrit a écrit :

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!  




comment il fais pour calculer le deplacement du perso si ta boucle monopolise tout durent 5s? :gun:


---------------
Master [:viiz] c'est moi
n°115056
jawad
Posté le 20-03-2002 à 16:23:21  profilanswer
 

bartus au fais ton bomberman minteresse tu pourais me le filler;)


---------------
Master [:viiz] c'est moi
n°115126
Buitoni
Posté le 20-03-2002 à 17:26:08  profilanswer
 

jawad a écrit a écrit :

 
comment il fais pour calculer le deplacement du perso si ta boucle monopolise tout durent 5s? :gun:  




 
Je t'ai dis de gerer les touches dans la boucle...
 
 :hello:


---------------
Vendredi c'est Buitoni
n°115177
[SDF]Poire
Vive Grumly
Posté le 20-03-2002 à 18:29:48  profilanswer
 

Buitoni a écrit a écrit :

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!  




Oups... bien vue ;)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
mood
Publicité
Posté le 20-03-2002 à 18:29:48  profilanswer
 

n°116871
bartus
^_^
Posté le 24-03-2002 à 17:21:05  profilanswer
 

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:

n°116937
taureau
Posté le 24-03-2002 à 20:18:19  profilanswer
 

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;

n°116942
taureau
Posté le 24-03-2002 à 20:36:05  profilanswer
 

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

n°117164
bartus
^_^
Posté le 25-03-2002 à 14:34:00  profilanswer
 

Ok merci, je vais essayer ça.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Pascal : faire un timer

 

Sujets relatifs
[Pascal + openGL] Comment on fait ?[Pascal/Delphi] déclarer des nouvelles variables dans un while
Receptionner des donnees en pascal[Pascal] Client/Seveur sous Linux.....
68hc11 timer et interruptionProgrammation d'un Compilateur Pascal en C... AU SECOURS !!!
passer du langage c à pascal[Pascal] Prob connexion avec socket..........
je cherche un interpreteur pcode pour compiler un prog pascal..Question idiote de débutant en pascal
Plus de sujets relatifs à : Pascal : faire un timer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR