2018年8月のバージョン1.11のリリースにより、GOはWebAssemblyの最初のサポートを提供し、クライアント側(「フロントエンド」)Web開発に使用できるようになりました。 WebAssemblyを使用すると、JavaScript以外の言語がWebブラウザーを制御でき、効率的にエクスペクティブエクスペクティブコンパイルされたコードとして動作します。
それが機能する基本的な方法は、GOコンパイラがネイティブの実行可能ファイルではなくWebAssembly形式を生成することです。 WebAssembly形式がブラウザによってロードされると、ネイティブマシンコードにすばやくコンパイルされて実行されます。
Goの静的タイピングや効率など、JavaScriptの代わりにGOを使用することを好む非常に良い理由があります。コンパイルされた言語であるため、ほとんどのプログラミングエラーは、プログラムが実行されている場合にのみ見つけるのではなく、GOコンパイラによってキャッチされ、バグを含むコードの部分を実行することができます。 GOは並行性のために設計されているため、最新のWebプログラミングに役立つようにJavaScriptに追加された約束やその他の構成要素に対処する必要はありません。
私はこのテクノロジーに興味があり、それについてもっと学んだように、WebAssemblyがすぐにWeb開発にとって非常に人気のある重要なテクノロジーになるという圧倒的なコンセンサスに気付きました。このテクノロジーには多くの計画があり、Mozilla、Googleなどを含むコラボレーションによって急速に開発されています。すべての主要なブラウザ開発者は、2017年にWebAssemblyのサポートを発表しましたが、これはすべて非常に新しいものです。それでそれは機能しますか?
試してみることにしました。私は2年前にCで書いたビデオポーカーゲームを持っていて、後にJavaScriptとGoの両方に翻訳しました。 GOバージョンをイベント駆動型に変更し、WebAssemblyインターフェイスを作成してWebアプリに変換しました。
GoのWebAssemblyサポートは非常に新しいものであるため、多くの問題があると予想しています。しかし、私はしませんでした!基本的なパッケージドキュメントと、出発点として使用する非常に簡単な例でも、物事を機能させることはそれほど難しくなく、すべてがほぼ完全に機能するように見えることを見つけて安心しました。これがGOのWebAssemblyプログラミングが最初のリリースでのようなものである場合、私はその将来に非常に熱心です。
現在のリリースでは、Video Pokerがクライアント側の使用を使用してMVC(Model-View-Control)Webアプリを実装することを示しています。 videopoker-web.goのゲームエンジンは、モデルを実装しています。 Viewはmain.goのWebAssemblyインターフェイスによって処理され、DOMを操作してWebブラウザーで更新され、コントロールはブラウザウィンドウに入力されたマウスクリックとキーを介して、HTMLでのイベントの処理とコールバック、およびmain.goのWebAssemblyインターフェイスを介して行われます。
それはすべてGOで書かれており、私はJavaScriptの単一の行を書く必要はありませんでした。なんてクール。
これは、Goバージョン1.12で動作するように更新されており、パッケージSyscall/JSにWebAssembly APIの変更を導入しました。
このリリースは2019年2月下旬のものです。ゲームエンジンは機能し、簡単なGo/WebAssemblyアプリが動作していることがわかります。
私はそれを常に実行していないかもしれませんが、ゲームをプレイするために、あなたはこのWebページを試すことができます:
http://jayts.com/vp
ゲームの説明とプレイの方向は以下にあります。
アプリに気付くかもしれない奇妙な動作がいくつかあります。
このアプリは、デスクトップWebブラウザー(Firefox、Chrome、Opera、Safari)でうまく機能しますが、モバイルデバイスでのサポートは限られています。ゲームがロードされるには、私の古いタブレットのFirefoxの場合は最大15秒まで待つ必要があるかもしれません。
モバイルデバイスでは、アプリが最初に開始されたとき、またはページがリロードされたとき(更新された)ときのアプリが適切にロードされない場合があります。失敗すると、「ビデオポーカー」タイトルラインの下の茶色のテキストにエラーメッセージが表示されます。このバグは問題#27462:golang/go#27462と同じようです
AndroidのFirefoxは、エラーメッセージエラーのロードでWebAssemblyのロードで失敗します - メモリから外れ、ChromiumベースのBrowswers(Google ChromeおよびOpera)がエラーのロードで失敗しましたWebAssembly -raveError:WebAssembly Instantiation:Out Out Memory:Wasm Memory 。
これが発生した場合は、ブラウザを再起動してみて、ビデオポーカーアプリ以外のWebページを開かないでください。これはしばしばAndroidのFirefoxで成功します。
AQ( "QUIT")またはE( "Exit")キープレスで、ゲームはゲームの終了メッセージを表示し、停止して完全に反応しません。 Goプログラムが終了したためです。これはコンソールバージョンのホールドオーバーであり、将来のリリースでよりエレガントに機能します。 (言い換えれば、これはGO/WebAssemblyの問題ではありません。)
とりあえず、新しいゲームを開始するためにページをリロードします。
Video Pokerは、5カードドローポーカーに基づいた人気のカジノゲームです。
プレーヤーは5枚のカードを扱い、それらのいずれかまたはすべてを廃棄することが許可されています。 (実際、プレイヤーはどのカードを保持するかを示します。)廃棄されたカードは、デッキから扱われたカードに置き換えられます。目的は、勝利の手を取得することです。 9種類の勝利の手があります。それぞれが異なる確率を持ち、手のより高い不安定性とともに、勝者は増加します。
これは、楽しみのために、またはカジノに行く前に戦略を実践するのに最適な方法です。
ビデオポーカーの多くのバリエーションがオプションとして含まれています。 (現在、AIキーを使用してキーボードからのみアクセス可能です。)デフォルトよりも9/6ジャック以上のデフォルトよりも良い支払いがあります。
デフォルトでは、ビデオポーカーは、カジノの9/6ジャックまたはより良いビデオポーカーマシンの動作に密接に一致することを目的としており、オプションを使用すると、他のゲームや支払いテーブルを選択できます。ただし、著者はゲームの専門家ではなく、ビデオポーカーの行動が他のビデオポーカーの動作と正確な一致であるという保証はまったくありません。実際のビデオポーカーマシンを試す前に、それを慎重に検討してください。
最初は、次の画面が表示される場合があります。

ゲームが読み込み終了するまで数秒待ってください。デバイスが非常に古い場合、または単純に遅い場合は、最大15秒かかる場合があります。最新のデバイスは、ゲームを1秒以内にロードします。
ゲームが完全にロードされたら、この画面が表示されます

Deal New Handボタンをクリックして、直接確認してください。
あなたが新しい手を扱うたびにスコアは10増加します。なぜなら、それはあなたがどれだけ賭けているかだからです。

これで、保持するカードをクリックできます。各カードの下に緑色のバーが表示されます。もう一度クリックすると、カードが「解除されていない」と緑色のバーが消えます。

次に、 Draw Cardsボタンをクリックして、破棄するカードを交換します。

まあ、この手は何も勝ちませんでした。また今度!
ゲームは、チップを終了するか、使い果たすまで続きます。
終了するには、 qまたはeのいずれかを入力します。最終スコアが表示されます。新しいゲームを開始するには、Webページをリロードします。
これが9種類の勝利の手です。

同じ値の2枚のカード。ここでは、クイーンのペアが表示されます。
ビデオポーカーのほとんどのバリエーションは、カードがジャック、クイーン、キングス、またはエースである場合にのみ支払います。したがって、「ジャック以上」という名前。ペアが数十の場合も数十以上も支払います。他の手にはこの最小限の要件はありません。
ペアの支払いは、賭け金の量と同じです。

同じ手の2つの異なるペア。この例は、7Sのペアと5秒のペアを示しています。
9/6ジャック以上の支払いは2倍の賭けです。

同じ値の3枚のカード。 3つの9が示されている例です。
9/6ジャック以上の支払いはベットの3倍です。

連続した価値のある5枚のカード。この場合、カードは6、7、8、9、および10です。
それらは表示された手に任意の順序にすることができます。
エースは、エース(エース、1、2、3、および4など)または王の上の値のいずれかとしてカウントできます。 (そのための王室のフラッシュの例を参照してください。)
9/6ジャック以上のペイアウトは、ベットの4倍です。

すべてのカードは同じスーツを着ています。この手は心のフラッシュを示しています。
9/6ジャック以上の支払いは、ベットの6倍です。

1つの値の2枚のカードと別の値の3枚のカード。この手には6秒とジャックがあります。
9/6ジャック以上の支払いは、ベットの9倍です。

すべて同じ値の4枚のカード。この場合、王。
9/6ジャック以上の支払いは、賭けの25倍です。

手はまっすぐでフラッシュです。この手は、5〜9のクラブでのまっすぐなフラッシュを示しています。
9/6ジャック以上の支払いは、賭けの50倍です。

これは、単にエースハイストレートフラッシュ(10、ジャック、クイーン、キング、エース)です。この例は、心の王室のフラッシュを示しています。
9/6ジャック以上の支払いは、800倍の賭けです。
キーボードを使用すると、非常に速いゲームプレイが可能になります。
ゲームを開始し、タッチタイピングのときのように右手の指をキーボードに置きます。親指はスペースバーにあり、小指を通る人差し指はキーj 、 k 、 l 、およびセミコロン( ; )にあります。
Enter(またはReturn)キーを押すと、5枚のカードの下の幅のあるボタンをクリックするのと同じことがあります。
カードを保持または保持するには、カードに対応するキーを入力します。
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
キーは任意の順序で入力でき、キーを複数回入力して、カードの保持/廃棄された状態を切り替えることができます。
次に、Enter(return)キーを入力して取引します。廃棄されたカードはRedealtであり、最終的な手が表示され、それが勝ちまたは負けたハンド、および新しいスコアのいずれかとしてどのように認識されているかが表示されます。
新しいハンドが配られる前に、ベットを変更することができます。デフォルト10チップからベットを増やすには、カードを保持するためのキーとともに、1桁を1から5入力します。たとえば、 3入力すると、ベットが30チップに変更されます。
チップの数がBETよりも少ない場合、ベットは自動的に減少して、残りのチップの数に等しくなり、変更するまで留まります。
デフォルトは9/6ジャック以上ですが、 A Iキーを押すと、ビデオポーカーゲームの別のバリエーションに変更できます。ゲームを変更すると、1000チップでゲームが再起動されます。
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
バリエーションには、ルールや支払いテーブルがわずかに異なります。ジャック以上のバリエーションについては、最初の数字はフルハウスの支払いであり、2つ目はフラッシュの支払いです。 10分の1ペア以上の料金は、フルハウスとフラッシュのために6/5の支払いしかありません。すべてのアメリカ人は8/8であり、ストレートの8倍の支払いです。
また、ブラウザの開発者ツールを開き、デバッグコンソールで再生することにより、テキストモードでゲームをプレイすることもできます。 Webページのウィンドウ(つまり、カードの背後にある背景)をクリックして、デバッグコンソールウィンドウの代わりにキーボードのフォーカスを配置してください。
インターネット上には、ビデオポーカーにヒントと戦略ガイドを備えた多くのWebサイトがあります。 「ビデオポーカー戦略」などを検索するだけです。
配布には、ゲームを実装する次のファイルが含まれています。
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)
ローカルテストの場合、このように実行できるWebサーバーがあります。
$ go run webserver.go
Web server running. Listening on ":8080"
上記のリストのファイルを含むディレクトリにあることを確認し、Webサーバーを起動します。
次に、http:// localhost:8080でWebブラウザーをポイントして、アプリを実行します。
公開されているWebサーバーにゲームを展開する場合は、リスト内のすべてのファイルをサーバーにコピーします。サーバーは、WASM MIMEタイプをサポートする必要があります。 Apache 2の場合、 .htaccessファイルにこの行を含める必要がある場合があります。
AddType application/wasm wasm
WebAssemblyプログラム、 main.wasmは、次のコマンドで構築できます。
GOOS=js GOARCH=wasm go build -o main.wasm main.go videopoker-web.go
ゲームエンジンはvideopoker-web.goにあり、ユーザーインターフェイス( jsパッケージ関数への呼び出し付き)はmain.goです。
配布にはMakefileがあるため、 makeしている場合は、次のコマンドを使用できます。
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.)
このREADMEは、プログラムのバージョン1.0用です。
ジェイTS
http://jayts.com
Copyright 2016-2019 Jay TS
GNUパブリックライセンス、バージョン3.0(gplv3)(http://www.gnu.org/licenses/gpl.html)でリリース