Com o lançamento da versão 1.11 em agosto de 2018, o Go veio com o suporte inicial ao WebAssembly, permitindo que o Ir seja usado para o centro da Web do lado do cliente ("front-end"). O WebAssembly permite que outros idiomas que não sejam JavaScript controlem o navegador da Web e opera como um código nativo de execução eficiente.
A maneira básica de funciona é que o compilador GO produz formato WebAssembly em vez de um executável nativo. Quando o formato WebAssembly é carregado pelo navegador, ele é rapidamente compilado ao código da máquina nativo e executado.
Existem algumas razões muito boas para preferir usar, em vez de JavaScript, incluindo a digitação e eficiência estáticas de Go. Como é um idioma compilado, a maioria dos erros de programação pode ser capturada pelo compilador Go, em vez de ser encontrado apenas quando o programa está em execução e, por acaso, executar a parte do código que contém o bug. O GO foi projetado para simultaneidade, portanto, você nunca precisará lidar com promessas e outras construções que foram adicionadas ao JavaScript para torná -lo útil para a programação da Web moderna.
Fiquei curioso sobre a tecnologia e, como aprendi mais sobre isso, notei um consenso esmagador de que o WebAssembly se tornará rapidamente uma tecnologia muito popular e importante para o desenvolvimento da Web. Existem muitos planos para a tecnologia e está sendo desenvolvida rapidamente por colaboração envolvendo Mozilla, Google e outros. Todos os principais desenvolvedores do navegador anunciaram o suporte à WebAssembly em 2017, e tudo isso é muito novo. Então funciona?
Eu decidi tentar. Eu tive um jogo de videoodo que escrevi em C dois anos antes e depois traduziu para JavaScript e Go. Modifiquei a versão GO para ser orientada por eventos e, em seguida, escrevi a interface WebAssembly para convertê -la em um aplicativo da Web.
Com o suporte de WebAssembly de Go sendo tão novo, eu esperava ter muitos problemas. Mas eu não! Fiquei aliviado ao descobrir que, mesmo com apenas documentação básica do pacote e alguns exemplos muito simples de usar como ponto de partida, não foi muito difícil fazer as coisas funcionarem, e tudo parece funcionar quase perfeitamente. Se é assim que a programação do WebAssembly em Go é no primeiro lançamento, estou muito entusiasmado com seu futuro.
No lançamento atual, o video poker mostra o uso do lado do cliente, vá para implementar um aplicativo da Web MVC (Model-View-Control). O mecanismo do jogo, no videopoker-web.go , implementa o modelo. A visualização é tratada pela interface webAssembly em main.go que manipula o DOM, resultando em atualizações no navegador da web, e o controle é através de cliques de mouse e chaves digitados na janela do navegador, juntamente com o manuseio de eventos e os retornos de chamada na interface HTML e da WebAssembly em main.go
Tudo está escrito em Go, e eu não precisei escrever uma única linha de JavaScript. Que legal.
Isso foi atualizado para funcionar com a versão Go 1.12, que introduziu alterações na API WebAssembly no pacote syscall/js.
Este lançamento é para o final de fevereiro de 2019. O mecanismo de jogo funciona e você pode ver um aplicativo simples de Go/WebAssembly em ação.
Talvez eu não tivesse funcionando o tempo todo, mas, para jogar, você pode experimentar esta página da web:
http://jayts.com/vp
Uma descrição do jogo e instruções para jogar estão abaixo.
Existem alguns comportamentos estranhos que você pode notar no aplicativo:
O aplicativo funciona bem com os navegadores da Web de desktop (Firefox, Chrome, Opera e Safari), mas o suporte em dispositivos móveis é limitado. Pode ser necessário esperar alguns segundos (até 15 segundos para o Firefox no meu tablet antigo) para o jogo carregar.
Em dispositivos móveis, o aplicativo pode não carregar corretamente quando o aplicativo é iniciado pela primeira vez ou quando a página é recarregada (atualizada). Quando falha, uma mensagem de erro é exibida no texto marrom abaixo da linha de título "Video Poker". Este bug parece ser o mesmo da edição #27462: Golang/Go #27462
O Firefox para Android falha com o erro de mensagem de erro carregando WebAssembly - fora da memória , e as navegáveis baseadas em cromo (Google Chrome e Opera) falham com o erro de carregamento de WebAssembly - RangeError: Instanciação de WebAssembly: fora da memória: Memória WASM .
Se isso acontecer com você, tente reiniciar o navegador e não abra nenhuma outra página da web além do aplicativo de videopoker. Isso geralmente é bem -sucedido com o Firefox para o Android.
Após o KeyPress de AQ ("Quit") ou E ("Exit"), o jogo mostra uma mensagem de final de jogo e, em seguida, apenas para e se torna completamente sem resposta. Isso ocorre porque o programa GO saiu. Esta é uma reserva da versão do console e trabalhará com mais elegância em um lançamento futuro. (Em outras palavras, isso não é um problema com Go/WebAssembly.)
Por enquanto, recarregue a página para iniciar um novo jogo.
O Video Poker é um jogo popular de cassino baseado no empate de cinco cartas.
O jogador recebe cinco cartas e pode descartar qualquer um ou todos eles. (Na verdade, o jogador indica quais cartas devem ser mantidas.) As cartas descartadas são substituídas por cartas que são fornecidas pelo baralho. O objetivo é obter uma mão vencedora. Existem nove tipos de mãos vencendo. Cada um tem uma probabilidade diferente, com o valor ganho aumentando com a maior improbabilidade da mão.
É uma ótima maneira de praticar sua estratégia por diversão ou antes de ir a um cassino.
Muitas variantes do videopoker são incluídas como opções. (Atualmente, acessível apenas a partir do teclado, usando as teclas de AI.) Alguns pagam melhor que o padrão, que é 9/6, ou melhor.
Por padrão, o videopoker destina -se a corresponder de perto ao comportamento de 9/6 de macacos ou melhores máquinas de videower em cassinos, e uma opção permite a seleção de outros jogos e as tabelas de pagamento. No entanto, o autor não é especialista em jogos, e nenhuma garantia é feita de que o comportamento do video poker é uma correspondência exata à de qualquer outro video poker. Por favor, leve isso em consideração cuidadosa antes de experimentar uma máquina de videoker real.
Inicialmente, você pode ver a seguinte tela:

Apenas espere alguns segundos para o jogo terminar de carregar. Se o seu dispositivo for muito antigo ou simplesmente lento, pode levar até 15 segundos. Os dispositivos modernos carregarão o jogo em menos de um segundo.
Quando o jogo estiver totalmente carregado, você verá esta tela

Clique no botão Deal New Hand para ver sua primeira mão.
Sua pontuação cai por 10 cada vez que você lida com uma nova mão, porque é o quanto você está apostando.

Agora você pode clicar nos cartões em que deseja segurar. Uma barra verde aparece embaixo de cada carta. Se você clicar novamente, ele "não houve" o cartão e a barra verde desaparecerá.

Em seguida, clique no botão Draw Cards para substituir os cartões que você deseja descartar.

Oh, bem, esta mão não ganhou nada. Talvez na próxima vez!
O jogo continuará até você sair ou ficar sem fichas.
Para sair, digite q ou e . Sua pontuação final será exibida. Para iniciar um novo jogo, recarregue a página da web.
Aqui estão os nove tipos de mãos vencedoras.

Dois cartões do mesmo valor. Aqui, é mostrado um par de rainhas.
A maioria das variantes do videoodoker paga apenas quando os cartões são macacos, rainhas, reis ou ases. Assim, o nome "Jacks ou melhor". Dezenas ou melhor também paga quando o par é de dezenas. Nenhuma das outras mãos tem esse requisito mínimo.
O pagamento de um par é o mesmo que o valor da sua aposta.

Dois pares diferentes na mesma mão. O exemplo mostra um par de 7s e um par de 5s.
O pagamento de preços 9/6 ou melhor é o dobro da aposta.

Três cartões do mesmo valor. Três 9s é o exemplo mostrado.
O pagamento por preços 9/6 ou melhor é 3 vezes a aposta.

Cinco cartões com valores consecutivos. Nesse caso, os cartões são 6, 7, 8, 9 e 10.
Eles podem ser qualquer pedido na mão exibida.
Um ás pode ser contado como um (por exemplo, ás, 1, 2, 3 e 4) ou um valor acima de um rei. (Veja o exemplo de uma descarga real para isso.)
O pagamento por preços 9/6 ou melhor é 4 vezes a aposta.

Todos os cartões estão no mesmo terno. Esta mão mostra um rubor nos corações.
O pagamento por preços 9/6 ou melhor é 6 vezes a aposta.

Dois cartões de um valor e três cartões de outro valor. Esta mão tem 6s e macacos.
O pagamento por preços 9/6 ou melhor é 9 vezes a aposta.

Quatro cartas todos o mesmo valor. Nesse caso, Kings.
O pagamento por preços 9/6 ou melhor é 25 vezes a aposta.

A mão é uma reta e uma descarga. Esta mão mostra um rubor reto em clubes, de 5 a 9.
O pagamento por preços 9/6 ou melhor é 50 vezes a aposta.

Isso é simplesmente um rubor reto (10, Jack, Queen, King, Ace). O exemplo mostra um rubor real nos corações.
O pagamento por preços 9/6 ou melhor é 800 vezes a aposta.
O uso do teclado permite o jogo muito rápido.
Inicie o jogo e descanse os dedos da sua mão direita no teclado, como a digitação do toque. Seu polegar estará na barra de espaço e o dedo indicador através do dedo mindinho estará nas chaves j , k , l e Semicolon ( ; ).
Pressionar a tecla Enter (ou Return) faz a mesma coisa que clicar no botão amplo abaixo dos cinco cartões.
Para segurar ou não possuir cartões, digite as chaves correspondentes aos cartões:
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
As chaves podem ser digitadas em qualquer ordem e uma chave pode ser inserida mais de uma vez para alternar o estado mantido/descartado do cartão.
Em seguida, digite a tecla Enter (retornar) para negociar. As cartas descartadas são reduzidas e a mão final é mostrada, juntamente com a forma como é reconhecida como uma mão vencedora ou perdida e a nova pontuação.
Você pode mudar sua aposta antes que uma nova mão seja tratada. Para aumentar sua aposta a partir do padrão de 10 chips, digite um dígito de 1 a 5 , junto com as teclas para manter as cartas. Por exemplo, digitar um 3 alterará sua aposta para 30 chips.
Se o número de chips for menor que a aposta, a aposta será automaticamente reduzida para torná -la igual ao número de chips restantes, onde permanecerá até você alterá -lo.
O padrão é de 9/6, Jacks ou melhor, mas você pode alterá -lo para outra variação do jogo de videower Poker pressionando as teclas A - I Mudar o jogo reinicia o jogo com 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
As variações têm regras ligeiramente diferentes e/ou tabelas de pagamento. Para as variantes de macacos ou melhor, o primeiro número é o pagamento de uma casa cheia, e o segundo é o pagamento de uma descarga. Dezenas ou melhor pagam por um par de 10s ou melhor, com apenas um pagamento de 6/5 por uma casa cheia e nivelada. All American é 8/8, juntamente com 8 vezes o pagamento por uma reta.
Você também pode jogar o jogo no modo de texto abrindo as ferramentas de desenvolvedor do navegador e jogando no console de depuração. Certifique -se de clicar na janela da página da web (ou seja, o plano de fundo atrás dos cartões) para colocar o foco do teclado lá, em vez de na janela do console de depuração.
Existem muitos sites na internet com dicas e guias de estratégia no video poker. Basta pesquisar por "Estratégia de Video Poker" ou algo semelhante.
A distribuição contém os seguintes arquivos que implementam o jogo:
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 testes locais, existe um servidor da web que pode ser executado assim:
$ go run webserver.go
Web server running. Listening on ":8080"
Verifique se você está no diretório que contém os arquivos na lista acima e inicie o servidor da Web.
Em seguida, aponte seu navegador da web em http: // localhost: 8080 para executar o aplicativo.
Se você deseja implantar o jogo em um servidor web acessível ao público, copie todos os arquivos da lista para o seu servidor. O servidor deve suportar o tipo MIME WASM. Para o Apache 2, pode ser necessário incluir esta linha no seu arquivo .htaccess :
AddType application/wasm wasm
O programa WebAssembly, main.wasm , pode ser construído com o seguinte comando:
GOOS=js GOARCH=wasm go build -o main.wasm main.go videopoker-web.go
O mecanismo de jogo está no videopoker-web.go , e a interface do usuário (com chamadas para funções do pacote js ) está em main.go
Há um Makefile na distribuição; portanto, se você for make , pode usar os seguintes 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 é para a versão 1.0 do programa.
Jay TS
http://jayts.com
Copyright 2016-2019 Jay TS
Lançado sob a licença pública da GNU, versão 3.0 (GPLV3) (http://www.gnu.org/license/gpl.html)