Avec la version de la version 1.11 en août 2018, Go est venu avec la prise en charge initiale de WebAssembly, permettant à Go d'être utilisé pour le développement Web côté client ("front-end"). WebAssembly permet aux langages autres que JavaScript de contrôler le navigateur Web, et il fonctionne comme un code compilé natif efficacement exécutant efficacement.
La façon de base qu'elle fonctionne est que le compilateur GO produit le format WebAssembly plutôt qu'un exécutable natif. Lorsque le format WebAssembly est chargé par le navigateur, il est rapidement compilé en code machine natif et exécuté.
Il y a de très bonnes raisons de préférer utiliser GO au lieu de JavaScript, y compris le typage et l'efficacité statiques de Go. Comme il s'agit d'un langage compilé, la plupart des erreurs de programmation peuvent être capturées par le compilateur Go, plutôt que d'être trouvés uniquement lorsque le programme est en cours d'exécution et se produit pour exécuter la partie du code qui contient le bogue. GO est conçu pour la concurrence, vous n'aurez donc jamais à faire face aux promesses et à d'autres constructions qui ont été ajoutées à JavaScript pour la rendre utile pour la programmation Web moderne.
J'étais curieux de savoir la technologie, et en apprenant plus à ce sujet, j'ai remarqué un consensus écrasant que WebAssembly deviendra rapidement une technologie très populaire et importante pour le développement Web. Il existe de nombreux plans pour la technologie, et il est développé rapidement par la collaboration impliquant Mozilla, Google et d'autres. Tous les principaux développeurs de navigateurs ont annoncé la prise en charge de WebAssembly en 2017, et tout cela est très nouveau. Alors ça marche?
J'ai décidé de l'essayer. J'ai eu un jeu de vidéo poker que j'ai écrit en C deux ans plus tôt et j'ai ensuite traduit en JavaScript et GO. J'ai modifié la version go pour être motivée par des événements, puis j'ai écrit l'interface WebAssembly pour la convertir en une application Web.
Avec le support WebAssembly de Go de Go étant si nouveau, je m'attendais à avoir beaucoup de problèmes. Mais je ne l'ai pas fait! J'ai été soulagé de constater que même avec une documentation de base de base et quelques exemples très simples à utiliser comme point de départ, il n'était pas très difficile de faire fonctionner les choses, et tout semble fonctionner presque parfaitement. Si c'est ce que la programmation WebAssembly en Go est à la première version, je suis très enthousiaste à propos de son avenir.
Lors de la version actuelle, le vidéo poker affiche l'utilisation de côté client pour implémenter une application Web MVC (modèle-View-Control). Le moteur de jeu, dans videopoker-web.go , implémente le modèle. La vue est gérée par l'interface WebAssembly dans main.go qui manipule le DOM, ce qui entraîne des mises à jour dans le navigateur Web, et le contrôle se fait via des clics et des touches de souris tapés dans la fenêtre du navigateur, ainsi que la gestion des événements et les rappels dans le HTML et l'interface WEBAssembly dans main.go
Tout est écrit en Go, et je n'avais pas besoin d'écrire une seule ligne de javascript. Comme c'est cool.
Cela a été mis à jour pour fonctionner avec GO Version 1.12, qui a introduit des modifications à l'API WebAssembly dans le package Syscall / JS.
Cette version est pour fin février 2019. Le moteur de jeu fonctionne, et vous pouvez voir une application Go / WebAssembly simple en action.
Je ne l'ai peut-être pas en cours d'exécution à tout moment, mais pour jouer au jeu, vous pouvez essayer cette page Web:
http://jayts.com/vp
Une description du jeu et des instructions de jeu sont ci-dessous.
Il y a des comportements étranges que vous remarquerez peut-être dans l'application:
L'application fonctionne bien avec les navigateurs Web de bureau (Firefox, Chrome, Opera et Safari), mais la prise en charge des appareils mobiles est limitée. Vous devrez peut-être attendre quelques secondes (jusqu'à 15 secondes pour Firefox sur mon ancienne tablette) pour que le jeu se charge.
Sur les appareils mobiles, l'application peut ne pas se charger correctement lors du démarrage de l'application, ou lorsque la page est rechargée (actualisée). Lorsqu'il échoue, un message d'erreur s'affiche dans le texte brun sous la ligne de titre "Poker Video Poker". Ce bug semble être le même que le problème # 27462: Golang / Go # 27462
Firefox pour Android échoue avec l'erreur d'erreur Erreur de chargement WebAssembly - hors de la mémoire , et les accessoires basés sur le chrome (Google Chrome et Opera) échouent avec l'erreur Chargement de WebAssembly - RangeError: WebAssembly Instanciation: Out of Memory: Wasm Memory .
Si cela vous arrive, essayez de redémarrer le navigateur et n'ouvrez aucune autre pages Web en plus de l'application vidéo poker. Cela réussit souvent avec Firefox pour Android.
Sur AQ ("Quit") ou E ("Exit"), le jeu montre un message de fin de jeu, puis s'arrête et devient complètement insensible. C'est parce que le programme GO est sorti. Il s'agit d'un retenue de la version de la console, et fonctionnera plus élégamment dans une future version. (En d'autres termes, ce n'est pas un problème avec Go / WebAssembly.)
Pour l'instant, rechargez la page pour démarrer un nouveau jeu.
Le vidéo poker est un jeu de casino populaire basé sur le poker à cinq cartes.
Le joueur reçoit cinq cartes et est autorisé à les jeter ou tous. (En fait, le joueur indique quelles cartes doivent être maintenues.) Les cartes jetées sont remplacées par des cartes traitées du jeu. L'objectif est d'obtenir une main gagnante. Il y a neuf types de mains gagnantes. Chacun a une probabilité différente, le montant gagné augmentant avec l'improbabilité plus élevée de la main.
C'est un excellent moyen de pratiquer votre stratégie pour le plaisir, ou avant d'aller dans un casino.
De nombreuses variantes de vidéo poker sont incluses comme options. (Actuellement accessible uniquement à partir du clavier, en utilisant les touches AI.) Quelques-uns paient mieux que la valeur par défaut, qui est 9/6 les prises ou mieux.
Par défaut, le vidéo poker est destiné à correspondre étroitement au comportement des prises 9/6 ou de meilleures machines vidéo poker dans les casinos, et une option permet la sélection d'autres jeux et des tables de paiement. Cependant, l'auteur n'est pas un expert du jeu, et aucune garantie n'est faite que le comportement du vidéo poker correspond exactement à celui de tout autre poker vidéo. Veuillez prendre cela en considération attentivement avant d'essayer une vraie machine vidéo poker.
Initialement, vous pouvez voir l'écran suivant:

Attendez quelques secondes pour que le jeu finisse le chargement. Si votre appareil est très ancien ou tout simplement lent, cela peut prendre jusqu'à 15 secondes. Les appareils modernes chargeront le jeu en moins d'une seconde.
Lorsque le jeu est complètement chargé, vous verrez cet écran

Cliquez sur le bouton Deal New Hand pour voir votre première main.
Votre score baisse de 10 chaque fois que vous traitez une nouvelle main, car c'est à quel point vous pariez.

Vous pouvez maintenant cliquer sur les cartes sur lesquelles vous souhaitez tenir. Une barre verte apparaît sous chaque carte. Si vous cliquez à nouveau, il "détruit" la carte et la barre verte disparaîtra.

Cliquez ensuite sur le bouton Draw Cards pour remplacer les cartes que vous souhaitez éliminer.

Eh bien, cette main n'a rien gagné. La prochaine fois peut-être!
Le jeu se poursuivra jusqu'à ce que vous quittez ou manquez de jetons.
Pour arrêter, tapez q ou e Votre score final sera affiché. Pour démarrer un nouveau jeu, rechargez la page Web.
Voici les neuf types de mains gagnantes.

Deux cartes de la même valeur. Ici, une paire de reines est montrée.
La plupart des variantes de vidéo poker ne paient que lorsque les cartes sont des prises, des reines, des rois ou des as. Ainsi le nom "Jacks ou mieux". Des dizaines ou mieux paient également lorsque la paire est de dizaines. Aucune des autres mains n'a cette exigence minimale.
Le paiement pour une paire est le même que le montant de votre pari.

Deux paires différentes dans la même main. L'exemple montre une paire de 7s et une paire de 5s.
Le paiement des prises 9/6 ou mieux est deux fois le pari.

Trois cartes de la même valeur. Trois 9s est l'exemple indiqué.
Le paiement pour 9/6 prises ou mieux est 3 fois le pari.

Cinq cartes avec des valeurs consécutives. Dans ce cas, les cartes sont de 6, 7, 8, 9 et 10.
Ils peuvent être n'importe quelle commande dans la main affichée.
Un as peut être compté comme un (par exemple, Ace, 1, 2, 3 et 4), soit comme une valeur au-dessus d'un roi. (Voir l'exemple d'une flush royale pour cela.)
Le paiement pour 9/6 prises ou mieux est 4 fois le pari.

Toutes les cartes sont dans le même costume. Cette main montre une chasse d'eau dans les cœurs.
Le paiement pour 9/6 prises ou mieux est 6 fois le pari.

Deux cartes d'une valeur et trois cartes d'une autre valeur. Cette main a 6s et Jacks.
Le paiement pour 9/6 prises ou mieux est 9 fois le pari.

Quatre cartes de la même valeur. Dans ce cas, les rois.
Le paiement pour 9/6 prises ou mieux est 25 fois le pari.

La main est à la fois droite et une chasse d'eau. Cette main montre une rougeur directe dans les clubs, de 5 à 9.
Le paiement pour 9/6 prises ou mieux est 50 fois le pari.

Il s'agit simplement d'une confusion droite à hauteur (10, Jack, Queen, King, Ace). L'exemple montre une rinçage royal dans les cœurs.
Le paiement pour 9/6 prises ou mieux est 800 fois le pari.
L'utilisation du clavier permet un jeu très rapide.
Commencez le jeu et reposez les doigts de votre main droite sur le clavier comme lorsque vous touchez. Votre pouce sera sur la barre d'espace, et votre index à travers un petit doigt sera sur les clés j , k , l et Semicolon ( ; ).
Appuyer sur la touche Entrée (ou retour) fait la même chose que de cliquer sur le bouton large sous les cinq cartes.
Pour contenir ou détendre les cartes, tapez les clés correspondant aux cartes:
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
Les clés peuvent être tapées dans n'importe quel ordre et une clé peut être saisie plus d'une fois pour basculer l'état de la carte détenu / jeté.
Tapez ensuite la touche Entrée (retour) pour offrir. Les cartes jetées sont redéalées, et la main finale est montrée, ainsi que la façon dont elle est reconnue comme une main gagnante ou perdante, et le nouveau score.
Vous pouvez changer votre pari avant qu'une nouvelle main ne soit traitée. Pour augmenter votre pari par défaut de 10 puces, tapez un chiffre de 1 à 5 , ainsi que les clés pour maintenir les cartes. Par exemple, la saisie d'un 3 changera votre pari en 30 puces.
Si le nombre de puces est inférieur au pari, le pari est automatiquement réduit pour le rendre égal au nombre de puces restantes, où elle restera jusqu'à ce que vous la modifiez.
La valeur par défaut est 9/6 Jacks ou mieux, mais vous pouvez le changer en une autre variation du jeu vidéo Poker en appuyant sur les touches A - I La modification du jeu redémarre le jeu avec 1000 jetons.
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
Les variations ont des règles et / ou des tables de paiement légèrement différentes. Pour les variantes de Jacks ou mieux, le premier numéro est le paiement pour une maison pleine, et la seconde est le paiement pour une chasse d'eau. Des dizaines ou mieux paient une paire de 10s ou mieux, avec seulement un paiement 6/5 pour une maison pleine et une chasse d'eau. All American a 8/8, ainsi que 8 fois un paiement pour une ligne droite.
Vous pouvez également jouer au jeu en mode texte en ouvrant les outils du développeur du navigateur et en jouant dans la console de débogage. Assurez-vous de cliquer dans la fenêtre de la page Web (c'est-à-dire l'arrière-plan derrière les cartes) pour y mettre le clavier au lieu de la fenêtre de la console de débogage.
Il existe de nombreux sites Web sur Internet avec des conseils et des guides de stratégie sur vidéo poker. Recherchez simplement la "stratégie de vidéo poker" ou quelque chose de similaire.
La distribution contient les fichiers suivants qui implémentent le jeu:
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)
Pour les tests locaux, il y a un serveur Web en Go qui peut être exécuté comme ceci:
$ go run webserver.go
Web server running. Listening on ":8080"
Assurez-vous que vous êtes dans le répertoire contenant les fichiers dans la liste ci-dessus et démarrez le serveur Web.
Pointez ensuite votre navigateur Web sur http: // localhost: 8080 pour exécuter l'application.
Si vous souhaitez déployer le jeu sur un serveur Web accessible en bourse, copiez tous les fichiers de la liste sur votre serveur. Le serveur doit prendre en charge le type WASM MIME. Pour Apache 2, vous devrez peut-être inclure cette ligne dans votre fichier .htaccess :
AddType application/wasm wasm
Le programme WebAssembly, main.wasm , peut être construit avec la commande suivante:
GOOS=js GOARCH=wasm go build -o main.wasm main.go videopoker-web.go
Le moteur de jeu est dans videopoker-web.go , et l'interface utilisateur (avec des appels aux fonctions de package js ) est dans main.go
Il y a un Makefile dans la distribution, donc si vous avez make , vous pouvez utiliser les commandes suivantes:
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.)
Cette lecture est pour la version 1.0 du programme.
Jay TS
http://jayts.com
Copyright 2016-2019 Jay TS
Sorti sous la licence publique GNU, version 3.0 (GPLV3) (http://www.gnu.org/licenses/gpl.html)