随着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)发布