Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Realizar este sencillo ejercicio en Delphi. (https://www.clubdelphi.com/foros/showthread.php?t=74257)

elpupas7 08-06-2011 09:14:41

Realizar este sencillo ejercicio en Delphi.
 
LA PRUEBA:
Pantalla de 640x480.
Un objeto dado (32x32) en pantalla que rebota en todas las paredes.
Ver cuantos objetos hacen falta para que el fps caiga a 10.
O bien ver cuantos soporta a 50.
O para los engines ultrarápidos ver cuantos fps con 20.000 objetos.

Resumen de pruebas:

Stand-Alone (.exe)
Fps=50.

P4 3 GHz, 2 GB Ram, Geforce 6600

1. mmf2 std : 920
2. mmf2 hwa: 20.000 (51 fps)
3. gamemaker: 2.500
4. scirra: 7.800
--------------------------------------------------------------------------
IMAC i7 2.93 Quad, 4 GB Ram, Ati hd5750 (vmware fusion - WinXP)

1. mmf2 std: 1.500
2. mmf2 hwa: 20.000 (100 fps)
3. gamemaker: 1.900 (curioso el bajo rendimiento)
4. scirra: 21.300 (con breves caidas a 15 fps cada 10 segundos)
---------------------------------------------------------------------------
Falta por compararlo con los pesos pesados, vease C/C++, Delphi ...
-----------------------
Podeis ver los ejemplos que tenemos hasta ahora en el siguiente link:
Buscar en Taringa: " el engine mas rapido".

Ñuño Martínez 08-06-2011 10:25:28

¿Y el problema es...?

Neftali [Germán.Estévez] 08-06-2011 10:27:15

PREGUNTA:
¿Y no será más fácil poner el link?

Bienvenido a los foros.

¿Está hecho en Delphi?
¿Código fuente?
¿?¿?

Ñuño Martínez 08-06-2011 10:31:07

Cita:

Empezado por Neftali (Mensaje 402963)
PREGUNTA:
¿Y no será más fácil poner el link?

Creo recordar que los novatos no pueden poner enlaces. Lo que no sé es si además identifica URLs y las anula o algo, que puede ser.

elpupas7 08-06-2011 11:00:02

Cita:

Empezado por Neftali (Mensaje 402963)
PREGUNTA:
¿Y no será más fácil poner el link?

Bienvenido a los foros.

¿Está hecho en Delphi?
¿Código fuente?
¿?¿?

-------------
No me deja poner links.
De momento está hecho en Multimedia Fusion, Gamemaker y Scirra.
El tema es hacerlo en Delphi, C/C++ ...
-------------
De todos modos, gracias por interesarte.
Saludos.

elpupas7 08-06-2011 11:06:58

Para el moderador:
----------
Se trata de hacer el mismo ejercicio en todos los engines/lenguajes mas habituales.
-------
No es una prueba definitiva pero es sencilla y es clarificadora.
-------
En este site se pide realizarlo en los lenguajes que aquí se manejan.
--------
No sé si está posteado en la sección que le corresponde ...
en todo caso puedes moverllo al mas adecuado.
---------
Gracias a tí tambien por interesarte.

En taringa: buscar el único post de elpupas7

Ñuño Martínez 08-06-2011 11:35:29

Cita:

Empezado por elpupas7 (Mensaje 402966)
Para el moderador:
----------
Se trata de hacer el mismo ejercicio en todos los engines/lenguajes mas habituales.
-------
No es una prueba definitiva pero es sencilla y es clarificadora.
-------
En este site se pide realizarlo en los lenguajes que aquí se manejan.
--------
No sé si está posteado en la sección que le corresponde ...
en todo caso puedes moverllo al mas adecuado.
---------
Gracias a tí tambien por interesarte.

Cita:

Are you talking to me?

Ahora en serio, te lo diré directamente.

¿Pretendes que te hagamos el programa nosotros? Porque si es eso, dudo que alguien lo haga. Este foro es para resolver dudas, no para hacer el trabajo de nadie, ni tareas del colegio, ni exámenes, ni nada de eso.

Si hay algo que no entiendes, busca, y si no encuentras una buena aclaración entonces expón tu duda siguiendo las recomendaciones de la Guía de estilo.

elpupas7 08-06-2011 12:29:29

Bien, último intento.
-------------------
Se trata de hacer un ejercicio común para los lenguages mas populares.
Se ha escogido este por ser sencillo y a la vez practico.
-----
Se hará público el pgma con el nombre del programador.
-----
Ni se me ocurre programar esto en todos los engines. Lo mas sencillo es pedirlo a quienes dominen el lenguaje. Por mi parte ya lo he hecho con 3 motores.
----
Ni es trabajo escolar ni nada por el estilo.
Esto surgió en un foro, en concreto en el "mmfzone" dedicado al multimedia fusion, del que soy uno de los administradores y me pareció una buena idea universalizar este propósito.
Se ha hecho también en Java y en Flash.
No hay en toda la web un ejercicio de este estilo y es hora de que exista alguno.
---
Por último si a alguien le parece bien echar una mano con esto pues adelante. Y si no, pues tampoco pasa nada.
---
Saludos.

Casimiro Noteví 08-06-2011 12:48:46

¿Y por qué no has explicado todo eso antes?, es que parece que gusta ocultar información y eso sólo crea desconfianza.
Debías haber empezado explicando en qué consiste el proyecto, para qué, cómo se está haciendo, la web donde se muestran los programas en diferentes lenguajes, resultados de las pruebas, un lugar donde descargar esos programas para que la gente los pruebes, ver el código fuente de todos ellos para tener claro de qué va y cómo hacerlo, etc. resumiendo: información. Y no lo que has hecho, ocultación.

Puedes hacerlo, todavía estamos a tiempo :)

Neftali [Germán.Estévez] 08-06-2011 13:08:54

1 Archivos Adjunto(s)
OK. Intentaré añadir algo de luz al tema.

Se trata de un post existente en Taringa aqui; Dado que hay que registrarse para verlo, aprovechemos que yo ya lo estoy, y os adjunto la versión pdf, para que podáis leerlo.

Por si a alguien le interesa participar.

Neftali [Germán.Estévez] 08-06-2011 13:13:39

Sería necesario, por no decir imprecindible tener acceso a los códigos fuentes de las aplicaciones.
Si no todo esto pierde su gracia. :(

elpupas7 08-06-2011 13:16:16

1. Estan posteadas las distintas pruebas en Taringa. A parte de en nuestro foro, claro está. El sistema no me deja poner links. Esto ya estaba dicho.
Poner el Taringa en el buscador "elpupas7" y lo podreis ver.
2. Las descargas en el mismo sitio.
3. El código fuente pertenece al programador, no se pide ni se ofrece.
4. El ejercicio a realizar está explicado. Es sumamente sencillo.
Resumiendo.
a. No hay ocultación por ningún sitio.
b. No falta información.

Ñuño Martínez 08-06-2011 13:32:54

Cita:

Empezado por elpupas7 (Mensaje 402979)
Resumiendo.
a. No hay ocultación por ningún sitio.
b. No falta información.

Discrepo: no has dado información "vital" en tus tres primeros mensajes, por lo que no sabíamos qué estás buscando o cuál es tu problema. Ahora que ya está aclarado ese punto, pues hay menos ocultación.

Referente a lo del código fuente, como bien dices es propiedad del autor del mismo y se hará lo que este quiera, pero me parece bastante inútil no publicarlo en este caso puesto que el rendimiento depende mucho de la implementación (por ejemplo, ¿usa listas simples o enlazadas para almacenar y recorrer los objetos? ¿Los objetos son bitmaps, vectoriales, poligonales...? ¿Para evitar parpadeos usa doble-buffer, triple-buffer, paginación, copia, dirty-rectangles... o da igual si parpadea o no?). Si lo que se busca es comparar el rendimiento de dos motores/bibliotecas/compiladores diferentes (o de sus distintas combinaciones) es imprescindible saber qué algoritmos utiliza (nótese el plural de "algoritmos"). Un cambio en una sóla línea puede afectar dramáticamente al rendimiento, así como las muchas opciones de compilación existentes: manejo de pilas, marcos de memoria, cachés, microprocesador de destino, etc. Y ojo, que un algoritmo/opción que funcione "bien" con un motor puede funcionar "mal" en otro, y viceversa.

Voy a aportar mi granito de arena con un ejemplo que colgué en esta página de la Wiki de Allegro.pas, para mostrar el uso de "timers". A partir de él es fácil crear un programa que haga lo que pides usando Allegro.pas.
Código Delphi [-]
(* An example to keep speed on different computers. *)
PROGRAM timers2;
 
USES
  allegro, sysutils;
 
TYPE
(* Defines the ball "sprite". *)
  TSprite = RECORD
  (* Center. *)
    X, Y,
  (* How it is. *)
    Color,
  (* Movement. *)
    SpeedX, SpeedY: INTEGER;
  END;
 
 
 
VAR
(* Count how many ticks are in queue. *)
   CntTicks: INTEGER;
(* Some color "constants". *)
   BackgroundColor, ShadowColor: INTEGER;
(* Ball values. *)
   Ball: ARRAY [1..10] OF TSprite;
(* DoubleBuffer. *)
   BackBuffer: AL_BITMAPptr;
   CntBall: INTEGER;
 
 
 
(* Helper for errors.  Ensures a clean exit. *)
  PROCEDURE RaiseError (Message: STRING);
  BEGIN
    al_message (Message);
    al_exit;
  END;
 
 
 
(* Interruption procedure: adds one tick to the ticks queue. *)
  PROCEDURE IntTicks; CDECL;
  BEGIN
    INC (CntTicks);
  END;
 
 
 
(* Program starts here. *)
BEGIN
{ Initialization. }
  IF NOT al_init THEN
  BEGIN
    WriteLn ('Error initializing Allegro!');
    EXIT;
  END;
  IF NOT al_set_gfx_mode (AL_GFX_SAFE, 640, 480, 0, 0) THEN
  BEGIN
    RaiseError ('Can''t initialize graphics mode');
    EXIT;
  END;
  BackBuffer := al_create_bitmap (AL_SCREEN_W, AL_SCREEN_H);
  IF BackBuffer = NIL THEN
  BEGIN
    RaiseError ('Can''t create double buffer!');
    EXIT;
  END;
  ShadowColor := al_makecol (0, 0, 0);
  BackgroundColor := al_makecol (255, 255, 255);
  al_install_keyboard;
{ Installs the timer interrupt.  Executes it 50 times each second. }
  al_install_timer;
  IF NOT al_install_int_ex (@IntTicks,  AL_BPS_TO_TIMER (50)) THEN
  BEGIN
    RaiseError ('Can''t intall timer interruption');
    EXIT;
  END;
{ Initialize balls. }
  Randomize;
  FOR CntBall := 1 TO 10 DO
  BEGIN
    Ball[CntBall].X := Random (AL_SCREEN_W - 50) + 25;
    Ball[CntBall].Y := Random (AL_SCREEN_H - 50) + 25;
    Ball[CntBall].Color := al_makecol (Random (64) * 3, Random (64) * 3, Random (64) * 3);
    REPEAT
      Ball[CntBall].SpeedX := Random (8) - 4;
      Ball[CntBall].SpeedY := Random (8) - 4;
    { To prevent static balls. }
    UNTIL (Ball[CntBall].SpeedX <> 0) AND (Ball[CntBall].SpeedY <> 0);
   END;
{ Main loop. }
  CntTicks := 1; { One tick in queue. }
  REPEAT
  { If there are ticks in the queue, updates the animation. }
    WHILE CntTicks > 0 DO
    BEGIN
      FOR CntBall := 1 TO 10 DO
      BEGIN
      { Animates the ball. }
        INC (Ball[CntBall].X, Ball[CntBall].SpeedX);
        INC (Ball[CntBall].Y, Ball[CntBall].SpeedY);
      { Collision. }
        IF ((Ball[CntBall].X < 25) AND (Ball[CntBall].SpeedX < 0))
        OR ((Ball[CntBall].X > AL_SCREEN_W - 25) AND (Ball[CntBall].SpeedX > 0))
        THEN
          Ball[CntBall].SpeedX := -Ball[CntBall].SpeedX;
        IF ((Ball[CntBall].Y < 25) AND (Ball[CntBall].SpeedY < 0))
        OR ((Ball[CntBall].Y > AL_SCREEN_H - 25) AND (Ball[CntBall].SpeedY > 0))
        THEN
          Ball[CntBall].SpeedY := -Ball[CntBall].SpeedY;
      END;
    { One tick less. }
      DEC (CntTicks);
    { If there are more than 25 frames in queue then may be the computer is too much slow! }
      IF CntTicks > 25 THEN
      BEGIN
        RaiseError ('Your computer is too much slow and I can''t keep the rithm!');
        EXIT;
      END;
    END;
  { Updates screen. }
    al_clear_to_color (BackBuffer, BackgroundColor);
    FOR CntBall := 1 TO 10 DO
      al_circlefill (BackBuffer, Ball[CntBall].X + 2, Ball[CntBall].Y + 2, 25, ShadowColor);
    FOR CntBall := 1 TO 10 DO
      al_circlefill (BackBuffer, Ball[CntBall].X, Ball[CntBall].Y, 25, Ball[CntBall].Color);
    al_vsync; { To prevent "waveing". }
    al_blit (BackBuffer, al_screen, 0, 0, 0, 0, AL_SCREEN_W, AL_SCREEN_H);
  { Until user press a key. }
  UNTIL al_keypressed;
{ End. }
  al_exit;
END.
Ojo que usa "timers" para mantener la velocidad de la animación lo más constante que se pueda, por lo que habría que quitarlo para obtener la máxima velocidad, aparte de añadir más interacción para que el usuario "añada" o "elimine" bolas para comprobar cómo afecta al rendimiento, poner un contador de bolas, etc. Además, usa un doble-buffer simple que puede mejorarse muchísimo (paginación y/o triple-buffer o simplemente añadir dirty-rectangles aceleraría mucho la cosa) y seguro que pueden optimizarse otro montón y medio de cosas. Ahora no voy a hacerlo porque estoy en el curro, y luego... Bueno, hay un par de bugs en Allegro.pas que requieren mi atención "urgentísimamente", así que por ahora no haré mucho más. :p

Casimiro Noteví 08-06-2011 14:18:09

Sí ha habido ocultación de información.
Si no hay código fuente de los demás entonces esto no vale nada.
Sí puedes poner links, 'disimulándola', ejemplo: ttp://www.loquesea.com/

elpupas7 06-03-2013 19:20:38

Solicito de algún Moderador que elimine este hilo.

Gracias.

ecfisa 06-03-2013 19:33:56

Hola elpupas7.

No veo nada en este hilo que amerite ser eliminado, ¿ Serías tan amable de indicarnos el motivo de tu pedido ?

Saludos.

Neftali [Germán.Estévez] 06-03-2013 20:21:03

Cita:

Empezado por elpupas7 (Mensaje 456100)
Solicito de algún Moderador que elimine este hilo.

Salvo que exista alguna razón de peso (y no se me ocurre ninguna por ahora) para tu petición, no me parece correcto hacer eso, pues es un hilo que aunque tú has abierto, contiene participaciones y código de otros usuarios. La eliminación supondría eliminar también esas contribuciones.

Si explicas las razones de tu petición (o hazlo en privado, si lo deseas) podemos buscar alguna solución, pero la que propones no parece factible.

Un saludo.

elpupas7 21-03-2013 19:19:55

Cita:

Empezado por ecfisa (Mensaje 456104)
Hola elpupas7.
No veo nada en este hilo que amerite ser eliminado, ¿ Serías tan amable de indicarnos el motivo de tu pedido ?
Saludos.

Sin problema.

Pero, lo primero, manifestarte mi extrañeza en cuanto a que se necesitan méritos para eliminar un hilo. ¿ No se necesitarán para que permanezca ?

Te cuento mis razones, no porque crea que os puedan ser suficientes (cada foro tiene su talante y sobre esto nada que decir, aunque si lo que se puede esperar) sino porque soy persona educada y ante una pregunta formalmente correcta, que menos que una sincera respuesta.

A groso modo:

1. El motivo que me ha impulsado a crear este hilo ya no existe. Es más, lo considero un error.

2. Se hace referencia a un post creado en Taringa, dónde estaban alojadas las distintas implementaciones del ejercicio propuesto, que ya no existe.

3. Ya soy mayorcito para que nadie me acuse de "ocultación". No será que se confunde una posible "falta de información" con "ocultación". La ocultación entraña voluntariedad, por lo tanto "intencionalidad" y dudo mucho de la capacidad para que nadie pueda leer mi intención al punto de formular tal acusación. Y digo esto para que puedas calibrar el mérito o demérito de los post de este hilo. Mi opinión es que mucha no tienen.

4. El único post que se puede salvar de forma relativa es el que hace referencia a un listado de código, que ya está posteado en otro site, que no responde a lo que se pedía y que tiene en palabras de su autor correcciones a realizar. En todo caso, por ser un intento de aproximación, lo considero el único post con "méritos" suficientes.

5. En definitiva y por no alargar esto demasiado, este hilo es bastante lamentable y me avergüenza figurar en él. Con mayor razón por haber disparado tal suerte de desatinos.

Claro está, es mi opinión y otros tendrán la suya.

Y que nadie "lea" en esto algún síntoma de acritud o desdén hacia nadie, que no hay tal. Simplemente, ha sido un error y preferiría que este error se suprimiese. Creo que a nadie le gusta ir dejando lastre de sus errores. En todo caso, a mi, no.

Saludos.

Casimiro Noteví 21-03-2013 19:30:09

Desgraciadamente, todos nos equivocamos alguna vez (muchas veces) y no por ello podemos "desequivocarnos" (justo aprendemos de los errores).
¿Te imaginas a la gente pidiendo que modifiquen en libros cosas que dijeron? (*), lo dicho, dicho está.
Todos hemos dicho/escrito cosas de las que nos avergonzamos, pero ahí están y no vamos a ir a borrar los posts, quemar los libros, eliminar las cintas de VHS, etc.
No se debe eliminar el mensaje porque incluso se ha aportado código.
De todas formas, si estás tan preocupado por tu imagen, ¿quién va a hacer una búsqueda por "elpupas7" cuando quieran saber de ti?.
Evidentemente, nadie.
Creo que todos estamos de acuerdo en que no se borre, aunque podemos pasarlo a la sección de "Humor" o a "La taberna", si quieres.

Saludos

(*) En 1984 lo hacen, tenían a gente para modificar los periódicos antiguos, incluso :)

elpupas7 21-03-2013 19:56:56

Me lo has dejado en bandeja.

Si no me arrepiento de mis propios post, sino del hilo en si, en concreto de algunas respuestas que, efectivamente, son más un chiste que una respuesta.
Creía que este era un foro "serio", de ahí el error, cuando se trata de un foro con algunos "chistosos".

Primero me acusas de "ocultación" y veo que no hay rectificación. No contento con ello, hablas de mi preocupación por mi imagen y de que nadie va a buscar mi nick en buscador alguno. ¿ Qué será lo siguiente ? Si, tienes razón, será mejor poner este hilo en la sección de chistes.

Comparar un hilo editable o suprimible con un libro publicado es sin duda uno de tus chistes. ¿ No te agota tanta hilaridad ?

Pero mira, no pido que se suprima el hilo, acabo de cambiar de opinión. Que se deje el primer post y el que contiene el código. El resto, a la sección de humor.

A ver que disparate se te ocurre ahora, porque callado no te vas a quedar, no. De eso podemos estar seguros.

Saludos, igualmente.


La franja horaria es GMT +2. Ahora son las 01:34:20.

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