Ir al contenido



Foto

Juego DelphiAccess, Black Jack


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

#1 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 13 abril 2010 - 03:02

Hola
Estoy pensando en que se puede hacer un juego en Lazarus.
Ademas podria servir si se hace paso a paso como tutorial.
El juego es el viejo Black Jack.
La idea es crear algo asi>
Imagen Enviada
Tambien lo pense en Delphi que seguro me sera mas facil.
Que opinais?
Alguien se apunta?
Saludos
PD: Estoy empezando por las imagenes
  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.999 mensajes
  • LocationSanto Domingo

Escrito 13 abril 2010 - 03:07

buena iniciativa, vamos a ver que sale de todo esto. Tienes todo mi respaldo.
vamos a ver si German se anota y nos ayuda con esto.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.999 mensajes
  • LocationSanto Domingo

Escrito 13 abril 2010 - 03:27

Wiki sobre manejo de graficos y componentes para manejo de graficos en Lazarus- chequear Aqui..

  • 0

#4 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 12:50

Hola
Os dejo el programa, por ahora solo es movimiento por eso es el exe, para que me critiquéis.
Lo estoy haciendo primero el delphi.
Saludos
Nota quito el exe.
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.475 mensajes
  • LocationMexico City

Escrito 14 abril 2010 - 01:02

Se ve bien amigo, pero el movimiento me parece un poco lento...  *-)

Jejejeje... y no hay variedad de cartas (broma)  :D

Saludox ! :)


  • 0

#6 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 01:03

Hola
Es que por ahora solo tengo 5 cartas.
El movimiento lo puedo hacer un poco mas rapido y un poco mas fluido.
Gracias Fena.
Saludos
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.111 mensajes
  • LocationRepública Dominicana

Escrito 14 abril 2010 - 01:28

Oye eso está excelente amigo, veo que has progresado mucho (y)
  • 0

#8 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 01:32

Hola
Gracias amigo, lo voy haciendo poco a poco.
Necesita mucho todavia, la parte de numeros etc, etc.....
Ahi voy, luego tratare de pasarlo a Lazarus y hacerlo como tuto, ya veremos.
Saludos
  • 0

#9 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 02:04

Hola
Ahi voy dandole.
Estoy creando procedimientos (si voy aprendiendo).
Cree uno para la nueva carta, otro para dar carta y ahora voy por el de numeros.
Ya puedo saber cual carta se dio por medio del nombre de la imagen.
Ahora la idea es que ese nombre (en este procedimiento) se convierta en un numero.
Si queréis el codigo lo pongo, aunque es poca cosa de momento.
Saludos
  • 0

#10 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 03:28

Hola
Os explico:
Tengo dos Timer.
Uno llama al proceso Nuevo y el otro al cartas.
En cada proceso se llama al proceso Valor.
Este proceso adquiere el Hint de la imagen el cual contiene un numero.
La idea es que se vallan sumando, pero no me lo hace.


delphi
  1. procedure TForm1.Valor;
  2. var
  3. a,b: String;
  4. begin
  5. a:= TImage(comp).Hint;
  6. Label1.Caption:= a;
  7. If Label1.Caption = '' then
  8. b:= IntToStr(StrToInt(a) + StrToInt(Label1.Caption));
  9. Label2.Caption:= b;
  10. end;


Me da la impresion de que se necesita un array.
Alguna idea?.
Saludos
  • 0

#11 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.646 mensajes
  • LocationMadrid - España

Escrito 14 abril 2010 - 03:33

No se muy bien que haces, pero me da la impresión de que la culpa es del condicional que usas. La cadena Label1.Caption nunca está vacía... ^o|



delphi
  1. If Label1.Caption = '' then
  2. b:= IntToStr(StrToInt(a) + StrToInt(Label1.Caption));



Saludos.
  • 0

#12 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 03:36

Hola
Mas que nada lo hice a manera de prueba, tambien lo hice si no era igual y nada.
La idea mas que nada es sumar dos o mas String.
El problema es que lo necesito en memoria para que se sume y no se duplique como en este caso.
Saludos


  • 0

#13 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 14 abril 2010 - 06:30

Hola
Ahora si necesito vuestra ayuda.
El programa ya cuenta, pero le faltan detalles.
Estoy trabado.
Aqui os dejo el codigo para ver en que me ayudais.
No seas asi, metedle mano.....que si me canso....... 8o|
Saludos
Nota: Quito el codigo, mas abajo esta completo.
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.461 mensajes
  • LocationMéxico

Escrito 14 abril 2010 - 06:56

Y cuales son esos detalles amigo ????

Salud OS
  • 0

#15 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 15 abril 2010 - 12:00

Si bien no tengo mucho tiempo ultimamente para colaborar y ademas, no tengo ni idea como se juega el black jack, me permito hacer algunas observaciones. Espero no lo tomes a mal, es constructivo.
Veamos el metodo TForm1.Mesa:



delphi
  1. procedure TForm1.Mesa;
  2. begin
  3.   for i := 1 to 5 do
  4.     begin
  5.     comp3 := FindComponent('M' + IntToStr(i));
  6.     If TImage(comp3).Visible = True then
  7.       begin
  8.       M1.Visible := False;
  9.       M2.Visible := False;
  10.       M3.Visible := False;
  11.       M4.Visible := False;
  12.       M5.Visible := False;
  13.       end
  14.     else
  15.       begin
  16.       Randomize;
  17.       comp4 := Form2.FindComponent('Image' + IntToStr(RandomRange(1, 6)));
  18.       M1.Picture:= TImage(comp4).Picture;
  19.       M1.Visible:= True;
  20.       end;
  21.     end;
  22. end;



1.- La variable utilizada para controlar el bucle for, es global. Esto puede resultar en comportamientos totalmente anomalos del programa, si por casualidad en mas de un procedimiento es utilizada la variable y estos se terminan llamando unos a otros.



delphi
  1. ...
  2. var
  3.   Form1: TForm1;
  4.   i: integer;
  5. ...
  6. procedure TForm1.Mesa;
  7. begin
  8.   for i := 1 to 5 do
  9. ...



Siempre utiliza variables locales para controlar bucles.



delphi
  1. ...
  2. procedure TForm1.Mesa;
  3. var
  4.   i: integer;
  5. begin
  6.   for i := 1 to 5 do
  7. ...



2.- En las comparativas por valores logicos, utiliza directamente el valor, no hace falta el operador relacional:



delphi
  1. ...
  2.     If TImage(comp3).Visible = True then
  3. ...



Es mas simple y eficiente asi:



delphi
  1. ...
  2.     If TImage(comp3).Visible then
  3. ...



3.- No entiendo para que en cada buelta del bucle, vuelves a poner invisibles todas las imagenes:



delphi
  1. ...
  2.   for i := 1 to 5 do
  3.     begin
  4.     comp3 := FindComponent('M' + IntToStr(i));
  5.     If TImage(comp3).Visible = True then
  6.       begin
  7.       M1.Visible := False;
  8.       M2.Visible := False;
  9.       M3.Visible := False;
  10.       M4.Visible := False;
  11.       M5.Visible := False;
  12.       end
  13. ...



No deberia ser algo asi?:



delphi
  1. ...
  2.   for i := 1 to 5 do
  3.     begin
  4.     comp3 := FindComponent('M' + IntToStr(i));
  5.     If TImage(comp3).Visible then
  6.       TImage(comp3).Visible := False;
  7. ...



4.- Utiliza estructuras mas adecuadas para manejar la informacion:



delphi
  1.     comp3 := FindComponent('M' + IntToStr(i));
  2.     If TImage(comp3).Visible = True then
  3.       begin
  4.       M1.Visible := False;
  5.       M2.Visible := False;
  6.       M3.Visible := False;
  7.       M4.Visible := False;
  8.       M5.Visible := False;
  9.       end



Es medio rebuscado, preferiblemente declara un arreglo de cinco elementos de tipo imagen, crea los controles por codigo y podras manejarlos de forma mas simple:



delphi
  1. ...
  2. var
  3.   Imagenes:array[1..5]of TImage;
  4. ...
  5. procedure TForm1.Nueva;
  6. var
  7.   Imagen:TImage;
  8. begin
  9.   for i := Low(Imagenes) to High(Imagenes)do
  10.     begin
  11.     Imagen := Imagenes[i];
  12.     if Imagen.Visible then
  13.       Imagen.Visible := False;
  14. ...



Espero sume.

Saludos.
  • 0

#16 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 15 abril 2010 - 01:01

Hola
Muchas gracias amigo German, muy útiles los consejos, lo voy a poner en practica.
Saludos
  • 0

#17 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 15 abril 2010 - 03:40

Hola
Ahora ya esta listo, hasta donde doy. *-)

Como se juega:
La idea del juego es llegar lo mas cerca de 21 (o 21), sin pasarse y que la mesa tenga lo mismo (empate) o se pase de 21 para poder ganarle.

Para empezar hay que presionar NUEVO, esto genera dos cartas para el jugador y una para la mesa.
A la izquierda esta el valor de las cartas, en este caso (Jugador = 5) y (mesa = 6).
Imagen Enviada

El jugador tiene la posibilidad de quedarme, osea no pedir mas cartas cuando lo quiera
En este caso pide y para eso presiona el Boton Carta, con lo cual le entregan una mas y aumenta el valor de la cartas a la izquierda.
Imagen Enviada

Como 9 es poco o esta lejos de 21 pide otra carta, igualmente presionando el boton Carta:
Imagen Enviada

Bueno, ahora si tiene suficiente ya que si pide otra puede pasarse de 21 y pierde.
Entonces se decide Parar y presionamos el boton Parar.
Esto generara las cartas a la mesa.
Como ven en este caso la mesa se paso de 21 (obtuvo 24) y envia un mensaje indicando que el jugador gano.
Imagen Enviada

La única manera de que la mesa pare de dar cartas es que,
o empate o gane, si tiene menos que el jugador tiene que recibir mas cartas,
esto lo hace sola, no hay que presionar nada.


Bueno espero os guste.
Dejo el codigo como siempre.
Saludos

PD: No explico que hace el boton cerrar para daros tarea. ;)

Archivos adjuntos


  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.461 mensajes
  • LocationMéxico

Escrito 15 abril 2010 - 03:52

Felicidades Carlos, esta muy interesante el juego (y)

Salud OS

PD; quise decir esta genial, impresionante para un novato como tú :D :D :D :p
  • 0

#19 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.073 mensajes
  • LocationRepública Dominicana

Escrito 15 abril 2010 - 04:02

Saludos.

Me imagino que en la versión 5.5.9578 vendrá con soporte para "apuesta" y según recuerdo cuando doblas la apuesta te sale otra "casilla" donde seleccionar carta igual como la primera entonces ambas "casillas" se toman en cuenta para ganarle a la mesa.

No se suman sino que ambas son distintas y se comparan, creo recordar.
  • 0

#20 Caral

Caral

    Advanced Member

  • Administrador
  • 4.218 mensajes
  • LocationCosta Rica

Escrito 15 abril 2010 - 04:07

Hola

Saludos.

Me imagino que en la versión 5.5.9578 vendrá con soporte para "apuesta" y según recuerdo cuando doblas la apuesta te sale otra "casilla" donde seleccionar carta igual como la primera entonces ambas "casillas" se toman en cuenta para ganarle a la mesa.

No se suman sino que ambas son distintas y se comparan, creo recordar.

Si amigo, asi se juega, pero la version 5.5.9578 tendra que esperar al programador adecuado por que este novato no llega mas alla. :
Ahi dejo el codigo para algun valiente, yo estuve a punto de  8o|  :D :D
Saludos
  • 0