Ir al contenido



Foto

¿Quien me podria ayudar a crear un juego en aplicacion de consola en delphi?


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

#1 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 03:16

Se trata sobre el clasico juego Galaxians, que me han mandado en clase.. soy novato en programar sobre este ambiente delphi y no tengo idea como realizarlo si son tan amables me ayudarian por favor me hurge saberlo como se hace... y aprender mas sobre este tema....
Gracias de antemano, por sus colaboraciones y ayuda!!!!! ando en desesperacion  :
  • 0

#2 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 18 febrero 2009 - 03:20

Hola
Bienvenido Shido
Pregunto:
Tienes algo adelantado?,
has hecho en delphi algo o apenas lo vas a hacer?.
Saludos
  • 0

#3 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 598 mensajes

Escrito 18 febrero 2009 - 03:21

Y... este juego debe ser en consola? :o
  • 0

#4 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 03:38

muchas gracias por la bienvenida, no tengo nada hecho todavia y es obligatorio en consola, no en otro tipo de forma
  • 0

#5 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 598 mensajes

Escrito 18 febrero 2009 - 03:42

...es obligatorio en consola, no en otro tipo de forma

:^)Imagen Enviada :o
  • 0

#6 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 03:44

en efecto asi mismo en consola de delphi......  :
  • 0

#7 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 598 mensajes

Escrito 18 febrero 2009 - 03:48

No me imagino cómo un juego que es gráfico (con naves disparando a monstruos), se puede representar con el juego de caracteres ASCII. A pesar que hablemos de Turbo Pascal y debamos usar el egavga.bgi (por ejemplo) y desarrollar el entorno grafico.
  • 0

#8 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 03:54

bueno asi me diejeron que realizara, digame usted que tiene mas experiencia que yo es imposible hacerlo de ese metodo????......

si es asi me podria decir como hacerlo siempre que sea de delphi...
porque mire lo que me han dicho realizar un juego donde un objeto circular se mueva y le dispares y explote asi al estilo del juego Galaxian... me parecio algo alocado que nos mandara ese tipo de programas si apenas estamos iniciando a progrmar en este ambiente, pero lo ha mandado.....

haber que opinan ustedes???
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.404 mensajes
  • LocationRepública Dominicana

Escrito 18 febrero 2009 - 04:21

Yo creo que deberías de protestar, eso no es enseñar eso es mandarlos a quemar la materia directo, eso que pide es demasiado avanzado para un novato, yo que tengo 3 años programando Delphi no llego a ese punto, claro cada quien tiene su area.

Saludos.
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.979 mensajes
  • LocationMéxico

Escrito 18 febrero 2009 - 04:24

Hola Shido

Bienvenido a la comunidad, en realidad si es un poco extremo que te hayan pedido este programa, pero bueno, ya veremos que se puede hacer.

Salud OS
  • 0

#11 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 04:37

jajaja imaginate las clase que nos dan de programacion es muy basica el nos manda ah que hagamos los programas nosotros mismo como un ejemplo de esto es asi.....

nos coloca un programa sencillo por consola en delphi, que haga una sumatoria del 1 al 20, y nos pide que la copie.. y todo va bien hasta ese punto... despues nos manda 20 programas de tarea que realicemos que haga sumatoria de numeros impares, que saque raiz cuadrada, que sume y reste dos valores, y otras cosas mas que tiene un grado de dificultad... pero con suerte he podido salir adelante, pero con este ultimo programa me mato :D.....

y muchas gracias por su ayuda de verdad, me haran de mucha ayudas sus conociemientos para mi ^_^
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.260 mensajes
  • LocationArgentina

Escrito 18 febrero 2009 - 05:24

Hola Shido,
Bienvenido... se me hace conocida la pregunta... creo que vienes desde YR ¿O me equivoco ;)? No te preocupes... alguien me dijo que podrías venir para acá ;).

Bueno, veamos... de que va a ser complicado no lo discuto. Más no será imposible.
Lo primero es delimitar hasta donde quieres llegar:
¿Debe moverse para todos lados? ¿Arriba y abajo solamente, algo como 2D-plataforma?
¿Que los asteorides vengan de a uno? ¿De a muchos?

Ve empezando de lo más simple y luego ve haciendolo más completo y complejo.
Olvida por ahora la parte "gráfica". Concentra esfuerzo en la lógica.
Por empezar que el objetivo haga movimientos lineales (nada curvo) y encontrar la forma de implementar las colisiones:
1. La colisión del disparo contra el asteroide
2. La colsión del asteroide contra la nave

El tema de la explosión se puede obviar. Con hacerlo desaparecer bastará por ahora.

Luego se puede ir pensando en los carácteres ASCII que más hagan juego. Un simple * por ahora bastará.

Antes que nada... ¿Hasta donde llegan tus conocimientos? ¿Registros o Records? ¿Sabes vectores? ¿Matrices?
Cuentanos más o menos como es que lo estás imaginando, desde un aspecto lógico.

Por mi parte representaría al mapa como una matriz y ubicaría los objetos en base a dos coordenadas. Un desplazamiento los haría mover hacia una nueva posición de la matriz. Es más, la pantalla no deja de ser una matriz ;).

Por el otro lado tendría un vector que almacene las posiciones de los asteroides y su tamaño.

Inicialmente se puede hacer que los objetos no puedan salir de la matriz.
Espero que algunos de estos tips te hayan sido de ayuda.

¿Es ese juego... o estoy equivocado? :s
De todas formas a mi modo de ver, no interesa el juego... matrices, vectores y records son necesarios ;).

Saludos,
  • 0

#13 Shido

Shido

    Member

  • Miembros
  • PipPip
  • 15 mensajes
  • LocationDetras De Ti!!!!

Escrito 18 febrero 2009 - 05:37

bueno lo que queria es de una logica sencilla, nada tan complicado solo quiero que se mueva a los  lados y dispare algunos metioritos y ya, y haga record de disparos (como puntuanciones y cosas asi) y mis conocimientos con respecto a eso :s me dio dolor de cabeza jajajaj es  muy basico....

y YR me recomendaron entrar a este foro, y me dijo que aqui me podrian ayudar en lo que se pueda XD!!!!
  • 0

#14 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.260 mensajes
  • LocationArgentina

Escrito 18 febrero 2009 - 07:29

Bueno,... a decir verdad es que si no tienes algo más o menos sólido en como emplear records, matrices o vectores... digamos que mucho no se puede hacer, sobre todo si deseas algo medianamente simple, pero tirando a lo complejo.

Lo que más emborroso y peliagudo se me hace que es el refrescando la pantalla... y escribir en ella. Desearía que fuera Pascal... allí con GotoXY() (creo que era esa.. o era Goto()) medio listo el pollo... ¿pero aquí :s?

Saludos,

  • 0

#15 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 18 febrero 2009 - 07:30

Hola
No se como hacer nada en consola, pero si necesitas hacer algo sencillo directo en Delphi, pues estoy para ayudar.
Saludos
  • 0

#16 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 598 mensajes

Escrito 18 febrero 2009 - 08:02



delphi
  1. program Galaxians;
  2.  
  3. uses Windows; {$apptype console}
  4.  
  5. var Screen: array [0..80 * 25 - 1] of TCharInfo;
  6.  
  7. procedure WriteXY(const X, Y: SmallInt; AsciiChar: Char; Attributes: Word = 0);
  8. var Index: Cardinal;
  9. begin
  10. Index := Y * 80 + X;
  11. Screen[Index].AsciiChar := AsciiChar;
  12. Screen[Index].Attributes := Attributes;
  13. end;
  14.  
  15. var
  16. hInput, hOutput, Direction: Integer;
  17. gun, Count, Dummy, Index, Aliens, ET: Cardinal;
  18. Item, Alien: array [0..$FF] of TCoord;
  19. InputRecord: TInputRecord;
  20. Crash, Flag: Boolean;
  21.  
  22. Rect: TSmallRect = (Left: 0; Top: 0; Right: 79; Bottom: 24);
  23. ConsoleCursorInfo: TConsoleCursorInfo = (dwSize: 1);
  24.  
  25. begin
  26. hInput := GetStdHandle(STD_INPUT_HANDLE);
  27. hOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  28. SetConsoleCursorInfo(hOutput, ConsoleCursorInfo);
  29. SetConsoleTitle('Galaxians into Console by cHackAll');
  30.  
  31. Aliens := 0;
  32. for Index := 1 to 6 do
  33.   for gun := 0 to (7 - Index) * 8 do
  34.   begin
  35.     Alien[Aliens].X := 12 + (Index * 4) + gun;
  36.     Alien[Aliens].Y := Index - 1;
  37.     Inc(Aliens);
  38.   end;
  39.  
  40. gun := 40;
  41. Count := 0;
  42. Direction := 1;
  43.  
  44. repeat Sleep(27);
  45.   Flag := not Flag;
  46.   GetNumberOfConsoleInputEvents(hInput, Dummy);
  47.   if (Dummy <> 0) and ReadConsoleInput(hInput, InputRecord, 1, Dummy) and (InputRecord.EventType = KEY_EVENT) and (InputRecord.Event.KeyEvent.bKeyDown) then
  48.   case InputRecord.Event.KeyEvent.wVirtualKeyCode of
  49.     VK_LEFT: if gun > 0 then Dec(gun);
  50.     VK_RIGHT: if gun < 79 then Inc(gun);
  51.     VK_SPACE: begin
  52.               Item[Count].X := gun;
  53.               Item[Count].Y := 24;
  54.               Inc(Count);
  55.               end;
  56.   end;
  57.  
  58.   FillChar(Screen, SizeOf(Screen), 0);
  59.  
  60.   Index := Aliens;
  61.   Crash := (Direction mod 2) = 0;
  62.   while Index > 0 do
  63.   begin Dec(Index);
  64.     if Crash or Flag then
  65.     case Direction of
  66.       0, 2: Inc(Alien[Index].Y);
  67.       1: begin
  68.           Inc(Alien[Index].X);
  69.           if Alien[Index].X = Rect.Right then
  70.           Crash := True;
  71.         end;
  72.       3: begin
  73.           Dec(Alien[Index].X);
  74.           if Alien[Index].X = Rect.Left then
  75.           Crash := True;
  76.         end;
  77.     end;
  78.     if (Alien[Index].Y = 23) and (Alien[Index].X = gun) then
  79.     begin
  80.       MessageBox(0, 'Looser!', nil, MB_ICONEXCLAMATION);
  81.       Exit;
  82.     end;
  83.     WriteXY(Alien[Index].X, Alien[Index].Y, #1, 3);
  84.   end;
  85.   if Crash then
  86.   Direction := (Direction + 1) mod 4;
  87.  
  88.   Index := Count;
  89.   while Index > 0 do
  90.   begin Dec(Index);
  91.     Dec(Item[Index].Y);
  92.     WriteXY(Item[Index].X, Item[Index].Y, #4, 8);
  93.     ET := Aliens;
  94.     while ET > 0 do
  95.     begin Dec(ET);
  96.       Crash := PCardinal(@Alien[ET])^ = PCardinal(@Item[Index])^;
  97.       if Crash then
  98.       begin
  99.         Dec(Aliens);
  100.         Alien[ET] := Alien[Aliens];
  101.         Break;
  102.       end;
  103.     end;
  104.     if Crash or (Item[Index].Y = 0) then
  105.     begin
  106.       Dec(Count);
  107.       Item[Index] := Item[Count];
  108.     end;
  109.   end;
  110.  
  111.   WriteXY(gun, 23, #$1E, $F);
  112.   WriteXY(gun, 24, #$DF, $F);
  113.  
  114.   Inc(Rect.Right); Inc(Rect.Bottom);
  115.   WriteConsoleOutput(hOutput, @Screen, PCoord(@Rect.Right)^, PCoord(@Rect)^, Rect);
  116. until (InputRecord.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE) or (Aliens = 0);
  117. if Aliens = 0 then MessageBeep(0);
  118. end.

Archivos adjuntos


  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.979 mensajes
  • LocationMéxico

Escrito 18 febrero 2009 - 08:08

Vaya,

Que Chido quedo eso amigo cHackAll, ahora solo espero que el profe no le salga conque lo copio  :p

Salud OS

[off-topic]Seria bueno que Shido nos comentara que es lo que entiende en eso, porque a mi me costo un poco de trabajo :p[/off-topic]
  • 0

#18 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 18 febrero 2009 - 08:09

Hola
Para variar solo puedo decir lo de siempre:
Eres un Maestro amigo. (y) (b)
Lo malo es que al final el programa tiene un Bug, (Me dijo Loser). :
Con este programa le dan a Shido el año entero libre. :D
Saludos

  • 0

#19 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 18 febrero 2009 - 08:16

Hola

................

[off-topic]Seria bueno que Shido nos comentara que es lo que entiende en eso, porque a mi me costo un poco de trabajo :p[/off-topic]


Yo del codigo entendi esta parte:


delphi
  1. SetConsoleTitle('Galaxians into Console by cHackAll');


Estoy aprendiendo mucho. :D (y)
Saludos
  • 0

#20 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.260 mensajes
  • LocationArgentina

Escrito 18 febrero 2009 - 08:17

¡Joder! ¡En cuanto tiempo lo hiciste! :|

Yo no me pelié con consola nunca, me estaba informando al respecto y luego me encuentro con tu obra maestra.

Tengo que reconocer que esto se me hace más difícil que el chino, pero de que funciona, funciona.

Ahora... que tanto de ésto Shido entenderá... pues no se...
A me late que por "Delphi" quiso decir Pascal. Porque a modo de práctica, en consola y con Delphi es un ejercicio por demás exigente... si fuera Pascal, con unas cuantas GotoXY y unas ClrScr lo saco.

Yo estaba pensando en buscar alguna unidad equivalente a crt para Delphi :p

Saludos,
  • 0