Saltar al contenido

Un juego solitario


pegones1

Recommended Posts

publicado

rolano, a Excel 2003 hay que dárselo masticado:

Tapete.Pictures(Application.Caller).select
Selection.ShapeRange.ZOrder msoBringToFront
[/CODE]

Gerson ya se que lo haces con buena voluntad.

Para ser β-tester hay que ser más explícito, indicando la rutina y la sentencia dónde se produce el error.

Como sólo tengo instalado el visor de Excel 2003, no puedo ver las macros corriendo y es cómo si estuviera en la pista de carreras dando palos de ciego.

[color=navy]Solitario en construcción, ¡disculpen las molestias![/color]

SOLITARIO_PW12.zip

publicado

Pedro

Me he llevado una sorpresa con 2007, una vez comienza a cargar, me muestra el error:

unaCarta = Baraja.Cells((contCarta - 1) * 6 + 9, 1).Value
.Name = unaCarta
[COLOR=Red][B].Formula = FormulaCarta(contCarta, VisionCarta)[/B][/COLOR][/CODE]

Y doy clic en "Finalizar" y otro error:

[CODE]Sub BorrarFormulas()
Dim numImagen As Integer

With Tapete
For numImagen = 1 To .Pictures.Count
[COLOR=Red] [B] .Pictures(numImagen).Formula = ""[/B][/COLOR]
Next
End With
End Sub[/CODE]

Y sabes que? en 2003 parece funcionar todo bien, hasta que deseo dar a la baraja, para continuar buscando alguna que se me haya escapado, a menos que sea una limitante de tu gran desarrollo y debo de reiniciar el juego?

Saludos

publicado

Gerson, por supuesto que se puede acabar la partida del solitario y buscar las cartas dando la vuelta al montón de arriba a la izquierda. Por favor, dime la subrutina y la instrucción a depurar en Excel 2003 o mejor inténtalo tu mismo y me lo cuentas.

Eso sí, por lo que cuentas hasta ahora sólo se puede jugar al solitario en Excel 2010 porque también es una sorpresa para mí lo que te pasa en Excel 2007, justo al cargar la Formula en los objetos Picture que son el kit de la cuestión para visualizar las 52 cartas en el tapete.

Me siento muy enojado con la presunta compatibilidad de las versiones de Excel pero aún más con todas las incompatibilidades de VBA. Hay más herramientas de compatibilidad para usar versiones de Office anteriores en las nuevas que para diseñar en sentido contrario.

Gerson, ¿sabes de que se me queja el Inspector, del método select y de las propiedades top y left. ¿Qué hago? ¿los quito y dejo de seleccionar y mover las cartas?

¡ES ABSURDO!

¿Cuántas sorpresas más nos tiene deparadas Micro$oft Office?

La Guía de evaluación y corrección de compatibilidad de aplicaciones para Office 2010 nos indica el camino a seguir para no perdernos en cuanto a:

Comprobación de macros y scripts:

Ee819096.69d84bf6-94e3-4619-a5be-3eb3e129705c(es-es,office.14).gif

Macronianos y Formulianos unidos, ¡¡¡jamás serán vencidos!!!

publicado

Pedro

Gerson, ¿sabes de que se me queja el Inspector, del método select y de las propiedades top y left. ¿Qué hago? ¿los quito y dejo de seleccionar y mover las cartas?

¡ES ABSURDO!

Sabes que debemos hacer todos (bueno lo que siempre busca M.O.) que nos actualicemos, pero Excel 2007 si que me ha avergonzado con tanto error, y bueno 2003 parece superarlo testeando tu pintura, dejame ver que puedo hacer con el error (al llegar a casa), aunque me da terror tocar tu magiaexcelarte jeje

Saludos

publicado

Pedro

Que puedo decir.... estoy un poco mudo y con la boca abierta, funciona perfecto!!!

Pero lamentablemente encontre un pero, no me deja apilar el 4-3 en 10-5, observa la imagen (cuando arrastro y la suelto me la regresa donde estaba, o sea al tercer palo)

[ATTACH]22186.vB[/ATTACH]

Saludos mi estimado y gracias por tomarte las molestias:)

edito: sigo jugando y bueno parece que es un fallo (no error), desde la baraja intento mover el 6 de corazones debajo del 7 trebol pero no me deja:mad:

post-9328-145877002711_thumb.jpg

publicado

Gerson, si que deja, lo que pasa es que hay que arrastrar el grupo de cartas un poco a la izquierda, al nivel del 10 de la imagen. Si se arrastra y suelta hacia la derecha se sale de los márgenes prefijados en la subrutina ReglasJuego del módulo modReglas que chequea dónde se sueltan las cartas. He modificado estos valores:

                            Select Case finLeft
Case 5 To 91
columna = 1
Case 149 To 235
columna = 2
Case 293 To 379
columna = 3
Case 437 To 523
columna = 4
Case 581 To 667
columna = 5
Case 725 To 811
columna = 6
Case 869 To 955
columna = 7
Case Else
columna = 0
End Select[/CODE]

Debería relacionarlos con la hoja de posiciones izquierdas de las cartas, [b]CartasLeft[/b], pero lo dejo para una próxima mejora.

Subo estos casos modificados para abrir el abanico donde soltar las cartas y ahora espero que, como [b]el mejor β-tester[/b] de este juego, puedas finalizar una partida en solitario. :mad:

SOLITARIO_PW21.zip

publicado

Gracias Gerson, te diré que en Excel 2003 hace falta presionar más de una vez una carta vuelta para poder arrastrarla.

Si miras las macros, verás que lo que en Excel 2010 se consigue sin seleccionar la carta, en Excel 2003 hace falta un Select antes de cambiar la fórmula de la imagen.

Esto se ve sobre todo en la rutina PilaCartas del módulo modReglas

        If esExcel2003 Then
Tapete.Shapes(unaCarta).Select
Selection.Formula = FormulaCarta(numCarta, False)
Else
Tapete.Pictures(unaCarta).Formula = FormulaCarta(numCarta, False)
End If[/CODE]

Si alguien sabe como resolverlo le agradecería que no se callara...

publicado

Pedro, un trabajo muy bueno.

Efectivamente no iban con 2000, 2003 ni 2007 en la primera version, pero si que va bien con la ultima version. No puedo decirte en publico nada que no te haya dicho nadie, excepto esto, soltar la carta en el monton me ha dejado boquiabierto, te ha quedado perfecto y me habria encantado descifrarlo, Eres un makina amigo.

Sobre lo de clickar en tapete para minimizar, quizas seria mejor idea una combinacion de teclado, si viene el jefe, con los nervios puedes hacer click en cualquier sitio, pero no pasa lo mismo si tienes una combinacion de teclas ya colocadas en el teclado. Y ademas, ya de paso, ya que estamos en excel, ¿por que no cambiar a una tabla de datos ocultas que cada uno pueda personalizar para que de verdad parezca que estas trabajando? ¿y que esa tabla tenga de color el fondo del tapete?, es demasiado cantoso eso de minimizar y que luego venga el jefe y diga, ¿que era eso que has minimizado? lo abres y ahi esta el tapete... jeje,

Un saludo amigo

publicado

verzulsan, vamos progresando si ya es compatible con todas las versiones de Excel ¡lo que no es moco de pavo! :rolleyes:

Parece mentira que no hayas descifrado cómo soltar la carta, o grupo de cartas (cosa mucho más compleja de conseguir), en el montón. Siendo tan agudo y listo como creo que eres, será porque no le has dedicado suficiente tiempo o no lo has intentado al ver lo poco estructurado que está el juego. :mad:

Te doy un par de pistas: :o

- Las coordenadas están en las hojas ocultas: CartasTop y CartasLeft

- Toda la lógica del juego se hace con una "solitaria macro": ReglasJuego asignada a cada una de las 52 cartas.

Como el juego es abierto y sin licencia de uso ni de explotación dejo a cada uno que implemente lo que más le convenga respecto a tu sugerencia de no minimizar el tapete... :P

P.D.: Siento no haber comentado las instrucciones VBA. Fue un imponderable que me propuse desde el principio, que comprimido ocupara menos de 97.7 KB para subirlo al foro, lo que me obligó a eliminar los comentarios y a generar todo el mazo de cartas dinámicamente ya que si lo pintaba antes ocupaba mucho más. :mad:

He escrito un primer artículo en mi blog sobre:

Donde podréis bajaros la versión 2.2 que ha dejado de ser β.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.