La Gallinita tira huevos.
#21
Escrito 12 diciembre 2008 - 09:19
#22 Guest_Jose Fco_*
Escrito 12 diciembre 2008 - 09:43
Un Saludo.
#23
Escrito 12 diciembre 2008 - 10:00
Pues con este codigo ya esta el juego, solo falta la parte decorativa.
Muy bueno Eduardo, como aprendes de mi.
Saludos
#24
Escrito 12 diciembre 2008 - 10:03
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.
Trate de documentarlo, pero si tienen duda hagan el favor de preguntar...
Archivos adjuntos
#25
Escrito 12 diciembre 2008 - 10:24
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.
Archivos adjuntos
#26
Escrito 12 diciembre 2008 - 10:51
Muy bueno, como para un segundo nivel.
Vas muy bien, sigue asi.
Saludos
#27
Escrito 12 diciembre 2008 - 10:58
Saludos.
#28
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.
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.
#29 Guest_Jose Fco_*
Escrito 12 diciembre 2008 - 11:08
Aqui la prueba:
if Huevo.Dir = 'DER' then
Huevo.Dir := 'IZQ';
jajajajajajaja Como que si huevo derecho y huevo izquierdo.
Esta quedando bueno eso eduarcol. De estos codigos se aprende y surgen nuevas ideas.
Un Saludo.
#30
Escrito 12 diciembre 2008 - 11:13
#31
Escrito 12 diciembre 2008 - 11:19
#32 Guest_Jose Fco_*
Escrito 12 diciembre 2008 - 11:29
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_*
Escrito 12 diciembre 2008 - 12:56
Un Saludo.
#34
Escrito 12 diciembre 2008 - 01:00
Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita?
Un Saludo.
Por supuesto amigo, los huevos jajajajaja
Salud OS
#35 Guest_Jose Fco_*
Escrito 12 diciembre 2008 - 01:02
Bueno y el Maestro Egopolice ¿no piensa aportar nada para la gallinita?
Un Saludo.
Por supuesto amigo, los huevos jajajajaja
Salud OS
jajajajajajaja ya esos sobran aqui.Mejor aporta algo que no tengamos.
Un Saludo.
#36
Escrito 12 diciembre 2008 - 02:28
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]
#37 Guest_Jose Fco_*
Escrito 12 diciembre 2008 - 03:37
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
Escrito 12 diciembre 2008 - 04:04
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):
procedure TfrGallina.tmHuevoPTimer(Sender: TObject); begin tmHuevoP.Interval:= RandomRange(1500, 5500); THuevo.Lanzar; end;
Y en el evento OnMouseDown:
procedure TfrGallina.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin tmHuevoP.Enabled:= True; end;
Cuando le demos click al form empezaran a caer los huevos a intervalos.
Me parece mejor que hacerlo uno.
Saludos
#39
Escrito 12 diciembre 2008 - 04:20
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]
#40
Escrito 12 diciembre 2008 - 04:27
Salud OS