Pascal : faire un timer - Programmation
Marsh Posté le 19-03-2002 à 23:40:56
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...
Marsh Posté le 20-03-2002 à 00:41:32
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?
Marsh Posté le 20-03-2002 à 03:24:15
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 ;-)
Marsh Posté le 20-03-2002 à 07:04:04
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...
Marsh Posté le 20-03-2002 à 15:46:31
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!
Marsh Posté le 20-03-2002 à 16:20:46
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?
Marsh Posté le 20-03-2002 à 16:23:21
bartus au fais ton bomberman minteresse tu pourais me le filler
Marsh Posté le 20-03-2002 à 17:26:08
jawad a écrit a écrit : comment il fais pour calculer le deplacement du perso si ta boucle monopolise tout durent 5s? |
Je t'ai dis de gerer les touches dans la boucle...
Marsh Posté le 20-03-2002 à 18:29:48
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
Marsh Posté le 24-03-2002 à 17:21:05
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
A+ et encore merci d'avance pour vos réponses
Marsh Posté le 24-03-2002 à 20:18:19
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;
Marsh Posté le 24-03-2002 à 20:36:05
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
Marsh Posté le 19-03-2002 à 23:36:03
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 .....
Merci d'avance. Bye.
[jfdsdjhfuetppo]--Message édité par bartus--[/jfdsdjhfuetppo]