1个不稳定版本
0.1.0 | 2020年9月1日 |
---|
在游戏开发中排名第747位
375KB
3K SLoC
kiwaconnectfour
注意:目前,思考部分尚未工作。我不知道是否可以完成。
注:现在,思考部分还没有工作。不知道是否能完成。
编写计算机将棋程序是困难的。
计算机将棋的编程很困难。
我如何提高我的编程技能?
要提升我的编程技能,我该怎么做?
从简单游戏逐步提升的策略并不合适。
因为解决问题的正确程序完全取决于游戏,除非你有通用人工智能。
原因是解决问题的正确程序完全取决于游戏,除非你有通用人工智能。
因为解决问题的正确程序完全取决于游戏,除非你有通用人工智能。
我建议你直接编写计算机将棋软件,而不是绕过它。
不绕过它,直接编写计算机将棋软件。
当然,最好是从修改最强的库开始。这有助于找出缺少的东西。
当然,最好是从修改最强的库开始。这有助于了解缺少什么。
然而,如果你想克服与计算机将棋无关的基本编程技能的弱点,那么从简单的程序开始是有意义的。
然而,如果想克服与计算机将棋无关的基本编程技能的弱点,那么从简单的程序开始是有意义的。
例如,四目并排游戏非常庞大,无法在家庭电脑上完全探索,但它们容易运行,而且技能检查也容易。
例如,四目并排游戏非常庞大,无法在家庭电脑上完全探索,但它们容易运行,而且技能检查也容易。
将棋、围棋程序“kiwa”已被转换为四目并排。
将棋和围棋程序“kiwa”已经被转换为四目并排。
它使用未指定的UXI协议实现,该协议模仿UCI/USI协议。X没有意义。 UCI/USI协议的模拟未指定UXI协议实现。X没有意义。
请查看仓库。
请查看仓库。
没有图形用户界面(GUI)。只有思考引擎。
没有GUI(图形用户界面)。只有思考引擎。
运行
注意:目前不是库。它将在以后的更新中转换为库。
注意:目前不是库。它将在以后的更新中转换为库。
终端
cargo run
在游戏中
casual_logger | Remove 0 log file(s).
| If you don't want this message, set `Log::set_opt(Opt::Release);`.
Hello, world!
こんにちわ、世界!!
Nought=|O|
... Test run. Omitted ...
Kifuwarabe's connect-four
きふわらべのコネクト・フォー
Command:
コマンド:
`do d` - Mark the d file.
手番のプレイヤーが、 7 列目に印を付けます。
`go` - The computer shows the next move.
コンピューターが次の1手を示します。
`info-off` - no info output.
info出力なし。
`info-on` - There is info output.(Default)
info出力あり(既定)。
`learn` - Learning.
学習。
`pos` - Position display.
局面表示。
`position xfen 7/7/7/7/7/7 O moves d c`
- Starting position and moves.
初期局面と棋譜を入力。
`uh` - Step of learning.
学習のステップ。
`undo` - 1 back.
1手戻します。
`uxi` - Returns 'uxiok connect-four {protocol-version}'. It is a version of the protocol, not software.
'uxiok connect-four {protocol-version}' を返します。ソフトではなくプロトコルのバージョンです。
`xfen` - The current xfen string display.
現局面のxfen文字列表示。
Let's input from `pos`.
`pos` から入力してみましょう。
在游戏中输入
将自动生成一个约262KB的文件,所以请注意磁盘空间。
将自动生成约262KB的文件,所以请注意磁盘空间。
哎呀,还将输出一个大的日志文件,所以请确保你有约100MB以上的空余空间。它会越来越大。如果觉得危险,请手动删除。
哎呀,还将输出一个大的日志文件,所以请确保你有约100MB以上的空余空间。它会越来越大。如果觉得危险,请手动删除。
learn
在游戏中输出
... Omitted ...
[Learn]
| Feature number | Current evaluation | Choice way | Give | Take | Refund
File | Vert Hori Baro Sini | Vert Hori Baro Sini Total | File Result | Val Vert Hori Baro Sini Total | Val Rest Vert Hori Baro Sini Total | Val Vert Hori Baro Sini Total
---- + ---- ---- ---- ---- + ---- ---- ---- ---- ----- + ------ ------ + ---- ---- ---- ---- ---- ----- + ---- ---- ---- ---- ---- ---- ----- + ---- ---- ---- ---- ---- -----
a | 1 8 16 . | 6 57 60 . 123 | a Win | 4 4 49 59 . 112 | 7 . 7 57 61 . 125 | . 7 57 61 . 125
b | 2 8 17 . | . 57 2 . 59 | b Win | 4 . 49 . . 49 | 7 . 3 57 2 . 62 | . 3 57 2 . 62
c | 3 8 18 . | 3 57 59 . 119 | resign Lose | 4 1 49 58 . 108 | . . 1 57 58 . 116 | . 1 57 58 . 116
d | 4 8 19 20 | 69 57 34 5 165 | d Win | 4 68 49 33 4 154 | 7 . 70 57 35 5 167 | . 70 57 35 5 167
e | 5 8 . 21 | 3 57 . 12 72 | e Win | 4 1 49 . 11 61 | 7 . 4 57 . 13 74 | . 4 57 . 13 74
f | 6 8 . 22 | 6 57 . 41 104 | resign Lose | 4 4 49 . 40 93 | . . 4 57 . 40 101 | . 4 57 . 40 101
g | 7 8 . 23 | 3 57 . 3 63 | resign Lose | 4 1 49 . 2 52 | . . 1 57 . 2 60 | . 1 57 . 2 60
... Omitted ...
注意:我想有一个强大的思考部分,但我认为这没有帮助。
评估点通过加减整数来分配,而不使用微分或实数。
注意: 我們希望建立一個強大的思考部分,但我認為這並沒有什麼用。
評估值通過加法和減法進行分配,而不使用微分或實數。
在游戏中输入
pos
在游戏中输出
[Next 1 piece(s) | Go O]
+---+---+---+---+---+---+---+ Please select a file. Example `do d`
6 | | | | | | | | 列を選んでください。例 `do d`
+---+---+---+---+---+---+---+
5 | | | | | | | | a b c d e f g
+---+---+---+---+---+---+---+
4 | | | | | | | |
+---+---+---+---+---+---+---+
3 | | | | | | | |
+---+---+---+---+---+---+---+
2 | | | | | | | |
+---+---+---+---+---+---+---+
1 | | | | | | | |
+---+---+---+---+---+---+---+
a b c d e f g
在游戏中输入
do d
pos
在游戏中输出
[Next 2 piece(s) | Go X]
+---+---+---+---+---+---+---+ Please select a file. Example `do d`
6 | | | | | | | | 列を選んでください。例 `do d`
+---+---+---+---+---+---+---+
5 | | | | | | | | a b c d e f g
+---+---+---+---+---+---+---+
4 | | | | | | | |
+---+---+---+---+---+---+---+
3 | | | | | | | |
+---+---+---+---+---+---+---+
2 | | | | | | | |
+---+---+---+---+---+---+---+
1 | | | | O | | | |
+---+---+---+---+---+---+---+
a b c d e f g
在游戏中输入
go
在游戏中输出
info json { "nps": 1, "nodes": 1, "push":"f" , "O":"Search.", "channel1":Win, "choose":"f", "total":475, "a":28, "b":70, "c":69, "d":147, "e":64, "f":59, "g":38, "pv":["d","f"] }
info json { "nps": 2, "nodes": 2, "push":"d" , "X":"Search.", "channel1":Win, "choose":"d", "total":470, "a":93, "b":30, "c":84, "d":139, "e":42, "f":54, "g":28, "pv":["d","f","d"] }
info json { "nps": 3, "nodes": 3, "push":"d" , "O":"Search.", "channel1":Win, "choose":"d", "total":463, "a":29, "b":71, "c":54, "d":147, "e":62, "f":61, "g":39, "pv":["d","f","d","d"] }
i
... omitted ...
info string pred_result=Win nps=23
bestmove f
在游戏中输入
do f
pos
在游戏中输出
[Next 3 piece(s) | Go O]
+---+---+---+---+---+---+---+ Please select a file. Example `do d`
6 | | | | | | | | 列を選んでください。例 `do d`
+---+---+---+---+---+---+---+
5 | | | | | | | | a b c d e f g
+---+---+---+---+---+---+---+
4 | | | | | | | |
+---+---+---+---+---+---+---+
3 | | | | | | | |
+---+---+---+---+---+---+---+
2 | | | | | | | |
+---+---+---+---+---+---+---+
1 | | | | O | | X | |
+---+---+---+---+---+---+---+
a b c d e f g
在游戏中输入
xfen
在游戏中输出
xfen 7/7/7/7/7/7 O moves d f
在游戏中输入
position xfen 7/7/7/7/XOXOXOX/OXOXOXO O moves d f
pos
在游戏中输出
[Next 17 piece(s) | Go O]
+---+---+---+---+---+---+---+ Please select a file. Example `do d`
6 | | | | | | | | 列を選んでください。例 `do d`
+---+---+---+---+---+---+---+
5 | | | | | | | | a b c d e f g
+---+---+---+---+---+---+---+
4 | | | | | | | |
+---+---+---+---+---+---+---+
3 | | | | O | | X | |
+---+---+---+---+---+---+---+
2 | X | O | X | O | X | O | X |
+---+---+---+---+---+---+---+
1 | O | X | O | X | O | X | O |
+---+---+---+---+---+---+---+
a b c d e f g
在游戏中输入
quit
評估設計
無效。 你應該建立思考部分。
無效。 你應該建立思考部分。
基本功能
對交錯的方格進行編號。
對交叉的方格進行編號。
基本功能
特徵方形
方格值
特徵大小
如何編程四子棋遊戲?
在開發過程中,你可能需要複製計算機的行為。
比較行為很困難。相反,取得日誌並比較日誌很有用。
建立日誌很困難,所以使用庫。
- 步驟 1. 使用日誌庫。
- 在 'Cargo.toml' 和 'main.rs' 中使用 casual_logger 库。
- 創建 'log.rs' 文件。
- 擴展日誌。
在測試的同時進行開發。
- 步驟 2. 創建
test.rs
文件。- 隨著步驟的進行逐漸添加。
首先,你需要創建你的動機。
從外觀開始很重要。
- 步驟 3. 創建 'main.rs' 文件和 'look_and_model.rs' 文件。
- 引擎 - 标題屏幕。
- 棋子 - "O","X"。
- 遊戲結果 - 胜/平/負。
- 位置 - 它是棋盤。
- 搜索 - 記算機玩家搜索。
- 搜索信息 - 計算機玩家搜索信息。
如果你想立即玩,你擁有遊戲製作人的天賦。
能夠控制你的位置意味著能夠遊戲。
- 步驟 4. 創建 'position.rs' 文件。
- do_move
- undo_move
- opponent
讓我們將命令輸入計算機。創建一個命令行解析器。
- 步驟 5. 創建 'command_line_seek.rs' 文件。
- 開始於。
- 到下一個。
- 休息。
每天尋找10分鐘的人,一年內就尋找了一個禮拜。
在創建遊戲本身之前,我們首先創建重放功能。讓我們為一個禮拜獲取它。
- 步驟 6. 創建 'uxi_protocol.rs' 文件。
- 做。(在 'From XFEN' 之前) 排除合法的移動和勝/負決定。
- 轉換為 XFEN。
- 從 XFEN。
- 撤銷。
讓我們建立主要命令。
- 步驟 7. 創建 'engine.rs' 文件。命令行。
- position。
- pos。
- do。
- undo。
- uxi。
- xfen。
- 步驟 8. 'src/main.rs' 或 'examples/main.rs'。
在創建計算機玩家之前,讓我們判斷結果並進行測試。
- 步驟 9. 'win_lose_judgment.rs'
- 勝。
- 平局 - 不勝也不敗,不能遊戲。
- 敗。 - 不勝就是敗。
在創建計算機玩家之前,讓我們創建一個測量性能的機制。
- 步驟 10. 'performance_measurement.rs'
- 秒。 - 腳錶。
- 每秒節點數。
讓我們建立計算機玩家。
- 步驟 11. 'computer_player/search.rs'
- 搜索。
- 'main.py'
- 創建 "go" 命令。
讓我們學習計算機思考。
- 步驟 12. 'computer_player/evaluation.rs'
- 評估 - 無。
- ways_weight。
- 保存。
- 加載。
- 獲取值。
- 設置值。
- 打印一些特徵。
- 評估 - 無。
- 步驟 13.
computer_player/learn.rs
最後。
- 刪除所有 'TODO' 任務。例如: '// TODO Write a code here.'
依賴項
~4–5MB
~83K SLoC