Juego DelphiAccess, Black Jack
#1
Escrito 13 abril 2010 - 03:02
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>
Tambien lo pense en Delphi que seguro me sera mas facil.
Que opinais?
Alguien se apunta?
Saludos
PD: Estoy empezando por las imagenes
#2
Escrito 13 abril 2010 - 03:07
vamos a ver si German se anota y nos ayuda con esto.
#3
Escrito 13 abril 2010 - 03:27
#4
Escrito 14 abril 2010 - 12:50
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.
#5
Escrito 14 abril 2010 - 01:02
Jejejeje... y no hay variedad de cartas (broma)
Saludox !
#6
Escrito 14 abril 2010 - 01:03
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
#7
Escrito 14 abril 2010 - 01:28
#8
Escrito 14 abril 2010 - 01:32
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
#9
Escrito 14 abril 2010 - 02:04
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
#10
Escrito 14 abril 2010 - 03:28
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.
procedure TForm1.Valor; var a,b: String; begin a:= TImage(comp).Hint; Label1.Caption:= a; If Label1.Caption = '' then b:= IntToStr(StrToInt(a) + StrToInt(Label1.Caption)); Label2.Caption:= b; end;
Me da la impresion de que se necesita un array.
Alguna idea?.
Saludos
#11
Escrito 14 abril 2010 - 03:33
If Label1.Caption = '' then b:= IntToStr(StrToInt(a) + StrToInt(Label1.Caption));
Saludos.
#12
Escrito 14 abril 2010 - 03:36
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
#13
Escrito 14 abril 2010 - 06:30
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.......
Saludos
Nota: Quito el codigo, mas abajo esta completo.
#14
Escrito 14 abril 2010 - 06:56
Salud OS
#15
Escrito 15 abril 2010 - 12:00
Veamos el metodo TForm1.Mesa:
procedure TForm1.Mesa; begin for i := 1 to 5 do begin comp3 := FindComponent('M' + IntToStr(i)); If TImage(comp3).Visible = True then begin M1.Visible := False; M2.Visible := False; M3.Visible := False; M4.Visible := False; M5.Visible := False; end else begin Randomize; comp4 := Form2.FindComponent('Image' + IntToStr(RandomRange(1, 6))); M1.Picture:= TImage(comp4).Picture; M1.Visible:= True; end; end; 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.
... var Form1: TForm1; i: integer; ... procedure TForm1.Mesa; begin for i := 1 to 5 do ...
Siempre utiliza variables locales para controlar bucles.
... procedure TForm1.Mesa; var i: integer; begin for i := 1 to 5 do ...
2.- En las comparativas por valores logicos, utiliza directamente el valor, no hace falta el operador relacional:
... If TImage(comp3).Visible = True then ...
Es mas simple y eficiente asi:
... If TImage(comp3).Visible then ...
3.- No entiendo para que en cada buelta del bucle, vuelves a poner invisibles todas las imagenes:
... for i := 1 to 5 do begin comp3 := FindComponent('M' + IntToStr(i)); If TImage(comp3).Visible = True then begin M1.Visible := False; M2.Visible := False; M3.Visible := False; M4.Visible := False; M5.Visible := False; end ...
No deberia ser algo asi?:
... for i := 1 to 5 do begin comp3 := FindComponent('M' + IntToStr(i)); If TImage(comp3).Visible then TImage(comp3).Visible := False; ...
4.- Utiliza estructuras mas adecuadas para manejar la informacion:
comp3 := FindComponent('M' + IntToStr(i)); If TImage(comp3).Visible = True then begin M1.Visible := False; M2.Visible := False; M3.Visible := False; M4.Visible := False; M5.Visible := False; 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:
... var Imagenes:array[1..5]of TImage; ... procedure TForm1.Nueva; var Imagen:TImage; begin for i := Low(Imagenes) to High(Imagenes)do begin Imagen := Imagenes[i]; if Imagen.Visible then Imagen.Visible := False; ...
Espero sume.
Saludos.
#16
Escrito 15 abril 2010 - 01:01
Muchas gracias amigo German, muy útiles los consejos, lo voy a poner en practica.
Saludos
#17
Escrito 15 abril 2010 - 03:40
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).
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.
Como 9 es poco o esta lejos de 21 pide otra carta, igualmente presionando el boton Carta:
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.
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
#18
Escrito 15 abril 2010 - 03:52
Salud OS
PD; quise decir esta genial, impresionante para un novato como tú
#19
Escrito 15 abril 2010 - 04:02
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.
#20
Escrito 15 abril 2010 - 04:07
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.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.
Ahi dejo el codigo para algun valiente, yo estuve a punto de
Saludos