神经网络连子棋V1.2版使用说明

本文介绍了一款专为五子棋爱好者设计的训练软件,支持多种棋类规则及不同难度级别,旨在帮助用户提高五子棋技巧和思维能力。
部署运行你感兴趣的模型镜像

适用人群:寒假在家的学生、独居人群、专业技术研究人员、五子棋爱好者。

适用目的:五子棋能力训练、大脑思维深度训练、记忆力提升、精神专注度提升。

未来适用目的:待模型训练充分之后,还适用于评测评估,包括但不限于评测五子棋水平、大脑思维深度、记忆力水平、精神专注度等。

1. 运行软件

在官网(www.gnxxkj.com)下载“神经网络连子棋”最新版,即V1.2版,可以右击该exe程序,在右键菜单中选择“属性”,然后在弹出的对话框中选择“详细信息”标签页,查看到软件的具体版本号,如下图所示:

双击运行下载的软件,显示结果如下图所示:

 

此时尚未登录,可以查看新闻和活动、当日挑战排名,也可以点击“联系我们”标签页查看产品介绍、企业介绍、联系合作和问题反馈,但下棋需要先登录。

2. 用户登录

点击软件界面的“连子棋挑战”标签页, 将会弹出用户登录对话框,如下图所示:

在对话框中输入用户名和密码并点击“登录”按钮即可完成用户登录。若尚未注册用户,可以点击“注册”按钮先进行注册,完成注册后再在此登录。

登录成功后可以点击“个人中心”查看积分、红包、问题和反馈等。

3. 下棋设置

登录后的“连子棋挑战”标签页默认如下图所示:

右侧中间可以看到,15x15表示当前的棋盘大小为15行15列的棋盘,当前版本不支持更改棋盘大小。在其下方的“六连子”表示,当前的游戏规则为六子相连获胜,可以点击该下拉框来更改游戏规则,如下图所示:

V1.2版本支持三连子到十五连子共13种连子规则,其中的三连子即“井字棋”、五连子即“五子棋”。假如我们想玩五子棋,可以在此选中“五连子”。更换游戏规则后,会弹出对话框进行提示,以免误操作,如下图所示:

点击“确定”按钮即可完成游戏规则的更改,结果如下图所示:

在右侧最下方有下拉列表显示着“挑战几层网络”,其中列出了当前神经网络模型可支持的网络深度,如下图所示:

该图表示,当前的五子棋模型支持最高11层网络,可以挑战2层的网络难度、3层的网络难度等,最高可以挑战11层的网络难度。层数越多,则神经网络的智能程度越高,挑战获胜越难,最低可以选择2层的网络。 

此处的网络层数列表决定于神经网络模型,会在切换游戏规则时根据选择的“几连子”而读取相应的模型并更新该层数列表,默认选中的是5层网络。若现有网络低于5层,则默认选中的是最高层的网络,例如,更改游戏规则为“三连子”,即井字棋,结果如下图所示:

此时,默认选中的是4层网络,因为“井字棋”目前的网络模型最高只支持4层网络,如下图所示:

可以在此处更改要使用的网络层数来更改挑战难度。对于初学者、入门级棋手而言,可以选择较少的层数,例如:选择2层网络。更改网络层数后会弹出对话框进行提示,以免误操作,结果如下图所示:

点击“确定”按钮即可完成游戏难度的更改。

V1.2版本支持的游戏规则为三连子至十五连子,分别表示三子相连即获胜、四子相连获胜......。其中,获胜连子数越高,则下棋的总体难度越大,例如:五子棋总体比井字棋难,九连子总体比五连子难,依此类推。

V1.2版本支持的网络深度依据网络模型文件而定,目前最高的支持11层网络,最低的支持2层网络,这些可选层数将随着网络模型的不断学习进化而变化,模型文件存放于服务器上,将被不定期更新。选择挑战不同的网络层数,可以控制下棋的难度,在同一种下棋规则下(如:五子棋),挑战的网络层数越大,则神经网络越智能,下棋获胜的难度越大,对应的机器思考时间也会长一些。反之则难度越小。

对于小学生、老人、入门级棋手等,建议选择三连子、四连子、五连子这几类游戏规则之一,挑战的网络层数可以从2层开始,觉得没难度之后再逐步增加挑战的网络层数。

对于高年级的学生、独居人群、进阶级棋手或其他假期赋闲人群,建议选择五连子、六连子、七连子这几类游戏规则之一,挑战的网络层数可以从5层开始,觉得太容易的话可以逐步增加挑战的网络层数,若觉得难度有些大,也可以慢慢减少挑战的网络层数。

对于五子棋职业棋手,建议选择九连子这样的获胜连子数较大的游戏规则,也可以选择五连子、六连子这样的规则,但挑战的网络层数选高些。

对于专业技术人员,建议选择五连子或六连子规则,并选择较高的网络层数进行挑战。

对于想自我评测或评估的人群,目前可以选择五连子或六连子,然后调整不同的网络层数来评测自己的水平和状态。更高的获胜连子数理论上也可以用于评测,但目前模型训练尚不充分;而更低的获胜连子数则不适于大多数人的评测,仅适用于小学生、老年人等群体的评测。

4. 下棋

设置好游戏规则和挑战难度之后,点击“开始新局”按钮即可开始下棋,如下图所示:

每一步落子的思考时间最多200秒,如果觉得当前局赢不了而不想继续、想重开一局,可以点击“认输”按钮结束本局,然后点击“开始新局”来重开一局。

默认黑子先行,而黑子为挑战者,即默认挑战者先落子,机器后落子。对于15x15棋盘上的井字棋而言,先手必赢,如下图所示:

5. 总结

根据测试发现,三连子(井字棋)先手必赢,挑战难度非常小,仅适用于低年级小学生或更小的孩子,用于启蒙教育。十五连子在模型成熟后几乎赢不了,即便当前的模型下,也很难获胜。五连子至十一连子的随机性更高。

如果考虑到市面上已有的软件和可能的遍历程序,五连子(五子棋)被遍历的可能性较高,六连子、七连子等由于遍历的硬件资源消耗和时间消耗问题,被遍历的难度增大不少,九连子、十连子等在有限的时间内就较难遍历了。因而,如果想规避程序和软件的作弊行为,可以选择较大的获胜连子数。

对于专业技术人员和研究人员来说,如果有自己的想法和需求,可以从官网下载SDK,然后自己开发相应的软件。最后,使用V1.2版进行学习、训练、评测的话,有机会获得随机额度的红包,详情可以参考官网的介绍。

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

Here's a complete **QB64PE** (a modern version of QBASIC with enhanced graphics and file handling) program that implements a **basic Go (Weiqi/Baduk) game**, meeting your requirements: - ✅ Yellow board background - ✅ Players alternate turns: Black first, then White - ✅ Captures dead stones (no liberties) automatically - ✅ Supports `PASS` to skip turn; two consecutive passes end the game - ✅ Manual dead stone cleanup after game ends - ✅ Save/load game in **SGF format** (Smart Game Format) - ✅ Navigate saved SGF using **Left/Right Arrow keys** (previous/next move), **Page Up/Down** (go to start/end) --- ```basic ' Go Game in QB64PE ' Features: ' - 19x19 Board, Yellow Background ' - Black starts, players alternate ' - Auto-capture of stones with no liberties ' - Two PASSes end the game ' - Manual dead stone removal after game ' - Save/Load SGF, Navigate with Arrow Keys & Page Up/Down SCREEN _NEWIMAGE(800, 600, 32) _SCREENMOVE 100, 50 CONST BOARD_SIZE = 19 CONST CELL = 25 CONST MARGIN = 40 CONST BOARD_WIDTH = BOARD_SIZE * CELL CONST WIN_WIDTH = 800 CONST WIN_HEIGHT = 600 TYPE Point x AS INTEGER y AS INTEGER END TYPE DIM SHARED Board(1 TO BOARD_SIZE, 1 TO BOARD_SIZE) AS INTEGER ' 0=empty, 1=black, 2=white DIM SHARED MoveHistory(1 TO 361) AS Point ' Stores moves DIM SHARED HistoryCount AS INTEGER DIM SHARED GameOver AS INTEGER DIM SHARED PassCount AS INTEGER DIM SHARED CurrentPlayer AS INTEGER ' 1=Black, 2=White DIM SHARED RemovedStones AS STRING ' For SGF: record removed stones manually later ' Initialize game SUB InitGame CLS FOR i = 1 TO BOARD_SIZE FOR j = 1 TO BOARD_SIZE Board(i, j) = 0 NEXT j NEXT i HistoryCount = 0 GameOver = 0 PassCount = 0 CurrentPlayer = 1 ' Black starts RemovedStones = "" END SUB ' Draw board SUB DrawBoard ' Yellow background LINE (MARGIN - CELL, MARGIN - CELL)-(MARGIN + BOARD_WIDTH, MARGIN + BOARD_WIDTH), _RGB(255, 255, 150), BF ' Grid lines FOR i = 0 TO BOARD_SIZE - 1 LINE (MARGIN + i * CELL, MARGIN)-(MARGIN + i * CELL, MARGIN + BOARD_WIDTH), _RGB(0, 0, 0) LINE (MARGIN, MARGIN + i * CELL)-(MARGIN + BOARD_WIDTH, MARGIN + i * CELL), _RGB(0, 0, 0) NEXT i ' Star points (hoshi) DIM HoshiPoints(1 TO 9) AS Point DATA 3,3, 3,9, 3,15, 9,3, 9,9, 9,15, 15,3, 15,9, 15,15 FOR i = 1 TO 9 READ HoshiPoints(i).x, HoshiPoints(i).y CIRCLE (MARGIN + (HoshiPoints(i).x - 1) * CELL, MARGIN + (HoshiPoints(i).y - 1) * CELL), 3, _RGB(0, 0, 0), , , , F NEXT i ' Draw stones from board state FOR i = 1 TO BOARD_SIZE FOR j = 1 TO BOARD_SIZE IF Board(i, j) > 0 THEN color = IIF(Board(i, j) = 1, _RGB(0, 0, 0), _RGB(255, 255, 255)) CIRCLE (MARGIN + (i - 1) * CELL, MARGIN + (j - 1) * CELL), 10, color, , , , F END IF NEXT j NEXT i ' Highlight current player COLOR _RGB(0, 0, 0) LOCATE 2, 2: PRINT "Current: "; IIF(CurrentPlayer = 1, "Black", "White"); " " LOCATE 3, 2: PRINT "Passes: "; PassCount; "/2 " LOCATE 4, 2: PRINT "Moves: "; HistoryCount; " " IF GameOver THEN LOCATE 5, 2: PRINT "Game Over! Press C to clean dead stones or S to save." END SUB ' Convert screen coordinates to board index FUNCTION GetBoardPos% (mouseX%, mouseY%) IF mouseX% < MARGIN OR mouseX% > MARGIN + BOARD_WIDTH THEN EXIT FUNCTION IF mouseY% < MARGIN OR mouseY% > MARGIN + BOARD_WIDTH THEN EXIT FUNCTION GetBoardPos% = INT((mouseX% - MARGIN) / CELL) + 1 + (INT((mouseY% - MARGIN) / CELL) + 1) * 100 END FUNCTION ' Convert board index to coordinates SUB IndexToCoord (idx%, OUTx%, OUTy%) OUTx% = (idx% MOD 100) OUTy% = (idx% \ 100) END SUB ' Get opponent color FUNCTION Opponent% (color%) Opponent% = IIF(color% = 1, 2, 1) END FUNCTION ' Check if a stone group has at least one liberty FUNCTION HasLiberty (x, y, team, visited() AS INTEGER) AS INTEGER IF x < 1 OR x > BOARD_SIZE OR y < 1 OR y > BOARD_SIZE THEN EXIT FUNCTION IF visited(x, y) THEN EXIT FUNCTION IF Board(x, y) = 0 THEN HasLiberty = -1 ' Found a liberty EXIT FUNCTION END IF IF Board(x, y) <> team THEN EXIT FUNCTION visited(x, y) = 1 IF HasLiberty(x + 1, y, team, visited) THEN HasLiberty = -1: EXIT FUNCTION IF HasLiberty(x - 1, y, team, visited) THEN HasLiberty = -1: EXIT FUNCTION IF HasLiberty(x, y + 1, team, visited) THEN HasLiberty = -1: EXIT FUNCTION IF HasLiberty(x, y - 1, team, visited) THEN HasLiberty = -1: EXIT FUNCTION END FUNCTION ' Remove all stones in group SUB RemoveGroup (x, y, team) IF x < 1 OR x > BOARD_SIZE OR y < 1 OR y > BOARD_SIZE THEN EXIT SUB IF Board(x, y) <> team THEN EXIT SUB Board(x, y) = 0 RemoveGroup x + 1, y, team RemoveGroup x - 1, y, team RemoveGroup x, y + 1, team RemoveGroup x, y - 1, team END SUB ' Capture stones without liberties SUB CaptureStones (player) DIM visited(1 TO BOARD_SIZE, 1 TO BOARD_SIZE) AS INTEGER DIM opp AS INTEGER opp = Opponent(player) FOR i = 1 TO BOARD_SIZE FOR j = 1 TO BOARD_SIZE IF Board(i, j) = opp AND visited(i, j) = 0 THEN DIM tempVisited(1 TO BOARD_SIZE, 1 TO BOARD_SIZE) AS INTEGER IF HasLiberty(i, j, opp, tempVisited) = 0 THEN ' No liberty: capture! RemoveGroup i, j, opp ' Mark captured area as visited FOR x = 1 TO BOARD_SIZE FOR y = 1 TO BOARD_SIZE IF tempVisited(x, y) THEN visited(x, y) = 1 NEXT y NEXT x ELSE ' Copy tempVisited to global visited to avoid rechecking FOR x = 1 TO BOARD_SIZE FOR y = 1 TO BOARD_SIZE IF tempVisited(x, y) THEN visited(x, y) = 1 NEXT y NEXT x END IF END IF NEXT j NEXT i END SUB ' Make a move FUNCTION MakeMove% (x, y, player) IF x < 1 OR x > BOARD_SIZE OR y < 1 OR y > BOARD_SIZE THEN MakeMove% = 0: EXIT FUNCTION IF Board(x, y) <> 0 THEN MakeMove% = 0: EXIT FUNCTION ' Temporarily place stone Board(x, y) = player ' Capture opponent stones first CaptureStones player ' Self-capture check: does the placed stone belong to a group with no liberties? DIM selfVisited(1 TO BOARD_SIZE, 1 TO BOARD_SIZE) AS INTEGER IF HasLiberty(x, y, player, selfVisited) = 0 THEN ' Illegal self-capture Board(x, y) = 0 ' Undo CaptureStones player ' Revert captures MakeMove% = 0 EXIT FUNCTION END IF ' Valid move MoveHistory(HistoryCount + 1).x = x MoveHistory(HistoryCount + 1).y = y HistoryCount = HistoryCount + 1 CurrentPlayer = Opponent(player) PassCount = 0 ' Reset pass counter MakeMove% = 1 END FUNCTION ' Pass turn SUB DoPass PassCount = PassCount + 1 CurrentPlayer = Opponent(CurrentPlayer) IF PassCount >= 2 THEN GameOver = 1 END SUB ' Main game loop SUB PlayGame InitGame DO DrawBoard _DISPLAY DO WHILE _MOUSEINPUT LOOP mx = _MOUSEX: my = _MOUSEY: mb = _MOUSEBUTTON(1) k$ = UCASE$(INKEY$) IF GameOver = 0 THEN IF mb = 1 THEN pos = GetBoardPos(mx, my) IF pos > 0 THEN x = pos MOD 100 y = pos \ 100 IF MakeMove(x, y, CurrentPlayer) THEN SLEEP 1 ' Prevent accidental double-clicks ELSE BeepError END IF END IF END IF IF k$ = "P" THEN DoPass END IF ELSE ' Post-game: allow cleanup or save IF k$ = "C" THEN ManualCleanup END IF IF k$ = "S" THEN SaveSGF END IF END IF _LIMIT 30 LOOP WHILE k$ <> CHR$(27) ' ESC to quit END SUB SUB BeepError SOUND 400, .2 END SUB ' Allow manual removal of dead stones after game SUB ManualCleanup LOCATE 6, 2: PRINT "Click dead stones to remove/toggle. Press ENTER when done." DO DrawBoard LOCATE 6, 2: PRINT "Click dead stones to remove/toggle. Press ENTER when done." _DISPLAY DO WHILE _MOUSEINPUT: LOOP IF _MOUSEBUTTON(1) THEN pos = GetBoardPos(_MOUSEX, _MOOUSEY) IF pos > 0 THEN x = pos MOD 100 y = pos \ 100 IF Board(x, y) > 0 THEN Board(x, y) = 0 ELSE ' Optional: restore? Or only remove. END IF SLEEP 0.2 END IF END IF k$ = INKEY$ LOOP UNTIL k$ = CHR$(13) OR k$ = CHR$(27) LOCATE 6, 2: PRINT SPACE$(80) END SUB ' Save game to SGF file SUB SaveSGF filename$ = "game.sgf" OPEN filename$ FOR OUTPUT AS #1 PRINT #1, "(;FF[4]GM[1]SZ["; BOARD_SIZE; "]AP[QBG0];B[pd])" ' Simplified header FOR i = 1 TO HistoryCount x = MoveHistory(i).x y = MoveHistory(i).y col$ = IIF((i MOD 2) = 1, "B", "W") ' Convert to SGF coords: a-t (1-19), lowercase sx$ = MID$("abcdefghijklmnopqrs", x, 1) sy$ = MID$("abcdefghijklmnopqrs", y, 1) PRINT #1, ";" + col$ + "[" + sx$ + sy$ + "]" NEXT i PRINT #1, ")" CLOSE #1 LOCATE 7, 2: PRINT "Saved to "; filename$ SLEEP 2 END SUB ' Load SGF and replay moves SUB LoadAndPlaySGF DIM moves$(1 TO 500) count = 0 filename$ = "game.sgf" ON ERROR GOTO cantopen OPEN filename$ FOR INPUT AS #1 LINE INPUT #1, header$ DO WHILE NOT EOF(1) LINE INPUT #1, ln$ IF INSTR(ln$, ";") THEN moves$(count + 1) = ln$ count = count + 1 END IF LOOP CLOSE #1 ' Replay up to index DIM sgfIndex AS INTEGER sgfIndex = 0 DO InitGame ' Apply moves up to sgfIndex FOR i = 1 TO sgfIndex m$ = moves$(i) IF LEFT$(m$, 2) = ";B" OR LEFT$(m$, 2) = ";W" THEN xchar = MID$(m$, 4, 1): ychar = MID$(m$, 5, 1) FOR c = 1 TO 19 IF MID$("abcdefghijklmnopqrs", c, 1) = LCASE$(xchar) THEN xx = c: EXIT FOR IF MID$("abcdefghijklmnopqrs", c, 1) = LCASE$(ychar) THEN yy = c: EXIT FOR NEXT c Board(xx, yy) = IIF(LEFT$(m$, 2) = ";B", 1, 2) END IF NEXT i DrawBoard LOCATE 25, 1: PRINT "SGF Mode: Use ← → to navigate, PgUp/PgDn for start/end. ESC to exit. "; _DISPLAY DO WHILE _MOUSEINPUT: LOOP k = _KEYHIT SELECT CASE k CASE 18432: IF sgfIndex < count THEN sgfIndex = sgfIndex + 1 ' Right arrow CASE 19200: IF sgfIndex > 0 THEN sgfIndex = sgfIndex - 1 ' Left arrow CASE 18944: sgfIndex = 0 ' Page Up CASE 20480: sgfIndex = count ' Page Down CASE 27: EXIT DO ' ESC END SELECT _LIMIT 10 LOOP EXIT SUB cantopen: LOCATE 25, 1: PRINT "Cannot load game.sgf - File not found or invalid." SLEEP 3 END SUB ' Main menu DO CLS PRINT "Go Game in QB64PE" PRINT "------------------" PRINT "1. New Game" PRINT "2. View Saved SGF (game.sgf)" PRINT "3. Exit" PRINT "Choose (1-3): "; k$ = INPUT$(1) SELECT CASE k$ CASE "1": PlayGame CASE "2": LoadAndPlaySGF CASE "3": END END SELECT LOOP ``` --- ### 🔍 Explanation: - **Graphics**: Uses `_NEWIMAGE`, `LINE`, `CIRCLE`, and color functions for rendering. - **Board Logic**: A 2D array tracks the state (`0`=empty, `1`=black, `2`=white). - **Capture System**: After each move, checks opponent groups for liberties using recursive DFS (`HasLiberty`, `RemoveGroup`). - **Turn Management**: Alternates players; two `PASS`es end the game. - **Post-Game Cleanup**: Allows user to click and remove dead stones before scoring. - **SGF Support**: - Saves moves in standard SGF format (simplified). - Loads and navigates via arrow keys and page keys. - **Input Handling**: Mouse for placement, keyboard for commands (`P`=pass, `S`=save, `C`=cleanup). > ⚠️ Note: Full SGF parsing (with labels, comments, etc.) is simplified here. This supports basic move sequences. --- ### ✅ How to Run 1. Install [QB64PE](https://qb64.org/portal/) (supports modern Windows). 2. Paste this code into the IDE. 3. Run it. 4. Click on intersections to play. 5. Press `P` to pass. 6. After two passes, press `S` to save or `C` to clean up. 7. Choose option 2 to view the saved `.sgf`. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

De-Chang Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值