{"id":13867,"date":"2026-05-07T23:55:36","date_gmt":"2026-05-07T15:55:36","guid":{"rendered":"https:\/\/www.hellhelp.com\/?page_id=13867"},"modified":"2026-05-16T14:58:38","modified_gmt":"2026-05-16T06:58:38","slug":"gomoku-game","status":"publish","type":"page","link":"https:\/\/www.hellhelp.com\/en\/gomoku-game\/","title":{"rendered":"\u4e94\u5b50\u68cb"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13867\" class=\"elementor elementor-13867\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d47e047 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d47e047\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5878c41\" data-id=\"5878c41\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e5502cc elementor-widget elementor-widget-shortcode\" data-id=\"e5502cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"mg-frame mg-theme-arcade\" data-mg-game=\"gomoku\" data-music-url=\"https:\/\/www.hellhelp.com\/wp-content\/plugins\/arcade-games\/assets\/music\/emakimono.mp3\"><button type=\"button\" class=\"mg-sound-toggle\" data-mg-sound-toggle aria-label=\"Toggle sound\"><svg class=\"mg-sound-toggle__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" fill=\"currentColor\"><\/polygon><path class=\"mg-sound-toggle__on\" d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"><\/path><path class=\"mg-sound-toggle__off\" d=\"M22 9l-6 6M16 9l6 6\"><\/path><\/svg><\/button><button type=\"button\" class=\"mg-music-toggle\" data-mg-music-toggle aria-label=\"Toggle background music\"><svg class=\"mg-music-toggle__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 17V5l10-2v12\"><\/path><circle cx=\"6\" cy=\"17\" r=\"3\" fill=\"currentColor\"><\/circle><circle cx=\"16\" cy=\"15\" r=\"3\" fill=\"currentColor\"><\/circle><path class=\"mg-music-toggle__off\" d=\"M3 21L21 3\"><\/path><\/svg><\/button><div class=\"mg-gomoku\"\n     data-mg-gomoku\n     data-logged-in=\"0\"\n     data-ai-worker-url=\"https:\/\/www.hellhelp.com\/wp-content\/plugins\/arcade-games\/games\/gomoku\/gomoku-ai-worker.js?ver=2.0.318\">\n\n    <!-- Lobby view -->\n    <div class=\"mg-gomoku__lobby\" data-view=\"lobby\">\n        <div class=\"mg-header\">\n            <h2 class=\"mg-title\">Gomoku<\/h2>\n            <div class=\"mg-gomoku__header-actions\">\n                <button type=\"button\" class=\"mg-btn\" data-action=\"practice-ai\">\n                    Practice vs AI                <\/button>\n                            <\/div>\n        <\/div>\n\n                    <p class=\"mg-gomoku__gate-msg\">\n                Log in to create a match. Anonymous visitors can still spectate ongoing matches below or practice against the AI.            <\/p>\n        \n        \n        <div class=\"mg-gomoku__section\">\n            <h3 class=\"mg-gomoku__section-title\">\n                Waiting for opponent            <\/h3>\n            <ul class=\"mg-gomoku__match-list notranslate\" translate=\"no\" data-list=\"waiting\">\n                <li class=\"mg-gomoku__empty\">No matches waiting. Create one!<\/li>\n            <\/ul>\n        <\/div>\n\n        <div class=\"mg-gomoku__section\">\n            <h3 class=\"mg-gomoku__section-title\">\n                Ongoing matches (spectate)            <\/h3>\n            <ul class=\"mg-gomoku__match-list notranslate\" translate=\"no\" data-list=\"ongoing\">\n                <li class=\"mg-gomoku__empty\">No public matches to spectate.<\/li>\n            <\/ul>\n        <\/div>\n\n            <\/div>\n\n    <!-- Difficulty selection modal \u2014 opens for \"Practice vs AI\" -->\n    <div class=\"mg-gomoku__create-modal\" data-practice-modal hidden>\n        <div class=\"mg-gomoku__create-card\">\n            <h3 class=\"mg-gomoku__create-title\">\n                Practice vs AI            <\/h3>\n            <p class=\"mg-gomoku__create-hint\" style=\"margin: 0 0 12px 0;\">\n                Solo practice mode. No ELO, no leaderboard \u2014 just play.            <\/p>\n            <fieldset class=\"mg-gomoku__size-picker\">\n                <legend>Board size<\/legend>\n                <label class=\"mg-gomoku__size-option\">\n                    <input type=\"radio\" name=\"mg-gomoku-size\" value=\"15\" checked>\n                    <span>15 \u00d7 15<small>Standard<\/small><\/span>\n                <\/label>\n                <label class=\"mg-gomoku__size-option\">\n                    <input type=\"radio\" name=\"mg-gomoku-size\" value=\"17\">\n                    <span>17 \u00d7 17<small>Mid<\/small><\/span>\n                <\/label>\n                <label class=\"mg-gomoku__size-option\">\n                    <input type=\"radio\" name=\"mg-gomoku-size\" value=\"19\">\n                    <span>19 \u00d7 19<small>Large<\/small><\/span>\n                <\/label>\n            <\/fieldset>\n            <fieldset class=\"mg-gomoku__size-picker mg-gomoku__side-picker\">\n                <legend>Side<\/legend>\n                <label class=\"mg-gomoku__size-option\">\n                    <input type=\"radio\" name=\"mg-gomoku-side\" value=\"1\" checked>\n                    <span>First<small>Play black<\/small><\/span>\n                <\/label>\n                <label class=\"mg-gomoku__size-option\">\n                    <input type=\"radio\" name=\"mg-gomoku-side\" value=\"2\">\n                    <span>Second<small>Play white<\/small><\/span>\n                <\/label>\n            <\/fieldset>\n            <p class=\"mg-gomoku__create-hint\" style=\"margin: 0 0 8px 0;\">\n                Difficulty            <\/p>\n            <div class=\"mg-gomoku__difficulty-grid\">\n                <button type=\"button\" class=\"mg-btn mg-gomoku__difficulty-btn\"\n                        data-action=\"start-practice\" data-difficulty=\"easy\">\n                    <strong>Easy<\/strong>\n                    <span>Beginner-friendly<\/span>\n                <\/button>\n                <button type=\"button\" class=\"mg-btn mg-gomoku__difficulty-btn\"\n                        data-action=\"start-practice\" data-difficulty=\"medium\">\n                    <strong>Medium<\/strong>\n                    <span>Solid challenge<\/span>\n                <\/button>\n                <button type=\"button\" class=\"mg-btn mg-gomoku__difficulty-btn\"\n                        data-action=\"start-practice\" data-difficulty=\"hard\">\n                    <strong>Hard<\/strong>\n                    <span>Expect to lose<\/span>\n                <\/button>\n            <\/div>\n            <div class=\"mg-gomoku__create-actions\">\n                <button type=\"button\" class=\"mg-btn\" data-action=\"cancel-practice\">\n                    Cancel                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Create match modal \u2014 logged-in only. JS toggles via [hidden]. -->\n    \n    <!-- Match view (used by players, spectators, and practice-vs-AI) -->\n    <div class=\"mg-gomoku__match\" data-view=\"match\" hidden>\n        <div class=\"mg-gomoku__match-header\">\n            <button type=\"button\" class=\"mg-btn\" data-action=\"back-to-lobby\">\n                \u2190 Back to Lobby            <\/button>\n            <!-- Practice-mode badge \u2014 JS toggles `hidden` and writes the\n                 size\/difficulty text into the [data-practice-detail]\n                 span. Sits inline in the header so it's compact yet\n                 visible whenever the match view is showing. Real PvP\n                 matches keep this hidden \u2014 see showMatch(). -->\n            <div class=\"mg-gomoku__practice-badge\" data-practice-badge hidden>\n                <span>Practice Mode \u2014 not ranked<\/span>\n                <span class=\"mg-gomoku__practice-badge-sep\" data-practice-detail-sep hidden>\u00b7<\/span>\n                <span class=\"mg-gomoku__practice-badge-detail notranslate\" translate=\"no\" data-practice-detail><\/span>\n            <\/div>\n            <div class=\"mg-gomoku__status notranslate\" translate=\"no\" data-status><\/div>\n        <\/div>\n\n        <div class=\"mg-gomoku__players\">\n            <div class=\"mg-gomoku__player\" data-player=\"1\">\n                <span class=\"mg-gomoku__stone mg-gomoku__stone--black\"><\/span>\n                <span class=\"mg-gomoku__player-name notranslate\" translate=\"no\" data-name=\"1\"><\/span>\n                <span class=\"mg-gomoku__clock notranslate\" translate=\"no\" data-clock=\"1\"><\/span>\n            <\/div>\n            <span class=\"mg-gomoku__vs\">VS<\/span>\n            <div class=\"mg-gomoku__player\" data-player=\"2\">\n                <span class=\"mg-gomoku__clock notranslate\" translate=\"no\" data-clock=\"2\"><\/span>\n                <span class=\"mg-gomoku__player-name notranslate\" translate=\"no\" data-name=\"2\"><\/span>\n                <span class=\"mg-gomoku__stone mg-gomoku__stone--white\"><\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"mg-gomoku__board-wrap\">\n            <canvas class=\"mg-gomoku__board\" data-board\n                    width=\"600\" height=\"600\"\n                    aria-label=\"Gomoku board\"><\/canvas>\n        <\/div>\n\n        <div class=\"mg-gomoku__actions\">\n            <!-- Share-link button \u2014 JS shows it only for players in\n                 private matches (invite_code is only sent to players\n                 in \/state response). Spectators\/public matches: hidden. -->\n            <button type=\"button\" class=\"mg-btn\" data-action=\"share-link\"\n                    data-share-btn hidden>\n                \ud83d\udd17 Copy Share Link            <\/button>\n            <!-- v1.0.5: shown on finished PvP matches for the players\n                 (not spectators) \u2014 opens this match's replay inline.\n                 JS sets data-replay-id from the post-game state and\n                 toggles `hidden`. v1.0.7: emoji prefix removed (Chrome\n                 paints \u25b6 U+25B6 as a blue color-emoji which doesn't\n                 match the theme). -->\n            <button type=\"button\" class=\"mg-btn\" data-action=\"open-replay-for-this\"\n                    data-watch-this-btn hidden>\n                Watch this game            <\/button>\n            <!-- Practice-mode buttons (only shown in practice).\n                 Order: New Game first, Resign second \u2014 matches xiangqi\n                 and junglechess for cross-game consistency. -->\n            <button type=\"button\" class=\"mg-btn\" data-action=\"practice-restart\"\n                    data-practice-only hidden>\n                New Game            <\/button>\n            <!-- Resign button hidden for spectators via JS class toggle. -->\n            <button type=\"button\" class=\"mg-btn\" data-action=\"resign\"\n                    data-resign-btn data-spectator-hide>\n                Resign            <\/button>\n            <!-- v1.0.17: draw-offer state machine. Four buttons, all\n                 hidden by default; JS toggles exactly one (or two,\n                 when opponent offered) visible based on\n                 m.draw_offered_by and myRole. Spectators see none. -->\n            <button type=\"button\" class=\"mg-btn\" data-action=\"draw-offer\"\n                    data-draw-offer-btn data-spectator-hide hidden>\n                Offer draw            <\/button>\n            <button type=\"button\" class=\"mg-btn\" data-action=\"draw-withdraw\"\n                    data-draw-withdraw-btn data-spectator-hide hidden>\n                Withdraw offer            <\/button>\n            <button type=\"button\" class=\"mg-btn\" data-action=\"draw-accept\"\n                    data-draw-accept-btn data-spectator-hide hidden>\n                Accept draw            <\/button>\n            <button type=\"button\" class=\"mg-btn\" data-action=\"draw-decline\"\n                    data-draw-decline-btn data-spectator-hide hidden>\n                Decline            <\/button>\n        <\/div>\n\n        <!-- v1.0.5: replay viewer mount point. JS swaps in the\n             transport bar via MG.replay.open({host: this, ...}). Stays\n             empty (and visually hidden) until a replay opens. -->\n        <div class=\"mg-gomoku__replay-mount\" data-replay-mount hidden><\/div>\n    <\/div>\n<\/div>\n<\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f4b1719 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f4b1719\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-40c616d\" data-id=\"40c616d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-61d77ad elementor-widget elementor-widget-shortcode\" data-id=\"61d77ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">            <div class=\"mg-friends mg-friends--logged-out mg-themed mg-theme-arcade\">\n                <p>\u8acb\u5148\u767b\u5165\u5148\u81f3\u53ef\u4ee5\u4f7f\u7528\u597d\u53cb\u529f\u80fd<\/p>\n            <\/div>\n            \n        <div class=\"mg-scoreboard mg-scoreboard--tabbed mg-themed mg-theme-arcade\"\n             data-mg-scope-scoreboard\n             data-mg-scope-slug=\"gomoku\">\n            <header class=\"mg-scoreboard__header\">\n                <h3 class=\"mg-scoreboard__title\">Gomoku \u2014 Leaderboard<\/h3>\n                <span class=\"mg-scoreboard__meta\">\n                    ELO                <\/span>\n            <\/header>\n            <div class=\"mg-scoreboard__scope-tabs-row\">\n                <div class=\"mg-scoreboard__scope-tabs\" role=\"tablist\"\n                     aria-label=\"Leaderboard scope\">\n                    <button type=\"button\"\n                            class=\"mg-scoreboard__scope-tab is-active\"\n                            role=\"tab\"\n                            aria-selected=\"true\"\n                            data-mg-scope=\"global\">\n                        All                    <\/button>\n                    <button type=\"button\"\n                            class=\"mg-scoreboard__scope-tab\"\n                            role=\"tab\"\n                            aria-selected=\"false\"\n                            data-mg-scope=\"friends\">\n                        Friends                    <\/button>\n                <\/div>\n            <\/div>\n            <div class=\"mg-scoreboard__scope-pane is-active\"\n                 data-mg-scope-pane=\"global\" role=\"tabpanel\">\n                        <div class=\"mg-scoreboard mg-scoreboard--elo\"\n             data-mg-scoreboard\n             data-game-slug=\"gomoku\"\n             data-mg-limit=\"32\"\n             data-score-format=\"elo\"\n             data-score-direction=\"higher\">\n            <header class=\"mg-scoreboard__header\">\n                <h3 class=\"mg-scoreboard__title\">Gomoku \u2014 Leaderboard<\/h3>\n                <span class=\"mg-scoreboard__meta\">\n                    ELO                <\/span>\n            <\/header>\n                            <p class=\"mg-scoreboard__empty\">\n                    No records yet \u2014 be the first on the leaderboard!                <\/p>\n                    <\/div>\n                    <\/div>\n            <div class=\"mg-scoreboard__scope-pane\"\n                 data-mg-scope-pane=\"friends\" role=\"tabpanel\">\n                <p class=\"mg-scoreboard__login-prompt\">Log in to see the friends leaderboard<\/p>            <\/div>\n        <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13867","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/pages\/13867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/comments?post=13867"}],"version-history":[{"count":8,"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/pages\/13867\/revisions"}],"predecessor-version":[{"id":14259,"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/pages\/13867\/revisions\/14259"}],"wp:attachment":[{"href":"https:\/\/www.hellhelp.com\/en\/wp-json\/wp\/v2\/media?parent=13867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}