Es una 'noticia' de RT, qué se puede esperar...?
Me hace gracia eso de "un búnker con un servidor desconectado"...
Me hace gracia eso de "un búnker con un servidor desconectado"...
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
estructura Cartas
byte Numero // por ejemplo de 1 a 40... esto se asigna una sola vez cuando se crea el juego.
byte Jugador // valor 0, carta aún en poder de la banca, otro valor pertenece al jugador cuyo indice se indica
fin estructura
byte NumCartas
constante MaxCartas = 40
Array de Cartas Baraja (0 a maxcartas -1)
evento PartidaTerminada
// Esta función solo podría ser llamada si como resultado del código de arriba al jugador se le permite jugar su turno...
// entrega la siguiente carta al jugador
byte Funcion Apuesta(byte Jugador)
byte tmp
cartas crt //tipo cartas, la estructura...
Si (NumCartas > 0) //' si quedan cartas que repartir
// Haciendo esta resta ahora en vez de al final, nos evita el -1, en las 3 ocasiones que aquí se usa...
numCartas -= 1 // restamos una carta disponible... al principio eran 40, cuando llegue a 0, la partida acaba.
tmp = Random(entre 0 y numCartas)
// intercambiar la carta índice tmp por la carta índice numcartas
crt = Baraja(tmp)
Baraja(tmp) = Baraja(numCartas)
Baraja(numCartas) = crt
crt.Jugador = jugador //esta carta se marca pertenececiente (apostada, elegida, designada) a éste jugador
devolver crt.Numero //devolve rla carta... el número puede ser referencia del valor
// Así el 1 al 10 pueden ser oros, del 11 al 20, copas, del 21 al 30 espadas y del 31 al 40 bastos... o cualquier otra disposición... según tu preferencia, o que uses cartas de pokér y requieras 52 cartas, etc...
sino
Disparar evento PartidaTerminada //ofrece la posibilidad de escrutar qien ganó la partida, mostrar resultados etc...
// No estaría demás aquí solicitar si se desea jugar otra partida, en vez de asumir que es así...
//Si jugadoresquierenOtraPartida
NumCartas = MaxCartas
BarajarCartas // pone a 0 el apartado .jugador de cada carta y luego desordena las cartas...
BorrarDatosPartida // los que pueda tener la banca y los jugadores, pero no un computo global del juego, si lo hay...
//sino
//juego terminado, mostrar el ganador absoluto de todas las partidas (mejor mostrar la lista de ordenada de jugadores con nº de partidas ganadas, puntuación etc...
//fin si
fin si
fin funcion
Cita de: engel lex en 12 Mayo 2018, 00:32 AMClaro Engel, un S.O. o lenguaje, debe ser consecuente con sus decisiones... si LF basta, es porque así se ha implementado, lo mismo que si hubieran querido usar GS (separador de grupo), o tabvertical o espacio duro (byte 160)... un diseño pese a lo idiota del diseño, tendrá que ser consecuente al menos consigo mismo...
sobre lo de linux cambiar de idea, me parece que está de más poner 2 caracteres para salto de linea D: especialmente porque si fuera como dices, el LF solo en windows, dejara el cursor en la misma posición horizontal de la linea anterior... y eso no sucede D:
sin embargo CRLF está muy ampliamente implementado, por lo menos en HTTP como protocolo, si no se usa el 0D 0A (CRLF) muchos aplicativos no son capaces de intepretar el paquete
Ronda() array de bytes //string, objetos jugador, etc..
Turno, Numjugadores byte
evento NuevaRonda
evento SuTurno(byte jugador) // string, objeto jugador, etc...
byte = Propiedad lectura TurnoJugador
devolver Turno
fin propiedad
byte = Propiedad lectura CantidadJugadores
devolver NumJugadores
fin propiedad
buleano = Funcion FinRonda
devolver (turno = (NumJugadores-1))
fin funcion
// Creando una nueva instancia del objeto.
funcion Nuevo(byte jugadores)
NumJugadores = jugadores
Redimencionar array Ronda(0 a NumJugadores -1)
Turno = 0
fin funcion
// Se reclama que se permita jugar al siguiente jugador
funcion SiguienteTurno
Si (turno < (NumJugadores-1))
Turno + =1
Sino
Turno = 0
disparar evento NuevaRonda
Fin si
disparar evento SuTurno(Turno)
Fin funcion
Ronda() array de bytes //string, objetos jugador, etc..
Turno, Numjugadores byte
evento NuevaRonda
//evento SuTurno(byte jugador) // string, objeto jugador, etc...
byte = Propiedad lectura TurnosJugados // en la Ronda actual
devolver Turno
fin propiedad
byte = Propiedad lectura CantidadJugadores
devolver NumJugadores
fin propiedad
buleano = Funcion FinRonda
devolver (Turno = (NumJugadores-1))
fin funcion
// Creando una nueva instancia del objeto.
funcion Nuevo(byte jugadores)
NumJugadores = jugadores
Redimencionar array Ronda(0 a NumJugadores -1)
Turno = 0
fin funcion
// Un jugador reclama su turno de jugada...
// solo será posible si no ha jugado ya su turno en esta ronda...
buleano = funcion TurnoJugador(byte Jugador)
Si (Turno = (NumJugadores-1)) // se acabó la ronda actual?, si sí, siguiente ronda
Turno = 0
bucle para k desde a NumJugadores -1
Ronda(k) = 0
siguiente
disparar evento NuevaRonda
Fin si
Si (Ronda(jugador)= 0) // si no ha jugado en esta ronda, se le permite
Ronda(Jugador) = 1 // ma
Turno + =1
// disparar evento SuTurno(Turno)
Devolver True // el evento queda remplazado por la devolución de la llamada.
Sino // este jugador ya jugó en esta ronda.
devolver FALSE
Fin si
Fin funcion
enumeracion EstadoDeTurno
TURNO_NO_JUGADO = 0
TURNO_JUGANDO = 1
TURNO_YA_JUGADO =2
Fin enumeracion
estructura Datos
EstadoDeTurno Estado // del tipo de la enumeración justo recién declarada.
byte Carta
fin estructura
Ronda() array de Datos // de la estructura recién declarada.
// ofrecer el turno de juego a un jugador...
buleano = funcion TurnoJugador(byte Jugador)
Si (Ronda(jugador).Estado = TURNO_NO_JUGADO) // si no ha jugado en esta ronda, se le permite
Ronda(Jugador).Estado = TURNO_JUGANDO
//Turno + =1
// disparar evento SuTurno(Turno)
Devolver True // el evento queda remplazado por la devolución de la llamada.
Sino // este jugador ya jugó en esta ronda.
devolver FALSE
Fin si
Fin funcion
// jugador comunica su apuesta en esta ronda...
funcion ApuestaJugador(byte Jugador, byte Carta)
Si (Ronda(jugador).Estado = TURNO_JUGANDO)
Ronda(Jugador).Estado = TURNO_YA_JUGADO
Ronda(Jugador).Carta = Carta
Turno + =1
Si (Turno = (NumJugadores-1)) // se acabó la ronda actual?, si sí, siguiente ronda
disparar evento RondaTerminada // Último momento para consultar, luego se borrarán los datos...
Turno = 0
bucle para k desde a NumJugadores -1
Ronda(k).Estado = TURNO_NO_JUGADO
Ronda(k).Carta = 0 //equivale a ninguna
siguiente
fin si
Fin si
Fin funcion
// Devuelve la apuesta dle jugador, (0 si todavía no apostó/jugó su turno...
// la consulta se puede hacer en cualquier momento, pero mejor cuando se lanza el evento RondaTerminada
byte = funcion ConsultarApuesta(byte Jugador)
devolver Ronda(Jugador).Carta
fin funcion
' Declaraciones
' Nivel de corrección para reconocer posibles fallos. A más calidad, más capacidad de recuperación, pero exige más carga de trabajo, etc...
Private Enum ErrorCorrectionLevel
LowQuality = 0
MediumQuality = 1
StandardQuality = 2
HighQuality = 3
End Enum
' para copiar datos de memoria de un sitio a otro..
Private Declare Sub CMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
' API, para obtener el codigo-QR en un fichero bmp.
Private Declare Sub GuardarImagen Lib "quricol32.dll" Alias "GenerateBMPW" (ByVal file As String, ByVal text As String, ByVal Margen As Long, ByVal PixelSize As Long, ByVal nivel As ErrorCorrectionLevel)
' API, para obtener el stream en formato png.
Private Declare Sub GetPngStream Lib "quricol32.dll" Alias "GetPNGW" (ByVal text As String, ByVal Margen As Integer, ByVal PixelSize As Integer, ByVal nivel As ErrorCorrectionLevel, ByRef bufSize As Long, ByRef ptrBits As Long)
' Código del botón, para obtener una imagen en formato BMP (luego la cargamos).
Private Sub Command1_Click()
Dim ruta As String, ruta2w As String, msg As String
Dim res As Long
msg = StrConv("Hola que tal estas", vbUnicode)
ruta = App.Path & "\Qr.bmp"
ruta2w = StrConv(ruta, vbUnicode)
Call GuardarImagen(ruta2w, msg, 2, 3, HighQuality)
If (Dir(ruta) <> "") Then
Set Image1.Picture = LoadPicture(ruta)
End If
End Sub
' carga del formulario...
Private Sub Form_Load()
Me.BackColor = vbBlack ' contraste para que destaque...
Image1.Stretch = True
End Sub
Private Sub Command2_Click()
Dim msg As String
Dim res As Long, k As Long, ptr As Long
Dim stm() As Byte
msg = StrConv("Hola que tal estas", vbUnicode)
Call GetPngStream(msg, 2, 3, HighQuality, k, ptr)
If (k < 1) Then
MsgBox "No parece haberse recibido ninguna imagen..."
Else
ReDim stm(0 To k - 1)
Call CMem(ByVal VarPtr(stm(0)), ByVal ptr, k)
' tu código restante iría aquí:
' yo sólo imprimo el valor de los bytes... para verificar que es correcto.
For j = 0 To k - 1
Debug.Print stm(j)
Next
' ...
End If
End Sub