Ir al contenido



La Gallinita tira huevos.


  • Por favor identifícate para responder
115 respuestas en este tema

#21 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.254 mensajes
  • LocationRepública Dominicana

Escrito 12 diciembre 2008 - 09:19

Hey amigo excelente :D :D (y)
  • 0

#22 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 09:43

Hola Eduardo, muy bueno ese codigo. (y) Ya tenemos de donde partir. ;)

Un Saludo.

#23 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 12 diciembre 2008 - 10:00

Hola
Pues con este codigo ya esta el juego, solo falta la parte decorativa.
Muy bueno Eduardo, como aprendes de mi. :D :D :D :D
Saludos
  • 0

#24 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.481 mensajes
  • LocationVenezuela

Escrito 12 diciembre 2008 - 10:03

Bueno, aqui les dejo mi otra propuesta, con los hilos, fijense la diferencia en la velocidad de la caida cuando hay muchos objetos a la vez



delphi
  1. unit unPrincipal;
  2.  
  3. interface
  4.  
  5. uses
  6.  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.  Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10. (*Formulario principal, aqui es donde se desplaza la gallina y el cocinero
  11.  Solo tiene tres controles: 2 Timer, y un shape
  12.  *)
  13.  TfrGallina = class(TForm)
  14.    sGallina: TShape;
  15.    tmGallina: TTimer;
  16.    tmHuevoP: TTimer;
  17.    procedure tmGallinaTimer(Sender: TObject);
  18.    procedure FormKeyPress(Sender: TObject; var Key: Char);
  19.    procedure FormCreate(Sender: TObject);
  20.  private
  21.    { Private declarations }
  22.  public
  23.    { Public declarations }
  24.  end;
  25.  
  26.  
  27.  (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que
  28.   no se note lento cuando hayan muchos huevos cayendo a la vez*)
  29.  (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que
  30.   no se note lento cuando hayan muchos huevos cayendo a la vez*)
  31.  THuevo = class(TShape)
  32.     private
  33.  
  34.     public
  35.      (*Procedimiento de clase que permite
  36.       crear un huevo cada vezs que se llame*)
  37.      class procedure Lanzar;
  38.  end;
  39.  
  40.  
  41.  (*Hilo que hace que el huevo se caiga solo*)
  42.  TThreadHuevo = class(TThread)
  43.  private
  44.    (*Obejto que cae*)
  45.    Huevo: THuevo;
  46.    Seguir: Boolean;
  47.  protected
  48.    procedure Execute; override;
  49.    procedure Caer;
  50.  public
  51.    constructor Create(Egg: THuevo);
  52.  end;
  53.  
  54.  
  55.  
  56. var
  57.  frGallina: TfrGallina;
  58.  cHuevo: Integer;
  59. implementation
  60.  
  61. {$R *.dfm}
  62.  
  63. procedure TfrGallina.tmGallinaTimer(Sender: TObject);
  64. begin
  65.   //Aqui se controla el movimiento de la gallina por la pantalla
  66.   sGallina.Left := sGallina.Left + 1;
  67.   if (sGallina.Left + 10) =  (frGallina.Width - sGallina.Width) then
  68.      sGallina.Left := 0;
  69. end;
  70.  
  71.  
  72. //Objeto Huevo
  73. class procedure THuevo.Lanzar;
  74. var
  75.   H: THuevo;
  76. begin
  77.   //Crea el huevo le da la forma y posicion
  78.   H := THuevo.Create(frGallina);
  79.   with H do
  80.   begin
  81.      Parent := frGallina;
  82.      Shape := stEllipse;
  83.      Name   := 'H' + InttoStr(cHuevo);
  84.      Inc(cHuevo);
  85.      Height := 30;
  86.      Width  := 20;
  87.      Left := frGallina.sGallina.Left;
  88.      Top  := frGallina.sGallina.Top;
  89.   end;
  90.   //Activa el hilo para que se encargue de administrar la caida del huevo
  91.   TThreadHuevo.Create(H);
  92. end;
  93.  
  94. procedure TfrGallina.FormKeyPress(Sender: TObject; var Key: Char);
  95. begin
  96.   //Si se presiona enter lanza el artefacto
  97.   if Key = #13 then
  98.   begin
  99.      THuevo.Lanzar;
  100.   end;
  101. end;
  102.  
  103. procedure TfrGallina.FormCreate(Sender: TObject);
  104. begin
  105.   //Inicializa la cantidad de huevos creados
  106.   cHuevo := 0;
  107. end;
  108.  
  109. //Hilo de huevo
  110. constructor TThreadHuevo.Create(Egg: THuevo);
  111. begin
  112.   //Asigna el parametro a la variable huevo para poder moverlo
  113.   inherited Create(False);
  114.   Seguir := True;
  115.   Huevo := Egg;
  116. end;
  117.  
  118. procedure TThreadHuevo.Execute;
  119. begin
  120.   //Este codigo se ejecuta al crearse el hilo
  121.   //El ciclo es para asegurarse que se ejecute siempre
  122.   //que no haya llegado al final
  123.   while Seguir do begin
  124.      //Sincroniza el objeto del hilo con el del formulario,
  125.      //Ejecutando lo que esta en el procedimento
  126.      Synchronize(Caer);
  127.      //Retardo en la caida
  128.      Sleep(50);
  129.    end;
  130. end;
  131.  
  132. Procedure TThreadHuevo.Caer;
  133. begin
  134.   Huevo.Top := Huevo.Top + 1;
  135.   //Si llega al final de la pantalla le cambia el color y la variable para no seguir moviendolo.
  136.   if (Huevo.Top + 40) =  (frGallina.Height - Huevo.Height) then
  137.   begin
  138.      Huevo.Brush.Color := clRed;
  139.      Seguir := False;
  140.   end;
  141. end;
  142. end.



Trate de documentarlo, pero si tienen duda hagan el favor de preguntar...

Archivos adjuntos

  • Archivo adjunto  99_.zip   204,14KB   6 descargas

  • 0

#25 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.481 mensajes
  • LocationVenezuela

Escrito 12 diciembre 2008 - 10:24

El mismo ejemplo, lo unico que estamos modificando es el movimiento, ya no solo sera horizontal sino vertical:



delphi
  1. unit unPrincipal;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10. (*Formulario principal, aqui es donde se desplaza la gallina y el cocinero
  11.  Solo tiene tres controles: 2 Timer, y un shape
  12.  *)
  13.   TfrGallina = class(TForm)
  14.     sGallina: TShape;
  15.     tmGallina: TTimer;
  16.     tmHuevoP: TTimer;
  17.     procedure tmGallinaTimer(Sender: TObject);
  18.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  19.     procedure FormCreate(Sender: TObject);
  20.   private
  21.     { Private declarations }
  22.   public
  23.     { Public declarations }
  24.   end;
  25.  
  26.  
  27.   (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que
  28.   no se note lento cuando hayan muchos huevos cayendo a la vez*)
  29.   (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que
  30.   no se note lento cuando hayan muchos huevos cayendo a la vez*)
  31.   THuevo = class(TShape)
  32.      private
  33.  
  34.      public
  35.       (*Procedimiento de clase que permite
  36.       crear un huevo cada vezs que se llame*)
  37.       Dir: String; //Der: Derecha Izq: Izquierda
  38.       class procedure Lanzar;
  39.   end;
  40.  
  41.  
  42.   (*Hilo que hace que el huevo se caiga solo*)
  43.   TThreadHuevo = class(TThread)
  44.   private
  45.     (*Obejto que cae*)
  46.     Huevo: THuevo;
  47.     Seguir: Boolean;
  48.   protected
  49.     procedure Execute; override;
  50.     procedure Caer;
  51.   public
  52.     constructor Create(Egg: THuevo);
  53.   end;
  54.  
  55.  
  56.  
  57. var
  58.   frGallina: TfrGallina;
  59.   cHuevo: Integer;
  60. implementation
  61.  
  62. {$R *.dfm}
  63.  
  64. procedure TfrGallina.tmGallinaTimer(Sender: TObject);
  65. begin
  66.    //Aqui se controla el movimiento de la gallina por la pantalla
  67.    sGallina.Left := sGallina.Left + 1;
  68.    if (sGallina.Left + 10) =  (frGallina.Width - sGallina.Width) then
  69.       sGallina.Left := 0;
  70. end;
  71.  
  72.  
  73. //Objeto Huevo
  74. class procedure THuevo.Lanzar;
  75. var
  76.    H: THuevo;
  77. begin
  78.    //Crea el huevo le da la forma y posicion
  79.    H := THuevo.Create(frGallina);
  80.    with H do
  81.    begin
  82.       Parent := frGallina;
  83.       Shape := stEllipse;
  84.       Name   := 'H' + InttoStr(cHuevo);
  85.       Inc(cHuevo);
  86.       Height := 30;
  87.       Width  := 20;
  88.       Left := frGallina.sGallina.Left;
  89.       Top  := frGallina.sGallina.Top;
  90.       Dir  := 'DER';
  91.    end;
  92.    //Activa el hilo para que se encargue de administrar la caida del huevo
  93.    TThreadHuevo.Create(H);
  94. end;
  95.  
  96. procedure TfrGallina.FormKeyPress(Sender: TObject; var Key: Char);
  97. begin
  98.    //Si se presiona enter lanza el artefacto
  99.    if Key = #13 then
  100.    begin
  101.       THuevo.Lanzar;
  102.    end;
  103. end;
  104.  
  105. procedure TfrGallina.FormCreate(Sender: TObject);
  106. begin
  107.    //Inicializa la cantidad de huevos creados
  108.    cHuevo := 0;
  109. end;
  110.  
  111. //Hilo de huevo
  112. constructor TThreadHuevo.Create(Egg: THuevo);
  113. begin
  114.    //Asigna el parametro a la variable huevo para poder moverlo
  115.    inherited Create(False);
  116.    Seguir := True;
  117.    Huevo := Egg;
  118. end;
  119.  
  120. procedure TThreadHuevo.Execute;
  121. begin
  122.    //Este codigo se ejecuta al crearse el hilo
  123.    //El ciclo es para asegurarse que se ejecute siempre
  124.    //que no haya llegado al final
  125.    while Seguir do begin
  126.       //Sincroniza el objeto del hilo con el del formulario,
  127.       //Ejecutando lo que esta en el procedimento
  128.       Synchronize(Caer);
  129.       //Retardo en la caida
  130.       Sleep(50);
  131.     end;
  132. end;
  133.  
  134. Procedure TThreadHuevo.Caer;
  135. begin
  136.    Huevo.Top := Huevo.Top + 1;
  137.    //Realiza el movimiento Vertical
  138.    if Huevo.Dir = 'DER' then
  139.       Huevo.Left := Huevo.Left + 2
  140.    else
  141.       Huevo.Left := Huevo.Left - 2;
  142.  
  143.    //Si llego al extremo derecho cambia la direccion
  144.    if (Huevo.Left + Huevo.Width + 10) >= frGallina.Width then
  145.       Huevo.Dir := 'IZQ';
  146.  
  147.    //Si llego al extremo izquierdo cambia la direccion
  148.    if (Huevo.Left + Huevo.Width + 10) <= 20 then
  149.       Huevo.Dir := 'DER';
  150.  
  151.    //Si llega al final de la pantalla le cambia el color y la variable para no seguir moviendolo.
  152.    if (Huevo.Top + 40) =  (frGallina.Height - Huevo.Height) then
  153.    begin
  154.       Huevo.Brush.Color := clRed;
  155.       Seguir := False;
  156.    end;
  157. end;
  158. end.

Archivos adjuntos

  • Archivo adjunto  100_.zip   204,77KB   6 descargas

  • 0

#26 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 12 diciembre 2008 - 10:51

Hola
Muy bueno, como para un segundo nivel.
Vas muy bien, sigue asi.
Saludos
  • 0

#27 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.254 mensajes
  • LocationRepública Dominicana

Escrito 12 diciembre 2008 - 10:58

¡Vaya!, eres un Master, me ha gustado bastante esta última modificación. :D :D

Saludos.
  • 0

#28 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.481 mensajes
  • LocationVenezuela

Escrito 12 diciembre 2008 - 11:01

Hola
Muy bueno, como para un segundo nivel.
Vas muy bien, sigue asi.
Saludos


Los niveles los pienso manejar utilizando variables, que controla el sleep de cada thread...

¡Vaya!, eres un Master, me ha gustado bastante esta última modificación. :D :D

Saludos.


jajaja, como decia un personaje en otro hilo por ahi  *-), si insistes en llamarme master no te voy a quitar la ilusión.  Eso lo incorpore en base a tu comentario que le faltaba movimiento.
  • 0

#29 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 11:08

Ese ultimo codigo esta medio porno. :D :D :D

Aqui la prueba:

delphi
  1. if Huevo.Dir = 'DER' then




delphi
  1.   Huevo.Dir := 'IZQ';



jajajajajajaja Como que si huevo derecho y huevo izquierdo. :p

Esta quedando bueno eso eduarcol. (y) De estos codigos se aprende y surgen nuevas ideas. ;)


Un Saludo.

#30 seoane

seoane

    Advanced Member

  • Administrador
  • 1.222 mensajes
  • LocationEspaña

Escrito 12 diciembre 2008 - 11:13

Yo pongo la cesta  :D
  • 0

#31 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.481 mensajes
  • LocationVenezuela

Escrito 12 diciembre 2008 - 11:19

jejeje, buena la cesta, solo falta que alguien haga que entren en ella a ver quien se anima?
  • 0

#32 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 11:29

Esta buena la cesta, cuando llegue a la casa metere algunas cositas al codigo a ver que les parece. :)

Un Saludo.

PD:Tambien tenemos una imagen, es un cocinero con una sarten.Y tambien tenemos las gallinitas en diferentes posiciones para simular que camina. ;)

#33 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 12:56

Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita? :p


Un Saludo.

#34 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.677 mensajes
  • LocationMéxico

Escrito 12 diciembre 2008 - 01:00

Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita? :p

Un Saludo.


Por supuesto amigo, los huevos jajajajaja

Salud OS

Imagen Enviada
  • 0

#35 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 01:02


Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita? :p

Un Saludo.


Por supuesto amigo, los huevos jajajajaja

Salud OS


jajajajajajaja ya esos sobran aqui.Mejor aporta algo que no tengamos. :D :D :D


Un Saludo.

#36 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 12 diciembre 2008 - 02:28

Hola
Pequeño aporte.
Ya esta la Gallina sentada.
Ya esta el cocinero.
Los huevos caen con el mouse derecho y la tecla (tambien se podria hacer con un timer).
Cuentan los huevos que se caen, si llega a 2 sale un mensaje.
Falta.
El fondo
Reiniciar el juego.
Que cuando llegue a la cuenta se detenga o algo.
Que el cocinero los detenga (es la parte mas difícil.).
Saludos

[archivo adjunto borrado por el administrador]
  • 0

#37 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 12 diciembre 2008 - 03:37

Bueno amigos, el programita esta progresando. :) De esos codigos estoy aprendiendo bastante. (y) Eso tambien es importante.
Trabajare en lo del fondo  y tratare de encontrar el codigo para que los huevos que entren en las cordenedas del sarten pues se detengan en el y se cuenten como colectados. ;)

Un Saludo.

#38 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 12 diciembre 2008 - 04:04

Hola
Hay un timer desocupado (tmHuevoP), lo usaremos para que lance los huevos a diferentes intervalos.
Primero ponemos en el uses: Math.
ponemos el timer (tmHuevoP) enable en false.
En el evento del timer (tmHuevoP):


delphi
  1. procedure TfrGallina.tmHuevoPTimer(Sender: TObject);
  2. begin
  3.   tmHuevoP.Interval:=  RandomRange(1500, 5500);
  4.   THuevo.Lanzar;
  5. end;


Y en el evento OnMouseDown:


delphi
  1. procedure TfrGallina.FormMouseDown(Sender: TObject; Button: TMouseButton;
  2.   Shift: TShiftState; X, Y: Integer);
  3. begin
  4.   tmHuevoP.Enabled:= True;
  5. end;


Cuando le demos click al form empezaran a caer los huevos a intervalos.
Me parece mejor que hacerlo uno.
Saludos
  • 0

#39 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 12 diciembre 2008 - 04:20

Hola
Encogí un poco la gallina y agrande al cocinero, se ve mejor.
Aqui estan los cambios con el timer.
Saludos


[archivo adjunto borrado por el administrador]
  • 0

#40 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.677 mensajes
  • LocationMéxico

Escrito 12 diciembre 2008 - 04:27

jejeje, va bien, solo que le falta velocidad, la cosa es ver como carambas agarra los huevos con el sarten :D (y)

Salud OS
  • 0