2018 년 8 월 버전 1.11이 출시되면서 Go는 WebAssembly에 대한 초기 지원을 제공하여 클라이언트 측 ( "프론트 엔드") 웹 개발에 사용할 수 있습니다. WebAssembly를 사용하면 JavaScript 이외의 언어가 웹 브라우저를 제어 할 수 있으며 효율적으로 실행되는 기본 컴파일 코드로 작동합니다.
그것이 작동하는 기본 방법은 Go 컴파일러가 원본 실행 파일이 아닌 WebAssembly 형식을 생성한다는 것입니다. WebAssembly 형식이 브라우저에서로드되면 기본 기계 코드로 빠르게 컴파일되어 실행됩니다.
GO의 정적 타이핑 및 효율성을 포함하여 JavaScript 대신 GO를 사용하는 것을 선호하는 몇 가지 좋은 이유가 있습니다. 컴파일 된 언어이므로 프로그램이 실행 중일 때만 찾기보다는 대부분의 프로그래밍 오류를 잡을 수 있으며 버그가 포함 된 코드의 일부를 실행하는 것이 아니라 GO 컴파일러가 잡을 수 있습니다. GO는 동시성을 위해 설계되었으므로 현대 웹 프로그래밍에 유용하게하기 위해 JavaScript에 추가 된 약속 및 기타 구성을 처리 할 필요가 없습니다.
나는 기술에 대해 궁금했고, 그것에 대해 더 많이 배웠을 때, WebAssembly가 웹 개발에 매우 인기 있고 중요한 기술이 될 것이라는 압도적 인 합의를 발견했습니다. 이 기술에 대한 많은 계획이 있으며 Mozilla, Google 및 기타와 관련된 협업에 의해 빠르게 개발되고 있습니다. 모든 주요 브라우저 개발자는 2017 년에 WebAssembly에 대한 지원을 발표했으며 이는 모두 새로운 것입니다. 그래서 작동합니까?
나는 그것을 시도하기로 결정했다. 나는 2 년 전에 C에서 쓴 비디오 포커 게임을 가지고 나중에 JavaScript와 Go로 번역했습니다. GO 버전을 이벤트 중심으로 수정 한 다음 WebAssembly 인터페이스를 작성하여 웹 앱으로 변환했습니다.
Go의 WebAssembly 지원이 너무 새롭기 때문에 많은 문제가있을 것으로 예상했습니다. 하지만 나는하지 않았다! 기본 패키지 문서와 출발점으로 사용하기위한 몇 가지 매우 간단한 예를들더라도 일이 작동하는 것은 그리 어렵지 않았으며 모든 것이 거의 완벽하게 작동하는 것 같습니다. 이것이 Go의 WebAssembly 프로그래밍이 첫 번째 릴리스에서와 같다면, 나는 미래에 대해 매우 열정적입니다.
현재 릴리스에서 Video Poker는 클라이언트 측 그 GO를 사용하여 MVC (Model-View-Control) 웹 앱을 구현하는 것을 보여줍니다. videopoker-web.go 의 게임 엔진은 모델을 구현합니다. 보기는 main.go 의 WebAssembly 인터페이스에 의해 처리되어 DOM을 조작하여 웹 브라우저의 업데이트를 초래하며 HTML 및 WebAssembly Interface의 이벤트 처리 및 콜백과 함께 브라우저 창에 입력 한 마우스 클릭 및 키를 통한 컨트롤 main.go .
그것은 모두 GO에 쓰여졌 고 JavaScript 한 줄을 쓸 필요가 없었습니다. 얼마나 멋지다.
이는 GO 버전 1.12로 작동하도록 업데이트되었으며 패키지 SyScall/JS에서 WebAssembly API의 변경 사항을 도입했습니다.
이 릴리스는 2019 년 2 월 말에 있습니다. 게임 엔진은 작동하며 간단한 GO/WebAssembly 앱을 볼 수 있습니다.
나는 항상 그것을 실행하지 않았을 수도 있지만 게임을하기 위해서는이 웹 페이지를 시도 할 수 있습니다.
http://jayts.com/vp
게임에 대한 설명과 연주 방향은 다음과 같습니다.
앱에서 알 수있는 이상한 행동이 있습니다.
이 앱은 데스크탑 웹 브라우저 (Firefox, Chrome, Opera 및 Safari)와 잘 작동하지만 모바일 장치에 대한 지원은 제한적입니다. 게임이로드되기 위해 몇 초 동안 (이전 태블릿의 Firefox의 경우 최대 15 초)를 기다려야 할 수도 있습니다.
모바일 장치에서 앱이 처음 시작되었을 때 또는 페이지를 다시로드 (새로 고침) 할 때 앱이 제대로로드되지 않을 수 있습니다. 실패하면 오류 메시지가 "비디오 포커"제목 줄 아래의 갈색 텍스트에 표시됩니다. 이 버그는 문제 #27462 : Golang/Go #27462와 동일합니다.
webassembly를로드하는 오류 메시지 오류가 발생하지 않으면 안드로이드를위한 Firefox가 실패하고 메모리를 벗어난 WebAssembly를로드하고 Chromium 기반 Browswers (Google Chrome and Opera)는 WebAssembly를로드하여 실패합니다. -RangeError : WebAssembly Instantiation : Memory : WASM 메모리 .
이런 일이 발생하면 브라우저를 다시 시작하고 비디오 포커 앱 외에 다른 웹 페이지를 열지 마십시오. 이것은 종종 Android 용 Firefox로 성공합니다.
AQ ( "Quit") 또는 E ( "Exit") Keypress에서 게임은 게임 종료 메시지를 표시 한 다음 멈추고 완전히 응답하지 않습니다. Go 프로그램이 종료 되었기 때문입니다. 이것은 콘솔 버전의 홀드 오버이며 향후 릴리스에서 더 우아하게 작동합니다. (다시 말해, 이것은 Go/WebAssembly의 문제가 아닙니다.)
지금은 페이지를 다시로드하여 새 게임을 시작하십시오.
비디오 포커는 5 카드 드로우 포커를 기반으로하는 인기있는 카지노 게임입니다.
플레이어는 5 개의 카드를 다루고 있으며, 그 중 일부 또는 전부를 버릴 수 있습니다. (실제로, 플레이어는 어떤 카드를 개최할지 나타냅니다.) 폐기 된 카드는 갑판에서 다루어진 카드로 대체됩니다. 목표는 승리 한 손을 얻는 것입니다. 9 가지 종류의 승리 손이 있습니다. 각각은 다른 확률을 가지고 있으며, 금액은 손의 불완전 성이 높아져 증가합니다.
재미를 위해 또는 카지노에 가기 전에 전략을 연습하는 좋은 방법입니다.
비디오 포커의 많은 변형이 옵션으로 포함되어 있습니다. (현재 AI 키를 사용하여 키보드에서만 액세스 할 수 있습니다.) 기본값보다 9/6 잭보다 더 잘 지불합니다.
기본적으로 비디오 포커는 카지노에서 9/6 잭 또는 더 나은 비디오 포커 머신의 동작과 밀접하게 일치하며 다른 게임 및 지불 테이블을 선택할 수 있습니다. 그러나 저자는 게임 전문가가 아니며 비디오 포커의 행동이 다른 비디오 포커와 정확히 일치한다는 것을 보장하지는 않습니다. 실제 비디오 포커 머신을 사용해 보시기 전에 신중하게 고려하십시오.
처음에는 다음 화면이 표시 될 수 있습니다.

게임이로드를 마치기 위해 몇 초만 기다리십시오. 장치가 매우 오래되거나 평범한 느리면 최대 15 초가 걸릴 수 있습니다. 최신 장치는 1 초 이내에 게임을로드합니다.
게임이 완전히로드되면이 화면이 표시됩니다.

Deal New Hand 버튼을 클릭하여 직접보십시오.
새로운 손을 처리 할 때마다 점수가 10으로 떨어집니다.

이제 잡고 싶은 카드를 클릭 할 수 있습니다. 각 카드 아래에 녹색 막대가 나타납니다. 다시 클릭하면 카드가 "보유되지 않은"상태가되고 녹색 막대가 사라집니다.

그런 다음 Draw Cards 버튼을 클릭하여 버릴 카드를 교체하십시오.

오 글쎄,이 손은 아무것도 이기지 못했습니다. 다음 번에!
게임은 칩이 종료되거나 끊어 질 때까지 계속됩니다.
종료하려면 q 또는 e 입력하십시오. 최종 점수가 표시됩니다. 새로운 게임을 시작하려면 웹 페이지를 다시로드하십시오.
다음은 9 가지 유형의 승리 한 손입니다.

같은 가치의 두 카드. 여기에 한 쌍의 여왕이 표시됩니다.
비디오 포커의 대부분의 변형은 카드가 잭, 여왕, 왕 또는 에이스 일 때만 지불합니다. 따라서 이름은 "잭 또는 더 나은"입니다. 쌍이 수십 일 때까지도 수년 이상을 지불합니다. 다른 손 중 어느 것도이 최소한의 요구 사항이 없습니다.
쌍에 대한 지불금은 BET 금액과 동일합니다.

같은 손에 두 개의 다른 쌍이 있습니다. 이 예제는 7 초과 5 쌍을 보여줍니다.
9/6 잭 이상에 대한 지불금은 BET의 두 배입니다.

같은 가치의 세 장의 카드. 3 개의 9가 표시된 예입니다.
9/6 잭 이상에 대한 지불금은 베팅의 3 배입니다.

연속 값을 가진 5 개의 카드. 이 경우 카드는 6, 7, 8, 9 및 10입니다.
그들은 표시된 손으로 어떤 순서가 될 수 있습니다.
에이스는 하나 (예 : 에이스, 1, 2, 3 및 4) 또는 왕 위의 값으로 계산 될 수 있습니다. (이를 위해 로얄 플러시의 예를 참조하십시오.)
9/6 잭 이상에 대한 지불금은 BET의 4 배입니다.

모든 카드는 같은 소송에 있습니다. 이 손은 하트의 플러시를 보여줍니다.
9/6 잭 이상에 대한 지불금은 베팅의 6 배입니다.

한 값의 2 장, 다른 값의 3 장의 카드. 이 손에는 6S와 잭이 있습니다.
9/6 잭 이상에 대한 지불금은 베팅의 9 배입니다.

4 장의 카드 모두 같은 값. 이 경우 왕.
9/6 잭 이상에 대한 지불금은 BET의 25 배입니다.

손은 똑 바르고 플러시입니다. 이 손은 클럽에서 5 ~ 9의 직선 플러시를 보여줍니다.
9/6 잭 이상에 대한 지불금은 BET의 50 배입니다.

이것은 단순히 Ace-High Straight Flush (10, Jack, Queen, King, Ace)입니다. 예제는 마음의 왕실 플러시를 보여줍니다.
9/6 잭 이상에 대한 지불금은 BET의 800 배입니다.
키보드를 사용하면 매우 빠른 게임 플레이가 가능합니다.
게임을 시작하고 타이핑을 터치 할 때 마치 키보드에 오른손의 손가락을 쉬십시오. 엄지 손가락은 우주 막대에 있고 작은 손가락을 통한 지수 손가락은 키 j , k , l 및 세미콜론 ( ; )에 있습니다.
Enter (또는 반환) 키를 누르면 5 장의 카드 아래의 넓은 버튼을 클릭하는 것과 동일합니다.
카드를 보유하거나 보유하지 않으려면 카드에 해당하는 키를 입력하십시오.
SPACE Leftmost card
j Second card from left
k Middle card
l Second card from right
; Rightmost card
키는 순서대로 타이핑 될 수 있으며 키를 한 번 이상 입력하여 카드의 고정/폐기 상태를 전환 할 수 있습니다.
그런 다음 Enter (return) 키를 입력하여 거래하십시오. 폐기 된 카드는 Redealt이며, 최종 손은 승리 또는 패배 손으로 인식되는 방식과 새로운 점수로 표시됩니다.
새로운 손이 다루기 전에 베팅을 바꿀 수 있습니다. 기본 10 칩에서 베팅을 늘리려면 A 자리를 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
변형은 규칙 및/또는 지불 테이블이 약간 다릅니다. 잭의 변형 이상의 경우, 첫 번째 숫자는 풀 하우스에 대한 지불금이고 두 번째 숫자는 플러시에 대한 지불금입니다. 풀 하우스와 플러시에 대해서는 6/5 지불금만으로 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 용입니다.
제이 TS
http://jayts.com
Copyright 2016-2019 Jay TS
GNU 공개 라이센스, 버전 3.0 (gplv3) (http://www.gnu.org/licenses/gpl.html)에 따라 출시