¿Quien me podria ayudar a crear un juego en aplicacion de consola en delphi?
#1
Escrito 18 febrero 2009 - 03:16
Gracias de antemano, por sus colaboraciones y ayuda!!!!! ando en desesperacion
#2
Escrito 18 febrero 2009 - 03:20
Bienvenido Shido
Pregunto:
Tienes algo adelantado?,
has hecho en delphi algo o apenas lo vas a hacer?.
Saludos
#3
Escrito 18 febrero 2009 - 03:21
#4
Escrito 18 febrero 2009 - 03:38
#5
Escrito 18 febrero 2009 - 03:42
:^)...es obligatorio en consola, no en otro tipo de forma
#6
Escrito 18 febrero 2009 - 03:44
#7
Escrito 18 febrero 2009 - 03:48
#8
Escrito 18 febrero 2009 - 03:54
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???
#9
Escrito 18 febrero 2009 - 04:21
Saludos.
#10
Escrito 18 febrero 2009 - 04:24
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
#11
Escrito 18 febrero 2009 - 04:37
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 .....
y muchas gracias por su ayuda de verdad, me haran de mucha ayudas sus conociemientos para mi ^_^
#12
Escrito 18 febrero 2009 - 05:24
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?
De todas formas a mi modo de ver, no interesa el juego... matrices, vectores y records son necesarios .
Saludos,
#13
Escrito 18 febrero 2009 - 05:37
y YR me recomendaron entrar a este foro, y me dijo que aqui me podrian ayudar en lo que se pueda XD!!!!
#14
Escrito 18 febrero 2009 - 07:29
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í ?
Saludos,
#15
Escrito 18 febrero 2009 - 07:30
No se como hacer nada en consola, pero si necesitas hacer algo sencillo directo en Delphi, pues estoy para ayudar.
Saludos
#16
Escrito 18 febrero 2009 - 08:02
program Galaxians; uses Windows; {$apptype console} var Screen: array [0..80 * 25 - 1] of TCharInfo; procedure WriteXY(const X, Y: SmallInt; AsciiChar: Char; Attributes: Word = 0); var Index: Cardinal; begin Index := Y * 80 + X; Screen[Index].AsciiChar := AsciiChar; Screen[Index].Attributes := Attributes; end; var hInput, hOutput, Direction: Integer; gun, Count, Dummy, Index, Aliens, ET: Cardinal; Item, Alien: array [0..$FF] of TCoord; InputRecord: TInputRecord; Crash, Flag: Boolean; Rect: TSmallRect = (Left: 0; Top: 0; Right: 79; Bottom: 24); ConsoleCursorInfo: TConsoleCursorInfo = (dwSize: 1); begin hInput := GetStdHandle(STD_INPUT_HANDLE); hOutput := GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(hOutput, ConsoleCursorInfo); SetConsoleTitle('Galaxians into Console by cHackAll'); Aliens := 0; for Index := 1 to 6 do for gun := 0 to (7 - Index) * 8 do begin Alien[Aliens].X := 12 + (Index * 4) + gun; Alien[Aliens].Y := Index - 1; Inc(Aliens); end; gun := 40; Count := 0; Direction := 1; repeat Sleep(27); Flag := not Flag; GetNumberOfConsoleInputEvents(hInput, Dummy); if (Dummy <> 0) and ReadConsoleInput(hInput, InputRecord, 1, Dummy) and (InputRecord.EventType = KEY_EVENT) and (InputRecord.Event.KeyEvent.bKeyDown) then case InputRecord.Event.KeyEvent.wVirtualKeyCode of VK_LEFT: if gun > 0 then Dec(gun); VK_RIGHT: if gun < 79 then Inc(gun); VK_SPACE: begin Item[Count].X := gun; Item[Count].Y := 24; Inc(Count); end; end; FillChar(Screen, SizeOf(Screen), 0); Index := Aliens; Crash := (Direction mod 2) = 0; while Index > 0 do begin Dec(Index); if Crash or Flag then case Direction of 0, 2: Inc(Alien[Index].Y); 1: begin Inc(Alien[Index].X); if Alien[Index].X = Rect.Right then Crash := True; end; 3: begin Dec(Alien[Index].X); if Alien[Index].X = Rect.Left then Crash := True; end; end; if (Alien[Index].Y = 23) and (Alien[Index].X = gun) then begin MessageBox(0, 'Looser!', nil, MB_ICONEXCLAMATION); Exit; end; WriteXY(Alien[Index].X, Alien[Index].Y, #1, 3); end; if Crash then Direction := (Direction + 1) mod 4; Index := Count; while Index > 0 do begin Dec(Index); Dec(Item[Index].Y); WriteXY(Item[Index].X, Item[Index].Y, #4, 8); ET := Aliens; while ET > 0 do begin Dec(ET); Crash := PCardinal(@Alien[ET])^ = PCardinal(@Item[Index])^; if Crash then begin Dec(Aliens); Alien[ET] := Alien[Aliens]; Break; end; end; if Crash or (Item[Index].Y = 0) then begin Dec(Count); Item[Index] := Item[Count]; end; end; WriteXY(gun, 23, #$1E, $F); WriteXY(gun, 24, #$DF, $F); Inc(Rect.Right); Inc(Rect.Bottom); WriteConsoleOutput(hOutput, @Screen, PCoord(@Rect.Right)^, PCoord(@Rect)^, Rect); until (InputRecord.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE) or (Aliens = 0); if Aliens = 0 then MessageBeep(0); end.
Archivos adjuntos
#17
Escrito 18 febrero 2009 - 08:08
Que Chido quedo eso amigo cHackAll, ahora solo espero que el profe no le salga conque lo copio
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 [/off-topic]
#18
Escrito 18 febrero 2009 - 08:09
Para variar solo puedo decir lo de siempre:
Eres un Maestro amigo.
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.
Saludos
#19
Escrito 18 febrero 2009 - 08:16
................
[off-topic]Seria bueno que Shido nos comentara que es lo que entiende en eso, porque a mi me costo un poco de trabajo [/off-topic]
Yo del codigo entendi esta parte:
SetConsoleTitle('Galaxians into Console by cHackAll');
Estoy aprendiendo mucho.
Saludos
#20
Escrito 18 febrero 2009 - 08:17
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
Saludos,