Página 1 de 1

Ruleta

Publicado: 28 Mar 2010, 17:28
por Juanchi
Bueno, estube programando este "juego".
Es como una ruleta de las del casino, arrancas con $2000 y la apuesta es de $100, si ganas te los suma y si perdes te los resta.
Mejor perder virtual que ir al casino :smt003 :smt003
Es algo muy simple pero es mi primer programa... jeje

El unico problema es que si perdes o si ganas se cierra, esto pasa xq para que salga del "While" tengo que poner "exit" si alguno sabe la forma de que el programa vuelva a lo que seria el "menu de apuestas" porfavor diganme...

Código: Seleccionar todo

#NoTrayIcon
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Ruleta -= By Juanchi =-", 267, 61, 192, 121)
$Button1 = GUICtrlCreateButton("Jugar", 8, 8, 121, 41, 0)
$Button2 = GUICtrlCreateButton("Salir", 136, 8, 121, 41, 0)
$Label1 = GUICtrlCreateLabel("", 16, 8, 4, 4)
GUISetState(@SW_SHOW)
$dinero = "2000"
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		case $Button1
			msgbox(0,"Dinero:","Ahora posees " & $dinero & " ,en cada apuesta perderas o ganaras $100")
			$Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 25")

while (1)
	If @error = 1 Then
		Exit
	Else
		if $Num <> Random("1","25",1) Then
			$dinero = $dinero - "100"
		msgbox(0,"Ups","Tu numero no ha salido, ahora posees: " & $dinero )
		exit
	Else
		$dinero = $dinero + "100"
		msgbox(0,"Felicidades","Has ganado!!!")
		exit
	EndIf
	endif
WEnd
case $Button2
	exit
	EndSwitch
WEnd
Otra cosa que me gustaria agregarle es que se pueda elegir la cantidad que se va a apostar...
Si alguien lo podria modificar para agregarle esas mejoras se lo agradeceria XD

Salu2!

Re: Ruleta

Publicado: 28 Mar 2010, 22:33
por XPyro
Buen código, rápido y practico si le faltan unas mejoras pero para eso es que nos apoyamos en autoIt :smt003
Mira las modificaciones que le agregue al código, se puede mejorar pero ya lo veras mas adelante:

Código: Seleccionar todo

#NoTrayIcon
#include <GUIConstants.au3>

$Form1 = GUICreate("Ruleta -= By Juanchi =-", 267, 61, 192, 121)
$Button1 = GUICtrlCreateButton("Jugar", 8, 8, 121, 41, 0)
$Label2 = GUICtrlCreateLabel("0", 175, 25, 121, 41, 0)
$Label1 = GUICtrlCreateLabel("", 16, 8, 4, 4)
GUISetState(@SW_SHOW)
$dinero = "0"

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$apuesta = InputBox("Ruleta", "¿Cuanto dinero desea apostar?")
			If @error Then
				Exit
			Else
				$dinero = $apuesta
				GUICtrlSetData($Label2, $dinero)
				MsgBox(0, "Dinero:", "Ahora posees " & $dinero & " ,en cada apuesta perderas o ganaras $100")
				_Jugar()
			EndIf
	EndSwitch
WEnd

Func _Jugar()
	If $dinero <= 0 Then ;Si el dinero se termino, salir
		MsgBox(0, "Perdiste", "Perdiste Adiós!!!!!!!!")
		Exit
	EndIf
	$Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 25")
	If @error Then
		Exit
	Else
		If $Num > 25 Then ;Si el numero es mayor que 25, repetir jugar
			MsgBox(0, "Error", "El numero es mayor que 25, ingrese otro numero")
			_Jugar()
		Else
			If $Num <> Random("1", "25", 1) Then
				$dinero = $dinero - "100"
				GUICtrlSetData($Label2, $dinero)
				MsgBox(0, "Ups", "Tu numero no ha salido, ahora posees: " & $dinero)
				_Jugar()
			Else
				$dinero = $dinero + "100"
				GUICtrlSetData($Label2, $dinero)
				MsgBox(0, "Felicidades", "Has ganado!!!")
				_Jugar()
			EndIf
		EndIf
	EndIf
EndFunc
Utilice funciones para eliminar el while y se puede cerrar cuando terminas los mensajes :smt006

Re: Ruleta

Publicado: 29 Mar 2010, 00:20
por Juanchi
Gracias XPyro, la verdad que ahora el programa hace todo lo q yo tenia pensado. :smt003
Lo voy a estudiar un poco XD
Me falta algo de practica... jeje

Menos mal que no fui a jugar al casino xq seria pobre O.o
De 20 que jugue gane una :smt009

El único error que encontre es que no arrancas con una cantidad de dinero predeterminada sino que el dinero que tenes al principio es el que escribiste, la idea era que vos arrancaras con los 2000 y de ahi te fueras manejando, si apostar 15 que ganes 15 pero esa parte creo que no la explique antes... jeje
Voy a ver si puedo corregir eso.

Salu2! :smt040

PD: Quede sorprendido, es un lenguaje muy potente (no lo digo x esto sino x un reproductor q vi O_o)

:smt039 :smt039

Re: Ruleta

Publicado: 29 Mar 2010, 00:32
por Juanchi
Aca esta corregido lo que yo queria

Código: Seleccionar todo

#NoTrayIcon
#include <GUIConstants.au3>

$Form1 = GUICreate("Ruleta -= By Juanchi =-", 267, 61, 192, 121)
$Button1 = GUICtrlCreateButton("Jugar", 8, 8, 121, 41, 0)
$Label2 = GUICtrlCreateLabel("0", 175, 25, 121, 41, 0)
$Label1 = GUICtrlCreateLabel("", 16, 8, 4, 4)
GUISetState(@SW_SHOW)
$dinero = "2000"

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Button1
         $apuesta = InputBox("Ruleta", "¿Cuanto dinero desea apostar?")
         If @error Then
            Exit
         Else
		GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Dinero:", "Ahora posees $" & $dinero & " ,en cada apuesta perderas o ganaras $" & $apuesta )
            _Jugar()
         EndIf
   EndSwitch
WEnd

Func _Jugar()
   If $dinero <= 0 Then ;Si el dinero se termino, salir
      MsgBox(0, "Perdiste", "Perdiste Adiós!!!!!!!!")
      Exit
   EndIf
   $Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 25")
   If @error Then
      Exit
   Else
      If $Num > 25 Then ;Si el numero es mayor que 25, repetir jugar
         MsgBox(0, "Error", "El numero es mayor que 25, ingrese otro numero")
         _Jugar()
      Else
         If $Num <> Random("1", "25", 1) Then
            $dinero = $dinero - $apuesta
            GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Ups", "Tu numero no ha salido, ahora posees: " & $dinero)
            Apuesta()
         Else
            $dinero = $dinero + $apuesta
            GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Felicidades", "Has ganado!!!")
            Apuesta()
         EndIf
      EndIf
   EndIf
EndFunc

Func Apuesta()
         $apuesta = InputBox("Ruleta", "¿Cuanto dinero desea apostar?")
         If @error Then
            Exit
         Else
		GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Dinero:", "Ahora posees $" & $dinero & " ,en cada apuesta perderas o ganaras $" & $apuesta )
			_Jugar()
			endif
		EndFunc
No arrancas con la plata que queres sino que empezas con $2000 y ahi te administras.
Probalo

Re: Ruleta

Publicado: 29 Mar 2010, 01:41
por XPyro
Buen trabajo Juanchi, poco a poco se aprende y con paciencia mejor :smt005

Si que es difícil atinarle pero siempre puede salir un suertudo (No es trampa) :smt005

Imagen

:smt006

Re: Ruleta

Publicado: 29 Mar 2010, 09:39
por Ximorro
Je, esto demuestra que el juego no es bueno, no me refiero a tu programa, sino a los casinos ¡seguro que te quedas pelao! ;-)

Una sugerencia, si ganas lo mismo que pierdes estás vendido, yo haría como en los casinos, que si ganas apostando a un número te da bastante más de lo que has apostado. Como la probabilidad de ganar es 1 entre 25, yo haría que cuando pierdas lógicamente pierdas lo apostado, pero cuando ganes te dé 25 veces los apostado (después de apostar, con lo que realmente son 24 veces más si primero no lo restas, que los casinos no pierden nunca, además tienen el 0 y el doble 00) ;-)
Así será más interesante.
También puedes añadir el 0 al Random, pero no se puede apostar a ese número, es el famoso "La banca gana", así se parece más a la ruleta.
Y bueno, si quieres ruleta creo que son 32 números, en vez de 25, eso es fácil de cambiar.

Muy bien el programa va mejorando, es interesante que comprendas los cambios que te han hecho, por ejemplo cómo ha hecho XPyro que se pueda hacer más de una apuesta. Si lo tomas sin mirarlo no se aprende...

Sólo una cosita, AutoIt hace cambios fácilmente de cadenas de texto a números, pero no hace falta hacerle hacer más trabajo del necesario. Hay varios sitios donde manejas valores estrictamente numéricos pero los pones entre comillas, que es lo que se usa para las cadenas.
Por ejemplo al principio:
$dinero = "2000"
mejor se pone
$dinero = 2000

o Random("1", "25", 1) es Random(1, 25, 1), pues la función recoge números.
Todo funciona porque AutoIt los traduce, pero si ponemos directamente los números le facilitamos la tarea.

En una versión anterior se hacía $dinero = $dinero + "100", funciona por la conversión automática pero también porque el operador + no hace nada con cadenas de caracteres, sino igual concatenaba en vez de sumar...

De hecho hay casos en los que hay que tener cuidado, como en las comparaciones. Si ponemos por ejemplo 10 < 4 nos dará False, como toca. Pero si ponemos "10" < "4" se obtiene TRUE porque "1" es menor que "4", da igual que haya más cifras, está comparando como si fueran letras.

Re: Ruleta

Publicado: 29 Mar 2010, 17:10
por Juanchi
Gracias Ximorro :smt003

Bueno, ya tiene 32 Numeros...
Si ganas te da la apuesta x 25 :smt003

Lo del 0 no lo entendi, nunk en mi vida fui al casino :smt044 XD
Corregi tambien lo de las comillas, aunque no fuera necesario... Para no acostumbrarme a ponerlas :smt003

Código: Seleccionar todo

#NoTrayIcon
#include <GUIConstants.au3>

$Form1 = GUICreate("Ruleta -= By Juanchi =-", 267, 61, 192, 121)
$Button1 = GUICtrlCreateButton("Jugar", 8, 8, 121, 41, 0)
$Label2 = GUICtrlCreateLabel("0", 175, 25, 121, 41, 0)
$Label1 = GUICtrlCreateLabel("", 16, 8, 4, 4)
GUISetState(@SW_SHOW)
$dinero = 2000

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Button1
         $apuesta = InputBox("Ruleta", "¿Cuanto dinero desea apostar?")
         If @error Then
            Exit
         Else
		GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Dinero:", "Ahora posees $" & $dinero & " ,en esta apuesta perderas $" & $apuesta  & " o ganaras $" & $apuesta * 25 )
            _Jugar()
         EndIf
   EndSwitch
WEnd

Func _Jugar()
   If $dinero <= 0 Then ;Si el dinero se termino, salir
      MsgBox(0, "Perdiste", "Perdiste Adiós!!!!!!!!")
      Exit
   EndIf
   $Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 32")
   If @error Then
      Exit
   Else
      If $Num > 35 Then ;Si el numero es mayor que 32, repetir jugar
         MsgBox(0, "Error", "El numero debe estar entre 1 y 32, ingrese otro numero")
         _Jugar()
      Else
         If $Num <> Random(1, 32, 1) Then
            $dinero = $dinero - $apuesta
            GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Ups", "Tu numero no ha salido, ahora posees: " & $dinero)
            Apuesta()
         Else
            $dinero = $dinero + ($apuesta * 25)
            GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Felicidades", "Has ganado!!!")
            Apuesta() ;Vuelve al menu de apuestas
         EndIf
      EndIf
   EndIf
EndFunc

Func Apuesta() ;Menu de apuestas
         $apuesta = InputBox("Ruleta", "¿Cuanto dinero desea apostar?")
         If @error Then
            Exit
         Else
		GUICtrlSetData($Label2, $apuesta)
            MsgBox(0, "Dinero:", "Ahora posees $" & $dinero & " ,en cada apuesta perderas " & $apuesta  & " o ganaras $" & $apuesta * 25 )
			_Jugar()
			endif
		EndFunc
La verdad que los dos son re buenos, y les agradezco a los dos x revisar y corregir el code :smt003

Re: Ruleta

Publicado: 30 Mar 2010, 08:32
por Ximorro
De nada, a mandar.

Lo del cero es muy fácil, pero primero hay que arreglar una cosilla. En:

Código: Seleccionar todo

If $Num > 35 Then ;Si el numero es mayor que 32, repetir jugar
  MsgBox(0, "Error", "El numero debe estar entre 1 y 32, ingrese otro numero")
  _Jugar()
Bueno primero que pones >35, cuando si son 32 pues hay que poner 32 ;-) ¿pero sabes una cosa? no lo tenía muy claro y acabo de mirarlo... ¡las ruletas de los casinos llegan hasta 36 números! No tiene mucha importancia, tu ruleta puede ser de 32, pero ya puestos pues se pone como las ruletas normales...
Pero eso es anecdótico, a lo que iba, primero que sólo compruebas el límite superior, ¿y si el usuario pone 0, y si pone -23? Eso se comprueba poniendo otra condición al If:

Código: Seleccionar todo

If $Num < 1 OR $Num > 36 Then ;Se aceptan números entre 1 y 36, inclusive
La segunda es esa manera de "reiniciar" la función _Jugar(), que la vuelves a llamar desde dentro de sí misma. Esto se llama recursividad, y aquí no es lo que buscas porque resulta que eso no aborta la ejecución de _Jugar y vuelve a empezar, sino que estás ejecutándola varias veces, tienes las anteriores en espera...
La manera de solucionarlo es poner un bucle al Inputbox para que esté preguntando hasta que la entrada sea buena. Eso se hace con un bucle do-until, por ejemplo. Así este trozo de código:

Código: Seleccionar todo

$Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 32")
If @error Then
  Exit
Else
  If $Num > 35 Then ;Si el numero es mayor que 32, repetir jugar
	 MsgBox(0, "Error", "El numero debe estar entre 1 y 32, ingrese otro numero")
	 _Jugar()
  Else
	;<<<El código del else>>>
  EndIf
EndIf
Quedaría así (Nota: lo cambio para que mire hasta 36):

Código: Seleccionar todo

$OK = False
Do
	$Num = InputBox("Ruleta", "Apuesta a un numero entre el 1 y el 36")
	If @error Then Exit
	If $Num < 1 Or $Num > 36 Then ;Se aceptan números entre 1 y 36, inclusive
		MsgBox(0, "Error", "El numero debe estar entre 1 y 36, ingrese otro numero")
	Else
		$OK = True ;Entrada correcta
	EndIf
Until $OK
;<<<El código del else>>>
Mientras la entrada no sea válida, la variable $OK estará a False y repetirá, cuando se dé una buena valdrá TRUE y el bucle saldrá.
Por cierto, si el usuario pone letras, AutoIt lo pasa a número para la comparación del IF, y como no es un número válido le da valor 0, con lo que es menor que 1 y es cazado como no válido.

Lo del cero de la ruleta es simplemente que en ese "código del else", se cambia Random(1, 36, 1) (cambiado 36), por Random(0, 36, 1), así pueden salir ceros, pero como no se puede apostar a ese número... ¡la banca gana! ;-) (igual cuando salga un cero podrías sacar ese mensaje al usuario ;-) ) Que por cierto, cuando falle podrías decir qué número ha salido, aunque no sea el cero.
Ya que ahora pueden salir 37 números (contando el cero), yo aumentaría las ganancias de $apuesta * 25 a algo más, a 30 lo menos.

¡Feliz juego!