elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda con Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con Pascal  (Leído 2,468 veces)
yako-_-

Desconectado Desconectado

Mensajes: 157


Heroes Del Silencio


Ver Perfil
Duda con Pascal
« en: 16 Junio 2010, 03:53 am »

Mi problema es que e creado dos círculos que rebotan por la pantalla y ahora querría que rebotaran entre ellos(cuando un circulo toque contra el otro) e probado de varias maneras pero no doy se que e de comparar la posición de uno con el otro pero no encuentro una manera lógica de hacerlo si alguien me puede echar un cable. Esta hecho en FreePascal (Lazarus).


Código
  1. Program circulo;
  2.  
  3. uses Graph,Crt;
  4.  
  5. var
  6.  Driver, Modo: Smallint;
  7.  x1,y1,r1,x2,y2,r2: Integer;
  8.  arriba, derecha, izquierda, abajo:   boolean;
  9.  
  10.  
  11. Procedure bola (color1,color2: integer);
  12.     begin
  13.       Setcolor(color1);  //1º bola
  14.       Circle(x1,y1,r1);
  15.       Setcolor(color2);  // 2º bola
  16.       Circle(x2,y2,r2);
  17.     end;
  18.  
  19.     {$IFDEF WINDOWS}{$R circulo.rc}{$ENDIF}
  20.  
  21. begin
  22.  
  23.  
  24.  Driver := Vga;                                   { Para pantalla VGA }
  25.  Modo := VgaHi;                            { Modo 640x480, 16 colores }
  26.  InitGraph(Driver, Modo, 'c:\tp\bgi');                { Inicializamos }
  27.  
  28.       x1:=160;
  29.       y1:=240;   //1º bola
  30.       r1:=30;
  31.  
  32.       x2:=480;
  33.       y2:=240;   //2º bola
  34.       r2:=30;
  35.       //x1:=-4;
  36.       //x2:=x2+4;
  37.       //y1:=y1+4;
  38.       //y2:=y2+4;
  39.  
  40. arriba:=true;
  41. derecha:=false;
  42. izquierda:=true;
  43. abajo:=false;
  44.  
  45. while true do
  46.  
  47.    begin
  48.       bola(random(16),random(16));  // Pinta bola 1 y bola 2
  49.       delay(60);  // Espera
  50.       bola(black,black); // Pinta bola 1 y dos de negro
  51.  
  52.       if derecha=false then
  53.         begin
  54.         x1:=x1-9;
  55.         end
  56.        else                             // X izquierda derecha
  57.         begin
  58.         x1:=x1+9;
  59.         end;
  60.        if arriba=true then            // BOLA 1
  61.         begin
  62.         y1:=y1-6;
  63.         end
  64.        else                             // Y arriba abajo
  65.         begin
  66.         y1:=y1+6;
  67.         end;
  68.  
  69.         if izquierda=false then
  70.         begin
  71.         x2:=x2-10;
  72.         end
  73.        else                       // X izquierda derecha
  74.         begin
  75.         x2:=x2+10;
  76.         end;
  77.        if abajo=true then                             // BOLA 2
  78.         begin
  79.         y2:=y2-5;
  80.         end
  81.        else                       // Y arriba abajo
  82.         begin
  83.         y2:=y2+5;
  84.         end;
  85.  
  86. ////////////////////////////////////
  87.  
  88.        if x1<= 0+30 then
  89.         begin
  90.         derecha:=true;
  91.         //x1:=0+30;
  92.         end                             // X izquierda derecha
  93.        else if x1>=640-30 then
  94.          begin
  95.          derecha:=false;
  96.          //x1:=640-30;
  97.          end;                                               // BOLA 1
  98.  
  99.        if y1<= 0+30 then
  100.         begin
  101.         arriba:=false;
  102.         //y1:=0+30;
  103.         end
  104.        else if y1>=480-30 then            // Y arriba abajo
  105.         begin
  106.         arriba:=true;
  107.         //y1:=480-30;
  108.         end;
  109.  
  110.        if x2<= 0+30 then
  111.         begin
  112.         izquierda:=true;
  113.         //x2:=0+30;                          // X izquierda derecha
  114.         end
  115.        else if x2>=640-30 then
  116.         begin
  117.         izquierda:=false;
  118.         //x2:=640-30;
  119.         end;                                              // BOLA 2
  120.  
  121.        if y2<= 0+30 then
  122.         begin
  123.         abajo:=false;
  124.         //y2:=0+30;
  125.         end
  126.        else if y2>=480-30 then               // Y arriba abajo
  127.         begin
  128.         abajo:=true;
  129.         //y2:=480-30;
  130.         end;
  131.  
  132.  
  133.    end;
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  Readln;                                                  { Esperamos }
  140.  CloseGraph                                              { Y se acabó }
  141. end.              

Gracias de antemano

Un saludo!!


« Última modificación: 16 Junio 2010, 04:03 am por yako-_- » En línea

Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-
IDarknightI

Desconectado Desconectado

Mensajes: 21


Netcat The Swiss Army Knife


Ver Perfil
Re: Duda con Pascal
« Respuesta #1 en: 19 Junio 2010, 23:30 pm »

http://juank.black-byte.com/xna-colisiones-2d/  esta la formula para calcular la distancia entre dos circulos, adapta el codigo a pascal. Estructura tu programa con funciones y colocalos asi:

Código:
// Esto es un pseudocodigo para que veas como se puede estructurar tu programa
// Inicia el sistema de video e inicializa variables a usar
IniciarSistema()

// Bucle infinito hasta que se presione la tecla Escape (o cualquier otra)
while(Tecla <> Esc)

    // Verificar tecla (en caso de que quieras mover los circulos o salir del programa)  
    VerificarTeclas()
    // Detectar las colisiones entre los circulos o contra la pantalla (en la pag. de arriba tienes las formulas)
    DetectarColision()
    // Dibuja la nueva posicion de los circulos de acuerdo a los calculos realizados
    DibujarCirculo()

FinWhile()


Ese es la estructura basica para detectar colisiones.


« Última modificación: 25 Agosto 2014, 08:21 am por IDarknightI » En línea

El Conocimiento ahora es libre. Compartelo!!   -   The Knowledge is now free. Share it!!
yako-_-

Desconectado Desconectado

Mensajes: 157


Heroes Del Silencio


Ver Perfil
Re: Duda con Pascal
« Respuesta #2 en: 20 Junio 2010, 02:46 am »

Gracias por la respuesta. Al final lo consegui con el siguiente código ayudado de un compañero:
Código
  1. if x2>x1 then
  2.         begin
  3.         dx:=x2-x1;
  4.         end
  5.        else
  6.         begin
  7.         dx:=x1-x2;
  8.         end;
  9.  
  10.        if y1>y2 then
  11.         begin
  12.         dy:=y1-y2;
  13.         end
  14.        else
  15.         begin
  16.         dy:=y2-y1;
  17.         end;
  18.  
  19.        if ((dx <= r1+r2) and (dy<=r1+r2)) then
  20.         begin
  21.         derecha:=true;
  22.         arriba:=false;
  23.         //izquierda:=true;
  24.         //abajo:=false;
  25.         end;        

PD: la pag que me diste no rula

Un saludo!! y gracias de nuevo por la respuesta
En línea

Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-
Malvinas

Desconectado Desconectado

Mensajes: 84


Ver Perfil WWW
Re: Duda con Pascal
« Respuesta #3 en: 20 Junio 2010, 19:40 pm »

Una aclaración: En el IF, si sólo es una Acción, no hace falta usar Begin y End.

Es decir:

Código
  1. if (Condicion) then
  2.    Accion1
  3. else
  4.    Accion2;

Saludos.
En línea

yako-_-

Desconectado Desconectado

Mensajes: 157


Heroes Del Silencio


Ver Perfil
Re: Duda con Pascal
« Respuesta #4 en: 24 Junio 2010, 06:28 am »

ok, gracias
En línea

Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con una duda en Pascal, xfa!!!!!!
Ejercicios
marmotilla 1 3,457 Último mensaje 23 Enero 2006, 06:08 am
por jvchino
Duda Pascal
Ejercicios
-iSiS- 1 3,608 Último mensaje 22 Enero 2010, 12:25 pm
por Festor
Duda pascal
Programación General
netca 4 5,306 Último mensaje 3 Abril 2011, 22:08 pm
por skapunky
duda en pascal
Programación General
General Dmitry Vergadoski 1 1,977 Último mensaje 23 Mayo 2012, 15:27 pm
por Ferno
Duda Pascal
Ejercicios
Yankris 0 2,457 Último mensaje 12 Diciembre 2015, 19:14 pm
por Yankris
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines