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

 


Dernière réponse
Sujet : Pascal : faire un timer
bartus Ok merci, je vais essayer ça.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


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

Buitoni

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:

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

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:

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

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...

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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)