Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda En Un Juego (https://www.clubdelphi.com/foros/showthread.php?t=68869)

Celta 12-07-2010 16:43:33

Ayuda En Un Juego
 
holaaa a todos... soy re nuevito en este foro asi q espero q m ayuden plz! =D
les comento q estoy asiendo un juego en delphi 7 ...se trata de un juego de naves ya logre que colisione que se mueva 360 grados sonidos graficos animaciones etc...
pero llevo casi 2 años que comenze con esto y aun no e podido aserle disparar.. :P
ya probe creando barias imagenes en un panel pero cada ves que dispara se ba asiendo mas grande el panel...tambien probe asiendo un solo disparo y cuando se lansa que vuelva ala misma posicion del avion pero no me sirve mucho...mmmm si piden el codigo de mi jueguito se los mando aora no tengo tiempo ..espero q m ayuden bay!

Casimiro Noteví 12-07-2010 17:25:24

Hola, Celta, bienvenido a clubdelphi, te aconsejo que leas nuestra guía de estilo, muchas gracias.

Caral 12-07-2010 17:50:11

Hola
Tal vez te de alguna idea
Saludos

Neftali [Germán.Estévez] 12-07-2010 18:00:26

Hombre, pues me cuesta creer que hayas logrado implementar colisiones, sonidos, gráficos, animaciones,... y que no consigas disparar un misil...:o

Creo que el ejemplo de Caral de puede dar una idea para empezar; La idea es similar si utilizas una imagen, un Shape o lo pintas directamente.
Si nos puedes explicar un poco mejor lo que necesitas (concretando) tal vez te podamos ayudar, ya que (yo al menos) no he entendido lo del panel.

Caral 12-07-2010 18:05:50

Hola
La parte mas sencilla esta en disparar.
Ahora si lo que se quiere es dirigirlo a un objeto en movimiento entonces se debe calcular la trayectoria.
Por ahí tengo un ejemplo (el burrito perseguido) que lo que hace es un objeto sigue a otro a donde este valla.
En tal caso no tendria gracia ya que siempre lo alcanzara.
Saludos

Celta 12-07-2010 18:36:05

sii ami tambien me cuesta creer ajajaj
lo que logre es hacer que dispare un solo misil como el ejemplo pero no que dispare muchos ala ves y que se cree en la imagen del avion

Celta 12-07-2010 21:37:32

...
 
Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, pngimage, ExtCtrls, StdCtrls;

         const
        DISTANCIA_AL_BORDE = 20;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    esp1: TImage;
    esp2: TImage;
    img: TImage;
    Timer1: TTimer;
    imgmisil: TImage;
    Timer2: TTimer;
    Timer3: TTimer;
    ene: TImage;
    Timer4: TTimer;
    Timer5: TTimer;
    Label1: TLabel;
    Timer6: TTimer;
    Timerderecha: TTimer;
    TimerArriba: TTimer;
    TimerAbajo: TTimer;
    TimerIzquierda: TTimer;
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure TimerderechaTimer(Sender: TObject);
    procedure TimerArribaTimer(Sender: TObject);
    procedure TimerAbajoTimer(Sender: TObject);
    procedure TimerIzquierdaTimer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    Count: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
             x: integer;
             Ganadas : integer;
              Perdidas: integer;

  sh:TShape;
y: integer;
implementation
                 const
       arr: array[0..65, 0..10] of integer =
((1, 1, 2, 1, 1,1 ,1 ,1 ,1 ,1 ,1 ),
(1, 1, 2, 2, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(1, 1, 1, 1, 2 ,1 ,2 ,1 ,1 ,1 ,2),
(1, 1, 2, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(1, 1, 1, 1, 2 ,2 ,1 ,2 ,1 ,1 ,2),
(2, 1, 2, 2, 2 ,2 ,1 ,1 ,1 ,1 ,1),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,2 ,1 ,2),
(2, 1, 1, 2, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2 ,1 ,2 ,1 ,2 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 2, 2, 2 ,2 ,1 ,1 ,1 ,1 ,1),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,2 ,1 ,2),
(2, 1, 1, 2, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2 ,1 ,2 ,1 ,2 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 2, 2, 2 ,2 ,1 ,1 ,1 ,1 ,1),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,2 ,1 ,2),
(2, 1, 1, 2, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2 ,1 ,2 ,1 ,2 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 2, 2, 2 ,2 ,1 ,1 ,1 ,1 ,1),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,2 ,2 ,1 ,2),
(2, 1, 1, 2, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 2 ,1 ,2 ,1 ,2 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1 ,1 ,1 ,1 ,1 ,2),
(2, 1, 1, 1, 1 ,1, 1, 1, 1 ,1 ,2));
{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);

var
x: integer;
y: integer;
begin
 for x := 0 to 20 do begin
 for y := 0 to 10 do begin
 case arr[x, y] of

 0: paintbox1.Canvas.CopyRect(Rect(x*75, y*75,
 (x*75)+75,(y*75)+75),esp1.canvas,rect(0,0,75,75));

 1: paintbox1.Canvas.CopyRect(Rect(x*75, y*75,
 (x*75)+75,(y*75)+75),esp2.canvas,rect(0,0,75,75));

 2:  paintbox1.Canvas.CopyRect(Rect(x*75, y*75,
 (x*75)+75,(y*75)+75),esp1.canvas,rect(0,0,75,75));






end;
 end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
       form1.DoubleBuffered := True;
        Img.Width := Img.Picture.Width;
 Img.Height := Img.Picture.Height;

 ImgMisil.Width := ImgMisil.Picture.Width;
 ImgMisil.Height := ImgMisil.Picture.Height;

 ene.Width := ene.Picture.Width;
 ene.Height := ene.Picture.Height;

end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
imgmisil.top := imgmisil.top -6;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 27 then close;
if key = vk_control then
    timer1.Enabled := false;
timer6.Enabled :=false;
imgmisil.Visible := true;
            timer2.Enabled := true;









            if key = vk_left then timerizquierda.Enabled := true;
              if key = vk_right then timerderecha.Enabled := true;
                if key = vk_down then timerabajo.Enabled := true;
                  if key = vk_up then timerarriba.Enabled := true;
       end;


procedure TForm1.Timer3Timer(Sender: TObject);
var
  r1, r2, b1, b2:Integer;
begin
r1 := (IMG.Left + IMG.Width);
  r2 := (ENE.Left + ENE.Width);
  b1 := (IMG.Top + IMG.Height);
  b2 := (ENE.Top + ENE.Height);

if (((IMG.Left < ENE.Left) and (r1 > ENE.Left))and
       ((IMG.Top < ENE.Top) and (b1 > ENE.Top)))  or

          (((ENE.Left < IMG.Left) and (r2 > IMG.Left))and
                ((ENE.Top < IMG.Top) and (b2 > IMG.Top))) or

         (((IMG.Left < ENE.Left) and (r1 > ENE.Left))and
       ((ENE.Top < IMG.Top) and (b2 > IMG.Top))) or

     (((ENE.Left < IMG.Left) and (r2 > IMG.Left)) and
      ((IMG.Top < ENE.Top) and (b1 > ENE.Top)))    then begin
          Ganadas := Ganadas + 1;


    img.Visible := False;
    TIMER4.Enabled := FALSE;





           end


    end;



procedure TForm1.Timer4Timer(Sender: TObject);
begin
if img.Left > ene.left then
ene.left := ene.left +1;

if img.Left < ene.left then
ene.Left := ene.left -1;

if img.Top > ene.Top then
ene.Top := ene.Top +1;

if img.Top < ene.Top then
ene.Top := ene.Top -1;

end;

procedure TForm1.Timer5Timer(Sender: TObject);
var
  r1, r2, b1, b2:Integer;
begin
r1 := (IMGMISIL.Left + IMGMISIL.Width);
  r2 := (ENE.Left + ENE.Width);
  b1 := (IMGMISIL.Top + IMGMISIL.Height);
  b2 := (ENE.Top + ENE.Height);

   if (((IMGMISIL.Left < ene.Left) and (r1 > ene.Left)) and
      ((IMGMISIL.Top < ene.Top) and (b1 > ene.Top))) or

     (((ene.Left < IMGMISIL.Left) and (r2 > IMGMISIL.Left)) and
      ((ene.Top < IMGMISIL.Top) and (b2 > IMGMISIL.Top))) or

     (((IMGMISIL.Left < ene.Left) and (r1 > ene.Left)) and
      ((ene.Top < IMGMISIL.Top) and (b2 > IMGMISIL.Top))) or

     (((ene.Left < IMGMISIL.Left) and (r2 > IMGMISIL.Left)) and
      ((IMGMISIL.Top < ene.Top) and (b1 > ene.Top))) then begin
    ene.Visible := False;
                    imgmisil.Visible := False;
    TIMER4.Enabled := FALSE;
    

end;
    end;
procedure TForm1.Timer6Timer(Sender: TObject);
begin
imgmisil.Left := img.Left;
imgmisil.Top := img.Top ;
end;


procedure TForm1.TimerderechaTimer(Sender: TObject);
begin
  if (GetKeyState(VK_RIGHT) and $90) > 0 then
    Img.Left:= Img.Left + 4;
end;

procedure TForm1.TimerArribaTimer(Sender: TObject);
begin
       if (GetKeyState(VK_UP) and $90) > 0 then
    Img.Top:= Img.Top - 4;
end;

procedure TForm1.TimerAbajoTimer(Sender: TObject);
begin
  if (GetKeyState(VK_DOWN) and $90) > 0 then
    Img.Top:= Img.Top + 4;
end;

procedure TForm1.TimerIzquierdaTimer(Sender: TObject);
begin
        if (GetKeyState(VK_LEFT) and $90) > 0 then
        Img.Left:= Img.Left - 4;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ImgMisil.Left := Img.Left + Img.Width -36;
             ImgMisil.Top := Img.Top + round(Img.Height / 4);
end;

end.

es el codigo de mi jueguito =D dispara un solo misil

aaaa para los graficos estoy utilizando los componentes png que lo unico que hace(lo unico encerio =D) Es usar el Timage comun de delphi para hacerlo que soporte mas formatos como jpg png etc...

Caral 12-07-2010 21:52:44

Hola
Bonito codigo, ordenadito y todo.:D
Saludos

Caral 13-07-2010 04:26:04

Hola
Creo que seria bueno colocar el programa completo en algun lado, para poder bajarlo y poder tratar de entenderlo.
Con el codigo tal y como se puso es muy complicado, por lo menos para mi, entender que y como hace cada cosa.
Se tendria que empezar por poner las imagenes, con los tamaños adecuados, etc, etc.
Es mi opinion para poder continuar tratando de ayudar.
Saludos

Caral 14-07-2010 04:23:09

Hola
A ver si así va mejor.
Ahora lanza dos misiles, ademas lo hace con el mouse, por ende lo hace mas rápido y se ven mas misiles lanzados.
Quite los aviones, puse otros misiles, bueno, me entretuve un rato :):cool:
Saludos

Celta 14-07-2010 06:33:38

eeemmm
 
no lo puedo adjuntar pesa mas d 300 kb apart q lo subi a megaupload pero no puedo poner link..??!?!?!?!?!
por q ?
me ise 3 jueguitos sin terminar
uno el d aviones ( q es este)
otro de un guerrero q pelea tipo the king o dragons
y el de estrategia que fue mi primer jueguito ..... q satisfaccion =D y lo ise solito pero ninguno sta terminado ...
asi q por eso m inscribi en est foro dond aprendi mucho..
nisiquiera estudio informatica hace casi 1 año 6 meses c m dio por crear un jueguito y empeze a leer un monton =D
como nunka yo estudio electronica y m ago robotitos y to2 eso pero m dijieron q tambien tenia q saber informatica entonces empeze por esto y m re kopo
ajajaajaj q historia :D tengo 16 y los cumpli est año :D
baaaa nisiquiera puedo poner karitas por q?

Celta 14-07-2010 06:35:24

como te paso el link?
logre q el enemigo me persiga y me dispare pero colisiona antes q m toke aora no se porke ..como t paso el link de megaupload ?

Casimiro Noteví 14-07-2010 11:37:08

Amigo, Celta, por favor, si has leído nuestra guía de estilo, procura escribir un poquito más claro, cuesta entender mucho de lo que dices.

No puedes poner links de momento, pero puedes usar algún truco, por ejemplo, pon espacios entre las letras o quita parte del link, etc.

Ejemplo: ww.loquesea.com

Neftali [Germán.Estévez] 14-07-2010 12:42:59

Cita:

Empezado por Celta (Mensaje 370313)
como te paso el link?

Con algo así debería bastar:

h x x p : / / www.megaupload.com/HGFHGFHG

Celta 14-07-2010 18:52:04

bueno, aqui les dejo el jueguito, mi avion dispara un solo misil y el enemigo me busca y me dispara...
mi pregunta es como crear varios enemigos sin tener que hacer cada uno con su funcion..? es posible eso?
como hago para mover mi fondo? lo pinte con canvas en un paintbox.
ww.megaupload.com/?d=P9IPE1I4
bueno algo asi tienen que poner otra w para descargar.

estoy usando la libreria de png components, lo unico que hace es ampliar el image de delphi, no solo permite ver bmps como el predeterminado sino que tambien permite ver png, jpg, jpeg, bmp, ico, emf, wmf.
de aki se lo descargan, se los recomiendo no hace mucho pero es de gran utilidad para hacer buenos graficos
yo utiliso pngs para los aviones..
htp://thany.org/article/18/VCL
aki tienen que agregar una t mas en http
el avion dispara con control y se mueve con las flechitas
saludos espero que me puedan ayudar...

Caral 15-07-2010 02:35:04

Hola
Pide la Unit2 y no esta.
No lo puedo abrir.
Saludos

Caral 15-07-2010 02:56:47

Hola
Ya lo abrí.
Saludos

Celta 15-07-2010 03:24:12

emmmmmmmmmmmmmmm y? :P =D
:P:P:P:P =D=D=D=D
ajajaja espero que me ayuden bay!
todabia no consigo disparar varios misiles

Neftali [Germán.Estévez] 15-07-2010 11:41:52

1 Archivos Adjunto(s)
Hola Celta.
He mirado un poco por encima el juego.

Me da la impresión de que el problema que tienes con el enemigo y los disparos (uno sólo) es más de diseño de la aplicación que de la implementación.

El problema es que tienes 1 TImage para el disparo, por lo tanto no va a ser posible que tengas en pantalla más de un disparo, pues físicamente sólo tienes un componente de Imagen. Igual pasa con el enemigo; Tienes un TImage para el enemigo, por lo tanto sólo puedes pintar uno a la vez.

Lo más sencillo tal y como lo tienes es que conviertas (no te debería costar mucho) tu código para que la creación del enemigo se haga con una función. Que cree en ejecución el TImage, que le asigna la imagen y que lo mueva.

Te envío un ejemplillo de cómo rearlos y destruirlos.

Alogo similar habrá que hacer con los disparos

Celta 15-07-2010 20:35:21

hola neftalli... no me toma esto"lista:TObjectList;"
me dice que no lo declaro.... no me lo toma
puede ser que me falte algun codec?
utilizo delphi7
saludos.

Celta 15-07-2010 21:02:12

que salame :P me confundi con un Tlist =D

Neftali [Germán.Estévez] 15-07-2010 21:58:30

Cita:

Empezado por Celta (Mensaje 370547)
hola neftalli... no me toma esto"lista:TObjectList;"
me dice que no lo declaro.... no me lo toma
puede ser que me falte algun codec?
utilizo delphi7
saludos.

Es una clase de Delphi; En todo caso, busca TObjectListy en la ayuda y añade la unit donde está al USES; Pero debería estar ya añadida; A mi me ha compilado perfectamente en Delphi 6.:confused::confused:

Luego cuando tenga Delphi delante lo reviso.

Neftali [Germán.Estévez] 15-07-2010 22:00:10

OK.
Ahora he leído el último mensaje.

Caral 16-07-2010 03:11:21

Hola
Usando el ejemplo de Neftali en el mismo juego que puse al principio.
Ahora con el mouse (raton) cada vez que se presiona dispara un misil.
Osea, lo crea y al llegar al final de la pantalla lo oculta, asi no se sale de la pantalla.
Dispara los misiles que se quieran, no tiene limite, en principio es lo que se buscaba, mas disparos.:)
Saludos

Celta 16-07-2010 18:40:58

OK. me ayudaron bastante ... muy bueno grasias por ayudarme =D
emm les cuento que esta caendo nieve aki ajajaj :D
ya logre que dispare varios misiles ..cumpli con mi objetivo
saludos!.

Casimiro Noteví 16-07-2010 19:06:58

Nevado, ¿y dónde estás?, aquí asados de calor :confused:

Celta 16-07-2010 20:38:07

siiii
mi apellido tambien es casimiro =D
esta nevando en argentina ..encasi todo el pais :D
en bariloche esta a -15grados y aki a -4grados :D

Casimiro Noteví 16-07-2010 20:44:31

Casi somos "tocayos" :)

Claro, había olvidado que en el hemisferio sur es invierno, qué cabeza la mía.
Deben estar bonitos los bosques nevados.


La franja horaria es GMT +2. Ahora son las 15:27:10.

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