


Posted 12 December 2008 - 09:19 AM
Posted 12 December 2008 - 09:43 AM
Posted 12 December 2008 - 10:00 AM
Posted 12 December 2008 - 10:03 AM
unit unPrincipal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type (*Formulario principal, aqui es donde se desplaza la gallina y el cocinero Solo tiene tres controles: 2 Timer, y un shape *) TfrGallina = class(TForm) sGallina: TShape; tmGallina: TTimer; tmHuevoP: TTimer; procedure tmGallinaTimer(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que no se note lento cuando hayan muchos huevos cayendo a la vez*) (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que no se note lento cuando hayan muchos huevos cayendo a la vez*) THuevo = class(TShape) private public (*Procedimiento de clase que permite crear un huevo cada vezs que se llame*) class procedure Lanzar; end; (*Hilo que hace que el huevo se caiga solo*) TThreadHuevo = class(TThread) private (*Obejto que cae*) Huevo: THuevo; Seguir: Boolean; protected procedure Execute; override; procedure Caer; public constructor Create(Egg: THuevo); end; var frGallina: TfrGallina; cHuevo: Integer; implementation {$R *.dfm} procedure TfrGallina.tmGallinaTimer(Sender: TObject); begin //Aqui se controla el movimiento de la gallina por la pantalla sGallina.Left := sGallina.Left + 1; if (sGallina.Left + 10) = (frGallina.Width - sGallina.Width) then sGallina.Left := 0; end; //Objeto Huevo class procedure THuevo.Lanzar; var H: THuevo; begin //Crea el huevo le da la forma y posicion H := THuevo.Create(frGallina); with H do begin Parent := frGallina; Shape := stEllipse; Name := 'H' + InttoStr(cHuevo); Inc(cHuevo); Height := 30; Width := 20; Left := frGallina.sGallina.Left; Top := frGallina.sGallina.Top; end; //Activa el hilo para que se encargue de administrar la caida del huevo TThreadHuevo.Create(H); end; procedure TfrGallina.FormKeyPress(Sender: TObject; var Key: Char); begin //Si se presiona enter lanza el artefacto if Key = #13 then begin THuevo.Lanzar; end; end; procedure TfrGallina.FormCreate(Sender: TObject); begin //Inicializa la cantidad de huevos creados cHuevo := 0; end; //Hilo de huevo constructor TThreadHuevo.Create(Egg: THuevo); begin //Asigna el parametro a la variable huevo para poder moverlo inherited Create(False); Seguir := True; Huevo := Egg; end; procedure TThreadHuevo.Execute; begin //Este codigo se ejecuta al crearse el hilo //El ciclo es para asegurarse que se ejecute siempre //que no haya llegado al final while Seguir do begin //Sincroniza el objeto del hilo con el del formulario, //Ejecutando lo que esta en el procedimento Synchronize(Caer); //Retardo en la caida Sleep(50); end; end; Procedure TThreadHuevo.Caer; begin Huevo.Top := Huevo.Top + 1; //Si llega al final de la pantalla le cambia el color y la variable para no seguir moviendolo. if (Huevo.Top + 40) = (frGallina.Height - Huevo.Height) then begin Huevo.Brush.Color := clRed; Seguir := False; end; end; end.
Posted 12 December 2008 - 10:24 AM
unit unPrincipal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type (*Formulario principal, aqui es donde se desplaza la gallina y el cocinero Solo tiene tres controles: 2 Timer, y un shape *) TfrGallina = class(TForm) sGallina: TShape; tmGallina: TTimer; tmHuevoP: TTimer; procedure tmGallinaTimer(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que no se note lento cuando hayan muchos huevos cayendo a la vez*) (*Es la clase que dibuja el huevo cayendo, deberia ser un Thread para que no se note lento cuando hayan muchos huevos cayendo a la vez*) THuevo = class(TShape) private public (*Procedimiento de clase que permite crear un huevo cada vezs que se llame*) Dir: String; //Der: Derecha Izq: Izquierda class procedure Lanzar; end; (*Hilo que hace que el huevo se caiga solo*) TThreadHuevo = class(TThread) private (*Obejto que cae*) Huevo: THuevo; Seguir: Boolean; protected procedure Execute; override; procedure Caer; public constructor Create(Egg: THuevo); end; var frGallina: TfrGallina; cHuevo: Integer; implementation {$R *.dfm} procedure TfrGallina.tmGallinaTimer(Sender: TObject); begin //Aqui se controla el movimiento de la gallina por la pantalla sGallina.Left := sGallina.Left + 1; if (sGallina.Left + 10) = (frGallina.Width - sGallina.Width) then sGallina.Left := 0; end; //Objeto Huevo class procedure THuevo.Lanzar; var H: THuevo; begin //Crea el huevo le da la forma y posicion H := THuevo.Create(frGallina); with H do begin Parent := frGallina; Shape := stEllipse; Name := 'H' + InttoStr(cHuevo); Inc(cHuevo); Height := 30; Width := 20; Left := frGallina.sGallina.Left; Top := frGallina.sGallina.Top; Dir := 'DER'; end; //Activa el hilo para que se encargue de administrar la caida del huevo TThreadHuevo.Create(H); end; procedure TfrGallina.FormKeyPress(Sender: TObject; var Key: Char); begin //Si se presiona enter lanza el artefacto if Key = #13 then begin THuevo.Lanzar; end; end; procedure TfrGallina.FormCreate(Sender: TObject); begin //Inicializa la cantidad de huevos creados cHuevo := 0; end; //Hilo de huevo constructor TThreadHuevo.Create(Egg: THuevo); begin //Asigna el parametro a la variable huevo para poder moverlo inherited Create(False); Seguir := True; Huevo := Egg; end; procedure TThreadHuevo.Execute; begin //Este codigo se ejecuta al crearse el hilo //El ciclo es para asegurarse que se ejecute siempre //que no haya llegado al final while Seguir do begin //Sincroniza el objeto del hilo con el del formulario, //Ejecutando lo que esta en el procedimento Synchronize(Caer); //Retardo en la caida Sleep(50); end; end; Procedure TThreadHuevo.Caer; begin Huevo.Top := Huevo.Top + 1; //Realiza el movimiento Vertical if Huevo.Dir = 'DER' then Huevo.Left := Huevo.Left + 2 else Huevo.Left := Huevo.Left - 2; //Si llego al extremo derecho cambia la direccion if (Huevo.Left + Huevo.Width + 10) >= frGallina.Width then Huevo.Dir := 'IZQ'; //Si llego al extremo izquierdo cambia la direccion if (Huevo.Left + Huevo.Width + 10) <= 20 then Huevo.Dir := 'DER'; //Si llega al final de la pantalla le cambia el color y la variable para no seguir moviendolo. if (Huevo.Top + 40) = (frGallina.Height - Huevo.Height) then begin Huevo.Brush.Color := clRed; Seguir := False; end; end; end.
Posted 12 December 2008 - 10:51 AM
Posted 12 December 2008 - 10:58 AM
Posted 12 December 2008 - 11:01 AM
Hola
Muy bueno, como para un segundo nivel.
Vas muy bien, sigue asi.
Saludos
¡Vaya!, eres un Master, me ha gustado bastante esta última modificación.
![]()
Saludos.
Posted 12 December 2008 - 11:08 AM
if Huevo.Dir = 'DER' then
Huevo.Dir := 'IZQ';
Posted 12 December 2008 - 11:13 AM
Posted 12 December 2008 - 11:19 AM
Posted 12 December 2008 - 11:29 AM
Posted 12 December 2008 - 12:56 PM
Posted 12 December 2008 - 01:00 PM
Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita?
Un Saludo.
Posted 12 December 2008 - 01:02 PM
Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita?
Un Saludo.
Por supuesto amigo, los huevos jajajajaja
Salud OS
Posted 12 December 2008 - 02:28 PM
Posted 12 December 2008 - 03:37 PM
Posted 12 December 2008 - 04:04 PM
procedure TfrGallina.tmHuevoPTimer(Sender: TObject); begin tmHuevoP.Interval:= RandomRange(1500, 5500); THuevo.Lanzar; end;
procedure TfrGallina.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin tmHuevoP.Enabled:= True; end;
Posted 12 December 2008 - 04:20 PM
Posted 12 December 2008 - 04:27 PM