Con el lanzamiento de la versión 1.11 en agosto de 2018, GO llegó con el soporte inicial para WebAssembly, permitiendo que GO se use para el desarrollo web del lado del cliente ("front-end"). WebAssembly permite que los idiomas distintos a JavaScript controlen el navegador web, y funciona como un código compilado nativo de eficiencia eficiente.
La forma básica de que funciona es que el compilador GO produce formato de base web en lugar de un ejecutable nativo. Cuando el navegador cargue el formato WebAssembly, se compila rápidamente en el código de la máquina nativa y se ejecuta.
Hay algunas muy buenas razones para preferir usar GO en lugar de JavaScript, incluida la mecanografía y eficiencia estática de GO. Dado que es un lenguaje compilado, la mayoría de los errores de programación pueden ser capturados por el compilador GO, en lugar de encontrarse solo cuando el programa se está ejecutando y ejecuta la parte del código que contiene el error. GO está diseñado para la concurrencia, por lo que nunca tendrá que lidiar con promesas y otras construcciones que se han agregado a JavaScript para que sea útil para la programación web moderna.
Tenía curiosidad por la tecnología, y a medida que aprendí más al respecto, noté un consenso abrumador de que el ensamblaje web se convertirá rápidamente en una tecnología muy popular e importante para el desarrollo web. Hay muchos planes para la tecnología, y se está desarrollando rápidamente por la colaboración que involucra a Mozilla, Google y otros. Todos los principales desarrolladores de navegadores anunciaron soporte para WebAssembly en 2017, y todo esto es muy nuevo. Entonces, ¿funciona?
Decidí intentarlo. Tuve un juego de video póker que escribí en C dos años antes y luego traducí a JavaScript y Go. Modifiqué la versión GO para ser impulsada por el evento, y luego escribí la interfaz WebAssembly para convertirla en una aplicación web.
Con el soporte de WebAssembly de GO tan nuevo, esperaba tener muchos problemas. ¡Pero no lo hice! Me sentí aliviado al descubrir que incluso con la documentación básica del paquete y algunos ejemplos muy simples para usar como punto de partida, no fue muy difícil hacer que las cosas funcionen, y todo parece funcionar casi perfectamente. Si esto es lo que es la programación de WebAssembly en GO en el primer lanzamiento, estoy muy entusiasmado con su futuro.
En la versión actual, Video Poker muestra el uso del lado del cliente, vaya a implementar una aplicación web MVC (modelo-view-control). El motor del juego, en videopoker-web.go , implementa el modelo. La vista es manejada por la interfaz WebAssembly en main.go que manipula el DOM, lo que resulta en actualizaciones en el navegador web, y el control es a través de clics y teclas de mouse mecanografiadas en la ventana del navegador, junto con el manejo de eventos y las devoluciones de llamadas en la interfaz HTML y la interfaz websembly en main.go
Todo está escrito en GO, y no necesitaba escribir una sola línea de JavaScript. Qué genial.
Esto se ha actualizado para funcionar con Go Versión 1.12, que introdujo cambios en la API de WebAssembly en el paquete Syscall/JS.
Este lanzamiento es a fines de febrero de 2019. El motor del juego funciona, y puedes ver una aplicación simple GO/WebAssembly en acción.
Es posible que no lo tenga en funcionamiento en todo momento, pero para jugar el juego, puedes probar esta página web:
http://jayts.com/vp
Una descripción del juego y las instrucciones para jugar están a continuación.
Hay algunos comportamientos extraños que puede notar en la aplicación:
La aplicación funciona bien con los navegadores web de escritorio (Firefox, Chrome, Opera y Safari), pero el soporte en dispositivos móviles es limitado. Es posible que deba esperar unos segundos (hasta 15 segundos para Firefox en mi antigua tableta) para que se cargue el juego.
En los dispositivos móviles, la aplicación puede no cargarse correctamente, ya sea cuando se inicia la aplicación, o cuando la página se vuelve a cargar (actualizada). Cuando falla, se muestra un mensaje de error en el texto Brown debajo de la línea de título "Video Poker". Este error parece ser el mismo que el número 27462: Golang/Go #27462
Firefox para Android falla con el error de error Error de carga de WebAssembly: fuera de la memoria , y los browswers basados en Chromium (Google Chrome y Opera) fallan con el error de la carga de WebAssembly - RangeError: Instantiación de WebAsmbly: fuera de memoria: memoria WASM .
Si esto le sucede, intente reiniciar el navegador y no abra ninguna otra página web además de la aplicación Video Poker. Esto a menudo tiene éxito con Firefox para Android.
Tras la KeyPress de AQ ("Salir") o E ("Salir"), el juego muestra un mensaje de fin de juego, luego se detiene y se vuelve completamente sin respuesta. Eso es porque salió el programa GO. Este es un remanente de la versión de la consola, y funcionará más elegantemente en un lanzamiento futuro. (En otras palabras, esto no es un problema con GO/WebAssembly).
Por ahora, vuelva a cargar la página para comenzar un nuevo juego.
El video póker es un popular juego de casino basado en el póker de cinco tarjetas.
El jugador recibe cinco cartas y se le permite descartar cualquiera o todas ellas. (En realidad, el jugador indica qué cartas deben mantenerse). Las cartas descartadas se reemplazan por cartas tratadas desde el mazo. El objetivo es obtener una mano ganadora. Hay nueve tipos de manos ganadoras. Cada uno tiene una probabilidad diferente, con la cantidad ganada aumentando con la mayor improbabilidad de la mano.
Es una excelente manera de practicar su estrategia para divertirse, o antes de ir a un casino.
Muchas variantes de video póker se incluyen como opciones. (Actualmente accesible solo desde el teclado, usando las teclas AI). Algunos pagan mejor que el valor predeterminado, que es 9/6 gatos o mejores.
Por defecto, Video Poker está destinado a igualar estrechamente el comportamiento de 9/6 gatos o mejores máquinas de video póker en casinos, y una opción permite la selección de otros juegos y tablas de pago. Sin embargo, el autor no es un experto en juegos, y no se hace garantía de que el comportamiento del video póker sea una coincidencia exacta con la de cualquier otro video póker. Tómese eso en una consideración cuidadosa antes de probar una máquina de video póker real.
Inicalmente, puede ver la siguiente pantalla:

Solo espere unos segundos para que el juego termine de cargar. Si su dispositivo es muy antiguo o simplemente lento, puede tomar hasta 15 segundos. Los dispositivos modernos cargarán el juego en menos de un segundo.
Cuando el juego esté completamente cargado, verás esta pantalla

Haga clic en el botón Deal New Hand para ver su primera mano.
Su puntaje cae en 10 cada vez que trata una nueva mano porque eso es lo que está apostando.

Ahora puede hacer clic en las tarjetas en las que desea conservar. Aparece una barra verde debajo de cada tarjeta. Si hace clic nuevamente, "desatirá" la tarjeta, y la barra verde desaparece.

Luego haga clic en el botón Draw Cards para reemplazar las tarjetas que desea descartar.

Bueno, esta mano no ganó nada. ¡Tal vez la próxima vez!
El juego continuará hasta que renuncies o te quede sin papas fritas.
Para dejar de fumar, escriba q o e Su puntaje final se mostrará. Para comenzar un nuevo juego, vuelva a cargar la página web.
Aquí están los nueve tipos de manos ganadoras.

Dos cartas del mismo valor. Aquí, se muestra un par de reinas.
La mayoría de las variantes de video póker pagan solo cuando las tarjetas son gatos, reinas, reyes o ases. Así, el nombre "Jacks o mejor". TENS o mejor también paga cuando el par es de decenas. Ninguna de las otras manos tiene este requisito mínimo.
El pago de un par es el mismo que el monto de su apuesta.

Dos pares diferentes en la misma mano. El ejemplo muestra un par de 7 y un par de 5s.
El pago por 9/6 gatos o mejor es el doble de la apuesta.

Tres tarjetas del mismo valor. Tres 9S es el ejemplo que se muestra.
El pago por 9/6 gatos o mejor es 3 veces la apuesta.

Cinco cartas con valores consecutivos. En este caso, las tarjetas son 6, 7, 8, 9 y 10.
Pueden ser cualquier pedido en la mano mostrada.
Un as se puede contar como uno (por ejemplo, as, 1, 2, 3 y 4), o un valor por encima de un rey. (Vea el ejemplo de un rubor real para eso).
El pago por 9/6 gatos o mejor es 4 veces la apuesta.

Todas las cartas están en el mismo traje. Esta mano muestra un rubor en los corazones.
El pago por 9/6 gatos o mejor es 6 veces la apuesta.

Dos cartas de un valor y tres cartas de otro valor. Esta mano tiene 6s y Jacks.
El pago por 9/6 gatos o mejor es 9 veces la apuesta.

Cuatro cartas todo el mismo valor. En este caso, reyes.
El pago por 9/6 gatos o mejor es 25 veces la apuesta.

La mano es una recta y una descarga. Esta mano muestra una descarga recta en los clubes, de 5 a 9.
El pago por 9/6 gatos o mejor es 50 veces la apuesta.

Esto es simplemente una descarga recta de Ace (10, Jack, Queen, King, Ace). El ejemplo muestra un rubor real en corazones.
El pago por 9/6 gatos o mejor es 800 veces la apuesta.
El uso del teclado permite un juego muy rápido.
Comience el juego y descanse los dedos de su mano derecha en el teclado como cuando se toca la escritura. Su pulgar estará en la barra espacial, y su dedo índice a través del dedo meñique estará en las teclas j , k , l y Semicolon ( ; ).
Al presionar la tecla Intro (o retorno) hace lo mismo que hacer clic en el botón ancho debajo de las cinco tarjetas.
Para contener o tarjetas sin retención, escriba las teclas correspondientes a las tarjetas:
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
Las claves se pueden escribir en cualquier orden, y se puede ingresar una clave más de una vez para alternar el estado retenido/desechado de la tarjeta.
Luego escriba la tecla Intro (retorno) para tratar. Las cartas descartadas son redealt, y se muestra la mano final, junto con la forma en que se reconoce como una mano ganadora o perdedora, y la nueva puntuación.
Puede cambiar su apuesta antes de que se trate una nueva mano. Para aumentar su apuesta del valor predeterminado de 10 chips, escriba un dígito de 1 a 5 , junto con las claves para retener tarjetas. Por ejemplo, escribir un 3 cambiará su apuesta a 30 chips.
Si el número de chips es menor que la apuesta, la apuesta se reduce automáticamente para que sea igual al número de chips restantes, donde permanecerá hasta que la cambie.
El valor predeterminado es 9/6 Jacks o mejor, pero puede cambiarlo a otra variación del juego de video póker presionando las teclas A - I Cambiar el juego reinicia el juego con 1000 chips.
A All American
B Tens or Better
C Bonus Poker
D Double Bonus Poker
E Double Bonus Bonus Poker
F 9/6 Jacks or Better (default)
G 9/5 Jacks or Better
H 8/6 Jacks or Better
I 8/5 Jacks or Better
Las variaciones tienen reglas y/o tablas de pago ligeramente diferentes. Para las variantes de los gatos o mejor, el primer número es el pago de una casa llena, y el segundo es el pago de un descarga. TENS o mejor paga por un par de 10 o mejor, con solo un pago de 6/5 por una casa llena y al ras. Todos los estadounidenses son 8/8, junto con 8 veces el pago de una recta.
También puedes jugar el juego en modo de texto abriendo las herramientas de desarrollador del navegador y jugando en la consola de depuración. Asegúrese de hacer clic en la ventana de la página web (es decir, el fondo detrás de las tarjetas) para poner el enfoque del teclado allí en lugar de en la ventana de la consola de depuración.
Hay muchos sitios web en Internet con pistas y guías de estrategia en el video póker. Simplemente busque "Estrategia de video póker" o algo similar.
La distribución contiene los siguientes archivos que implementan el juego:
css/
normalize.css
styles.css
favicon.ico
img/
01-clubs.png
... (... card images)
13-spades.png
nocard.png (transparent card)
ybtile.gif (background tile)
index.html
main.wasm (WebAssembly code, produced by compiling main.go and videopoker-web.go)
wasm_exec.js (JavaScript glue code, copied from $GOROOT/misc/wasm)
Para las pruebas locales, hay un servidor web en GO que se puede ejecutar así:
$ go run webserver.go
Web server running. Listening on ":8080"
Asegúrese de estar en el directorio que contiene los archivos en la lista anterior e inicie el servidor web.
Luego apunte a su navegador web en http: // localhost: 8080 para ejecutar la aplicación.
Si desea implementar el juego en un servidor web de acceso público, copie todos los archivos de la lista en su servidor. El servidor debe admitir el tipo WASM MIME. Para Apache 2, es posible que deba incluir esta línea en su archivo .htaccess :
AddType application/wasm wasm
El programa WebAssembly, main.wasm , se puede construir con el siguiente comando:
GOOS=js GOARCH=wasm go build -o main.wasm main.go videopoker-web.go
El motor del juego está en videopoker-web.go , y la interfaz de usuario (con llamadas a las funciones del paquete js ) está en main.go
Hay un Makefile en la distribución, por lo que si ha make , puede usar los siguientes comandos:
make # Build main.wasm
make vet # run 'go vet' on the sources
make webserver # Compile the web server.
make test # Run the web server. (Compile it first!)
make dep # Copy the files you need for deployment into a
# directory named deploy. (Create it first.)
Este ReadMe es para la versión 1.0 del programa.
Jay TS
http://jayts.com
Copyright 2016-2019 Jay TS
Lanzado bajo la Licencia Pública GNU, Versión 3.0 (GPLV3) (http://www.gnu.org/licenses/gpl.html)