隨著2018年8月1.11版的版本,GO對WebAssembly進行了最初的支持,因此可以將其用於客戶端(“前端”)Web開發。 WebAssembly允許除JavaScript以外的其他語言控制Web瀏覽器,並且它可以作為有效執行的本機編譯代碼操作。
它工作的基本方法是GO編譯器會生成WebAssembly格式,而不是本機可執行文件。當WebAssembly格式由瀏覽器加載時,將其迅速編譯到本機機器代碼並執行。
有一些很好的理由可以更喜歡使用GO而不是JavaScript,包括GO的靜態鍵入和效率。由於它是一種編譯的語言,因此大多數編程錯誤都會被GO編譯器捕獲,而不是僅在程序運行時才找到並碰巧執行包含該錯誤的代碼部分。 GO是為了並發而設計的,因此您將永遠不必處理已添加到JavaScript的承諾和其他結構,以使其對現代Web編程有用。
我對這項技術感到好奇,隨著我對此有更多的了解,我注意到一個壓倒性的共識,即WebAssembly將很快成為網絡開發的非常流行和重要的技術。該技術有許多計劃,並且通過涉及Mozilla,Google和其他人的協作來迅速開發它。所有主要的瀏覽器開發人員宣布了2017年對WebAssembly的支持,這都是非常新的。那起作用嗎?
我決定嘗試一下。我有一個視頻撲克遊戲,我兩年前在C中寫了一個視頻撲克遊戲,後來又翻譯成JavaScript和Go。我修改了GO版本以進行事件驅動,然後編寫了WebAssembly接口將其轉換為Web應用程序。
隨著GO的WebAssembly支持如此新,我希望會遇到很多問題。但是我沒有!我很放心地發現,即使只有基本的軟件包文檔和一些非常簡單的示例可以用作起點,也不困難地使事情正常工作,而且一切似乎都可以很好地工作。如果這是Go中的WebAssembly編程就像在第一個版本一樣,我對它的未來非常熱情。
在當前版本中,視頻撲克顯示了客戶端GO實現MVC(模型視圖控制)Web應用程序的使用。遊戲引擎在videopoker-web.go中實現了該模型。視圖由main.go中的WebAssembly接口處理。操作DOM的操作,導致Web瀏覽器中的更新,並且控件是通過在瀏覽器窗口中鍵入的鼠標單擊和鍵,以及HTML中的事件處理和回調,以及main.go中的WebAssembly Interface。
這全都寫在Go中,我不需要寫一行JavaScript。多麼酷。
該版本已更新為使用GO版本1.12,該版本在軟件包SYSCALL/JS中引入了WebAssembly API的更改。
此版本是2019年2月下旬的。遊戲引擎的作用,您可以看到一個簡單的GO/WebAssembly應用程序。
我可能始終沒有運行它,但是要玩遊戲,您可以嘗試此網頁:
http://jayts.com/vp
遊戲的描述和遊戲方向如下。
您可能會在應用程序中註意到一些奇怪的行為:
該應用程序與桌面Web瀏覽器(Firefox,Chrome,Opera和Safari)配合使用,但是在移動設備上的支持是有限的。您可能需要等待幾秒鐘(我的舊平板電腦上的Firefox最多15秒)才能加載。
在移動設備上,當應用程序首次啟動時或重新加載頁面時,該應用程序可能無法正確加載(刷新)。當失敗時,“視頻撲克”標題行下方的棕色文本中顯示了一條錯誤消息。此錯誤似乎與第27462號問題相同:Golang/GO#27462
Android的Firefox因錯誤消息錯誤加載WebAssembly的失敗 - 不在內存中,基於鉻的Browswers(Google Chrome和Opera)失敗,錯誤加載WebAssembly -andersembly -andersembly -angeSembly -andersembly:WebAssembly Intantiation:webAssembly Intantiation:Out Memory:of Memory:WASM內存。
如果發生這種情況,請嘗試重新啟動瀏覽器,並且除了視頻撲克應用程序之外,不要打開其他網頁。對於Android的Firefox,這通常會成功。
在AQ(“退出”)或E(“退出”)鍵盤上,遊戲顯示了遊戲末的消息,然後停止並完全沒有反應。那是因為GO計劃退出了。這是控制台版本的保留,並且將在以後的版本中更優雅。 (換句話說,這不是GO/WebAssembly的問題。)
目前,重新加載頁面啟動新遊戲。
視頻撲克是一款受歡迎的賭場遊戲,基於五張卡片撲克。
播放器被釋放五張牌,並被允許丟棄其中的任何一個或全部。 (實際上,玩家指示要持有哪些卡片。)丟棄的卡被甲板上的卡片取代。目的是獲得獲勝之手。有九種勝利。每個人的概率都不同,隨著手的較高不可能,贏得的金額增加。
這是練習娛樂策略或去賭場之前的好方法。
許多視頻撲克的變體都作為選項。 (當前僅使用AI鍵可以從鍵盤訪問。)一些比默認值更好,該默認值是9/6插孔或更好。
默認情況下,視頻撲克旨在與賭場中9/6個插孔或更好的視頻撲克機的行為緊密匹配,並且可以選擇其他遊戲和付費表。但是,作者不是遊戲專家,也不能保證使視頻撲克的行為與任何其他視頻撲克的行為完全匹配。在嘗試真實的視頻撲克機之前,請仔細考慮一下。
最初,您可能會看到以下屏幕:

只需等待幾秒鐘才能完成加載即可。如果您的設備非常舊或簡單慢,則可能需要長達15秒。現代設備將在不到一秒鐘的時間內加載遊戲。
遊戲滿載後,您將看到此屏幕

單擊Deal New Hand按鈕以查看您的第一手。
每次交易新手時,您的分數會下降10,因為那是您投注的多少。

現在,您可以單擊要保留的卡。每張卡下方出現一個綠色條。如果再次單擊,它將“未持有”卡,而綠色條將消失。

然後單擊Draw Cards按鈕以替換要丟棄的卡。

哦,好吧,這隻手什麼都沒贏。下一次吧!
遊戲將繼續進行,直到您退出或用完芯片為止。
要退出,請輸入q或e 。您的最終分數將顯示。要啟動新遊戲,請重新加載網頁。
這是獲勝的九種類型。

兩張相同價值的卡。在這裡,顯示了一對皇后。
大多數視頻撲克變體僅在卡片是千斤頂,皇后,國王或ACE時付費。因此,名稱為“傑克或更好”。當兩人是數十個時,也會支付近的薪水。其他人沒有任何最小的要求。
一對的支出與您的下注量相同。

同一隻手兩對。該示例顯示了一對7s和一對5s。
9/6千斤頂或更高的支出是賭注的兩倍。

具有相同價值的三張卡。三個9s是顯示的示例。
9/6千斤頂或更高的支出是下注的3倍。

具有連續值的五張卡。在這種情況下,卡是6、7、8、9和10。
它們可以是顯示的手中的任何順序。
ACE可以算作一個(例如ACE,1、2、3和4)或高於國王的值。 (請參閱為此的王室沖洗的例子。)
9/6千斤頂或更高的支出是下注的4倍。

所有卡都穿著同一西裝。這隻手在心中表現出一片沖洗。
9/6千斤頂或更高的支出是下注的6倍。

兩個值的兩張卡,另一個具有另一個值的卡。這隻手有6s和千斤頂。
9/6千斤頂或更高的支出是下注的9倍。

四張卡都具有相同的價值。在這種情況下,國王。
9/6千斤頂或更高的支出是下注的25倍。

手既是筆直的又一張。這隻手在5到9的俱樂部中表現出直線沖洗。
9/6千斤頂或更高的支出是下注的50倍。

這只是王牌最高的直流(10,傑克,皇后,國王,王牌)。該示例顯示了心臟中的王室沖洗。
9/6千斤頂或更高的支出是下注的800倍。
使用鍵盤可以進行非常快速的遊戲玩法。
啟動遊戲,將右手的手指放在鍵盤上,就像觸摸打字時一樣。您的拇指將在太空棒上,您的食指穿過小指將在鑰匙j , k , l和Semicolon( ; )上。
按ENTER(或返回)鍵的操作與單擊五張卡下的寬按鈕相同。
要保持或未持有卡,請輸入與卡相對應的鍵:
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
可以按任何順序鍵入鍵,並且可以多次輸入鍵以切換卡的固定/丟棄狀態。
然後輸入ENTER(返回)鍵進行交易。丟棄的卡片是重勒的,並且顯示了最後的手,以及如何將其視為勝利或失去手,以及新的分數。
您可能會在處理新手之前更改下注。為了將您的賭注從10芯片的默認值增加,請將A鍵入1個數字從1鍵盤鍵入5 ,以及保持卡片的鑰匙。例如,輸入3將您的賭注更改為30芯片。
如果芯片的數量小於BET,則將自動減少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
這些變化具有略有不同的規則和/或付費表。對於千斤頂或更高的變體,第一個數字是滿房的支出,第二個是沖洗的支出。一對10或更高的薪水或更好的支付費用,只有6/5支付的支付費用。所有美國人都是8/8,連續8次。
您還可以通過打開瀏覽器的開發人員工具並在調試控制台中播放文本模式玩遊戲。確保單擊網頁的窗口(即卡背後的背景),以將鍵盤焦點放在此處,而不是在調試控制台窗口中。
互聯網上有許多網站,並在視頻撲克上提供了提示和策略指南。只需搜索“視頻撲克策略”或類似的內容。
該發行版包含以下實現遊戲的文件:
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服務器。
然後將您的Web瀏覽器指向http:// localhost:8080以運行該應用程序。
如果要在公開訪問的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.)
此讀數適用於程序的1.0版。
周杰倫TS
http://jayts.com
版權2016-2019 Jay TS
根據GNU公共許可證,版本3.0(GPLV3)(http://www.gnu.org/licenses/gpl.html)發布