Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de threads (https://www.clubdelphi.com/foros/showthread.php?t=58441)

ivanloco 21-07-2008 01:13:20

Manejo de threads
 
Hola: queria hacer una consulta. Estoy implementando el juego del Tetris y tengo un problema. Tengo que hacer que una ficha descienda cada tantos segundos mientras la puedo mover de derecha a izquierda.
Para que la ficha descienda uso el siguiente codigo:

Código:

    crearFicha;

    while fichaActual.abajo(tablero) do
    begin
      dibujar;
      sleep(100);
    end;

Esto significa que construyo la ficha y mientras la pueda hacer descender la dibujo y la muevo cada un sleep de 100. Pero el problema es que dentro de este while no la puedo mover ni a izquierda ni a derecha.
Queria saber si Delphi soporta threads o si hay alguna otra alternativa para hacer lo que quiero.
Gracias.

donald shimoda 21-07-2008 01:40:24

Cita:

Empezado por ivanloco (Mensaje 301766)
Hola: queria hacer una consulta. Estoy implementando el juego del Tetris y tengo un problema. Tengo que hacer que una ficha descienda cada tantos segundos mientras la puedo mover de derecha a izquierda.
Para que la ficha descienda uso el siguiente codigo:

Código:

    crearFicha;

    while fichaActual.abajo(tablero) do
    begin
      dibujar;
      sleep(100);
    end;

Esto significa que construyo la ficha y mientras la pueda hacer descender la dibujo y la muevo cada un sleep de 100. Pero el problema es que dentro de este while no la puedo mover ni a izquierda ni a derecha.
Queria saber si Delphi soporta threads o si hay alguna otra alternativa para hacer lo que quiero.
Gracias.

Si claro soporta threads, crear el thread y en execute en un evento syncronizado mueves la ficha y luego duermes 100 ms, de esa maner ano frenas la tarea principal que es la que te permite mover la ficha

donald shimoda 21-07-2008 01:41:20

Cita:

Empezado por ivanloco (Mensaje 301766)
Hola: queria hacer una consulta. Estoy implementando el juego del Tetris y tengo un problema. Tengo que hacer que una ficha descienda cada tantos segundos mientras la puedo mover de derecha a izquierda.
Para que la ficha descienda uso el siguiente codigo:

Código:

    crearFicha;

    while fichaActual.abajo(tablero) do
    begin
      dibujar;
      sleep(100);
    end;

Esto significa que construyo la ficha y mientras la pueda hacer descender la dibujo y la muevo cada un sleep de 100. Pero el problema es que dentro de este while no la puedo mover ni a izquierda ni a derecha.
Queria saber si Delphi soporta threads o si hay alguna otra alternativa para hacer lo que quiero.
Gracias.

Ahora que lo pienso es mejor con un timer, no mas
que el timer se ejecute cada 100 ms y ahi bajas la ficha, para que threads

ivanloco 21-07-2008 01:56:01

gracias donald por la respuesta, pero por favor podrias decirme como se usa un timer, o escribir un pseudocodigo de como tendria que ser mi codigo usando un timer. Con este timer no necesito mas el while?

donald shimoda 21-07-2008 02:11:00

Cita:

Empezado por ivanloco (Mensaje 301772)
gracias donald por la respuesta, pero por favor podrias decirme como se usa un timer, o escribir un pseudocodigo de como tendria que ser mi codigo usando un timer. Con este timer no necesito mas el while?

Agregas un timer a tu formulario principal y le seteas el intervalo (en este caso 100)

le das doble click, te genera un evento ontimer

en ese evento

Código Delphi [-]
if fichaActual.abajo(tablero) then
begin
  dibujar;
end;

Eso es todo. Bueno, te queda hacer todo el resto del programa. ;)

Me olvidaba, eso contando que dibujar no demore mucho, porque si tarda mucho va a hacer que tu formulario se vea inestable.

Como el tetris baja mas rapido cuando avanza la dificultad te recomiendo empezar con otro valor distinto de 100 en el interval del timer e ir bajandolo cada vez que sube el nivel. Una idea no mas. ;)

ivanloco 21-07-2008 05:31:26

Muchisimas gracias! La solucion del timer anduvo de maravillas.

donald shimoda 21-07-2008 06:20:29

Cita:

Empezado por ivanloco (Mensaje 301781)
Muchisimas gracias! La solucion del timer anduvo de maravillas.

Por nada , me alegro mucho. ;)

Saludos.


La franja horaria es GMT +2. Ahora son las 15:48:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi