С выпуском версии 1.11 в августе 2018 года Go пришел с первоначальной поддержкой Webassembly, позволяющей использовать для веб-разработки на стороне клиента («Front End»). Webassembly позволяет, помимо JavaScript, управлять веб-браузером, и он работает как эффективно выполняющий собственный скомпилированный код.
Основным способом, которым он работает, является то, что компилятор GO производит формат Webassembly, а не нативного исполняемого файла. Когда формат Webassembly загружается браузером, он быстро составлен в нативный машинный код и выполняется.
Есть несколько очень веских причин для предпочтения использовать GO вместо JavaScript, включая статическую набор и эффективность Go. Поскольку это скомпилированный язык, большинство ошибок программирования могут быть пойманы компилятором GO, вместо того, чтобы быть обнаруженным только при запуске программы, и оказалось, что выполняет часть кода, которая содержит ошибку. GO предназначен для параллелизма, поэтому вам никогда не придется иметь дело с обещаниями и другими конструкциями, которые были добавлены в JavaScript, чтобы сделать его полезным для современного веб -программирования.
Мне было любопытно об этой технологии, и, когда я узнал больше об этом, я заметил ошеломляющий консенсус о том, что Webassembly быстро станет очень популярной и важной технологией для веб -разработки. Существует много планов по технологии, и она быстро разрабатывается благодаря сотрудничеству с участием Mozilla, Google и других. Все крупные разработчики браузеров объявили поддержку Webassembly в 2017 году, и все это очень новое. Так работает?
Я решил попробовать. У меня была игра в покер, которую я написал в C два года назад, а затем перевел как JavaScript, так и Go. Я изменил версию Go, чтобы быть управляемым событием, а затем написал интерфейс Webassembly, чтобы преобразовать ее в веб -приложение.
С поддержкой Go Webassembly настолько новой, я ожидал, что у меня будет много проблем. Но я этого не сделал! Я с облегчением обнаружил, что даже с простой базовой документацией по пакетам и несколькими очень простыми примерами, которые можно использовать в качестве отправной точки, было не очень сложно заставить вещи работать, и все, кажется, работает почти идеально. Если это то, на что похоже на программирование Webassembly в Go в первом выпуске, я очень с энтузиазмом относится к его будущему.
В текущем выпуске Video Poker показывает использование клиентской стороны, чтобы реализовать веб-приложение MVC (Model-View-Control). Игровой двигатель в videopoker-web.go реализует модель. View обрабатывается интерфейсом Webassembly в main.go , который манипулирует DOM, что приводит к обновлениям в веб -браузере, а элемент управления проходит через клики мыши, а клавиши, набираемые в окне браузера, вместе с обработкой событий и обратными вызовами в HTML и интерфейсе webassembly в main.go
Все написано в Go, и мне не нужно было писать ни одной строки JavaScript. Как круто.
Это было обновлено для работы с версией GO 1.12, которая ввела изменения в API WebAssembly в пакете Syscall/JS.
Этот релиз - на конец февраля 2019 года. Игровой двигатель работает, и вы можете увидеть простое приложение Go/Webassembly в действии.
Возможно, я не запускался всегда, но для игры вы можете попробовать эту веб -страницу:
http://jayts.com/vp
Описание игры и направлений для игры приведено ниже.
Есть некоторые странные поведения, которые вы можете заметить в приложении:
Приложение хорошо работает с настольными веб -браузерами (Firefox, Chrome, Opera и Safari), но поддержка на мобильных устройствах ограничена. Возможно, вам придется подождать несколько секунд (до 15 секунд для Firefox на моем старом планшете), чтобы игра загрузилась.
На мобильных устройствах приложение может не загружаться должным образом, когда приложение впервые запускается, либо когда страница перезагружена (обновляется). Когда он сбой, сообщение об ошибке отображается в коричневом тексте под строкой заголовка «Видео -покер». Эта ошибка, кажется, такая же, как и выпуск № 27462: Golang/Go #27462
Firefox для Android не удается с ошибкой сообщений об ошибке загрузка WebAssembly - Out из памяти , и Browswers на основе хрома (Google Chrome и Opera) сбой с ошибкой загрузкой WebAssembly - Darleerror: Webassembly stantauiation: Out out Memory: Wasm Memory .
Если это произойдет с вами, попробуйте перезагрузить браузер и не открывайте другие веб -страницы, кроме приложения для видео покера. Это часто преуспевает с Firefox для Android.
После aq («quit») или e («выход») в игре показывает сообщение о конце игры, затем просто останавливается и становится полностью не отвечающим. Это потому, что программа GO выходит. Это удержание от консольной версии, и он будет более элегантно работать в будущем. (Другими словами, это не проблема с Go/Webassembly.)
На данный момент перезагрузите страницу, чтобы начать новую игру.
Video Poker-это популярная игра в казино, основанная на пять картовых покера.
Игрок сдает пять карт, и ему разрешено отказаться от любого или всех из них. (На самом деле, игрок указывает, какие карты должны быть проведены.) Выброшенные карты заменяются картами, снятыми из колоды. Цель состоит в том, чтобы получить победную руку. Есть девять видов победных рук. Каждый имеет различную вероятность, причем количество выигрышной суммы увеличилась с более высокой импровиденностью руки.
Это отличный способ практиковать вашу стратегию для развлечения или перед тем, как пойти в казино.
Многие варианты видео покера включены в качестве опций. (В настоящее время доступен только с клавиатуры, используя ключи AI.) Несколько платят лучше, чем по умолчанию, что составляет 9/6 разъемов или лучше.
По умолчанию Video Poker предназначен для тесного соответствия поведения 9/6 разъемов или лучших машин для видео покера в казино, а опция позволяет выбирать другие игры и платные таблицы. Тем не менее, автор не является экспертом по играм, и никаких гарантий не дано, что поведение видео покера является точным совпадением с каким -либо другим видео -покером. Пожалуйста, примите это на внимательное внимание, прежде чем попробовать настоящую машину для видео покера.
Первоначально вы можете увидеть следующий экран:

Просто подождите несколько секунд, пока игра закончит загрузку. Если ваше устройство очень старое или просто медленно, это может занять до 15 секунд. Современные устройства загружат игру менее чем за секунду.
Когда игра будет полностью загружена, вы увидите этот экран

Нажмите кнопку Deal New Hand чтобы увидеть свою первую руку.
Ваш счет падает на 10 каждый раз, когда вы делаете новую руку, потому что это то, сколько вы делаете ставки.

Теперь вы можете нажать на карты, которые вы хотите удержать. Зеленый батончик появляется под каждой картой. Если вы нажмете еще раз, это «разоблачит» карту, а зеленый бар исчезнет.

Затем нажмите кнопку Draw Cards , чтобы заменить карты, которые вы хотите отказаться.

Ну что ж, эта рука ничего не выиграла. Возможно, в следующий раз!
Игра продолжится, пока вы не уйдете или закончите чипсы.
Чтобы уйти, введите либо q , либо e . Ваш окончательный счет будет отображаться. Чтобы начать новую игру, перезагрузите веб -страницу.
Вот девять видов победных рук.

Две карты того же значения. Здесь показана пара королев.
Большинство вариантов видео покера платят только тогда, когда карточки - это домкраты, королевы, короли или тузы. Таким образом, название «Джеки или лучше». Десятки или лучше также платят, когда пара имеет десятки. Ни одна из других рук не имеет этого минимального требования.
Выплата за пару такая же, как и сумма вашей ставки.

Две разные пары в одной руке. Пример показывает пару 7s и пара 5 с.
Выплата за 9/6 Джек или лучше - вдвое больше ставки.

Три карты того же значения. Три 9s - пример показан.
Выплата за 9/6 разъемов или лучше в 3 раза превышает ставку.

Пять карт с последовательными ценностями. В этом случае карты 6, 7, 8, 9 и 10.
Они могут быть любым заказом в отображаемой руке.
ACE может быть рассчитан как один (например, Ace, 1, 2, 3 и 4), либо значение выше короля. (См. Пример королевского флешка для этого.)
Выплата за 9/6 Джекса или лучше в 4 раза превышает ставку.

Все карты находятся в одном костюме. Эта рука показывает флеш в сердцах.
Выплата за 9/6 домкрат или лучше в 6 раз превышает ставку.

Две карты одного значения и три карты другого значения. Эта рука имеет 6 -е и домкраты.
Выплата за 9/6 Джекса или лучше в 9 раз превышает ставку.

Четыре карты все одинаковое значение. В этом случае короли.
Выплата за 9/6 Джекса или лучше в 25 раз превышает ставку.

Рука - прямая, так и промывка. Эта рука показывает прямой флеш в клубах, от 5 до 9.
Выплата за 9/6 разъемов или лучше в 50 раз превышает ставку.

Это просто туз-высокий прилив (10, Джек, Королева, Король, Айс). Пример показывает королевский флеш в сердцах.
Выплата за 9/6 разъемов или лучше в 800 раз превышает ставку.
Использование клавиатуры обеспечивает очень быструю игру.
Начните игру и оставьте пальцы правой руки на клавиатуре, как при наборе прикосновения. Ваш большой палец будет на космической панели, а ваш указательный палец через мизинец будет на ключах j , k , l и Semicolon ( ; ).
Нажатие клавиши Enter (или return) делает то же самое, что нажатие на широкую кнопку под пятью картами.
Чтобы удерживать или удерживать карты, введите ключи, соответствующие картам:
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
Ключи могут быть напечатаны в любом порядке, и ключ может быть введен более одного раза, чтобы переключить удерживаемое/отброшенное состояние карты.
Затем введите ключ Enter (return) для сделки. Выброшенные карты переливаются, а финальная рука показана, а также то, как она признана либо выигрышной, либо проигрышной рукой, и новым счетом.
Вы можете изменить свою ставку до того, как будет сдана новая рука. Чтобы увеличить свою ставку по умолчанию 10 чипов, введите цифру A от 1 до 5 , а также ключи для удержания карт. Например, ввод 3 изменит вашу ставку на 30 чипов.
Если количество чипов меньше ставки, ставка автоматически уменьшается, чтобы сделать ее равным количеством оставшихся чипов, где она останется до тех пор, пока вы ее не измените.
По умолчанию - 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 -х или лучше, с выплатой всего дома и промывки. Весь американский - 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)
Для локального тестирования есть веб -сервер, который можно запустить так:
$ go run webserver.go
Web server running. Listening on ":8080"
Убедитесь, что вы находитесь в каталоге, содержащем файлы в приведенном выше списке, и запустите веб -сервер.
Затем укажите свой веб -браузер по адресу http: // localhost: 8080, чтобы запустить приложение.
Если вы хотите развернуть игру на общедоступном веб-сервере, скопируйте все файлы в списке на ваш сервер. Сервер должен поддерживать тип 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 программы.
Джей Т.С.
http://jayts.com
Copyright 2016-2019 Jay Ts
Выпущен по публичной лицензии GNU, версия 3.0 (GPLV3) (http://www.gnu.org/licenses/gpl.html)