Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗OpFor is an Arimaa engine that talks the Arimaa Engine Interface (AEI) protocol. See https://github.com/Janzert/AEI for the protocol and for tools to run engines against each other or on a game server.
Build OpFor with LDC, the LLVM based D compiler, and dub, the D package manager and build tool that comes with it (tested with LDC 1.43 on 64-bit Linux, Windows and macOS; Windows also needs the Visual Studio C++ build tools). From this directory:
dub build -b release
builds an optimized bot_opfor (bot_opfor.exe on Windows) here. Add "-c static" on Linux for a statically linked executable. Without "-b release" dub makes a debug build. If ldc2 isn't the D compiler dub finds first, add "--compiler=".
Sources are in source/, the test tools in tools/ and the tests in tests/.
dub test
runs the unit tests with unit-threaded, which dub fetches the first time. They check move generation against counts from pyrimaa, the Python reference implementation of the rules, and run the fuzzers below on a fixed set of random positions. Arguments after "--" go to the test runner: a module or test name to run only those, "-c" for the time each test took, "-h" for the rest.
tests/selfplay.py plays the bot against itself over AEI and checks every move with pyrimaa (pip install aei):
python3 tests/selfplay.py [--moves N] [--depth D] [engine]
Each test tool is a dub configuration, built optimized with assertions on into build/:
dub build -c <tool> -b checked
mobility checks the mobility estimate against real move generation,
on a board file or (with -r) on random positions
parseboard reports moves, goals, captures and the evaluation for a
board file ([steps_left] boardfile [playouts])
trap_fuzzer checks capture detection on random positions until it
finds an error
goal_fuzzer checks goal detection on random positions until it finds
an error
eval_eval looks for random positions where removing a piece moves
the evaluation the opposite way from its material value
handicaptest win rate of random playouts for a handicap, given as the
pieces to remove (for example "Ee"), and a playout count
mcdud random playout search of the moves from a board file
tools/regression_test.py runs mobility and parseboard on every board in a file. Board files use the long format with a first line like "12w" (a move number and the side to move).
tools/bench.py measures a machine's speed: it searches a built-in set of positions to fixed depths (about a minute on a recent laptop) and reports nodes per second. It needs only Python 3 and a bot_opfor binary, so it can be copied to another machine to compare the two:
python3 bench.py [--rounds N] [--jobs N] path/to/bot_opfor
The node total it prints is the same on every machine (with the same OS) for the same OpFor version, which shows the runs did the same work. --help has the rest.
Each push and pull request on GitHub builds the bot and the tools, runs the unit tests and plays a self-play game on Linux, Windows and macOS (.github/workflows/ci.yml).
By default bot_opfor talks AEI over stdin/stdout and uses the multithreaded search. Command line options:
--seq single threaded search (deterministic at a fixed
depth, useful for testing)
--threads multithreaded search (the default)
--server, -s IP connect to a controller over TCP instead of stdio
--port, -p PORT port for --server (default 40015)
--stdio, --socket choose the connection explicitly
--help list the options
Besides the standard AEI time control options, setoption accepts:
depth maximum search depth in steps (4 or more), or 0
(or "infinite") for none; a time control still
applies, so send none for a fixed-depth search
hash transposition table size in MB (default 10)
threads number of search threads for --threads
target_min_time, target_max_time
seconds to aim for, independent of the time control
setup_rabbits ANY, STANDARD, 99OF9 or FRITZ
setup_random_minor 1 to randomize the minor pieces in the setup
log_console true to echo the log to stderr
check_eval log an evaluation breakdown of the current position
Search tuning options (true or false): history, capture_sort, use_killers, prune_unrelated, use_lmr, use_nmh, use_early_beta, and for --seq, root_lmr and opening_book (1 or 0). The eval_* options set evaluation weights.
OpFor was written in D 1 with the Tango library and played in the Arimaa Computer Championships 2008 to 2011 (see the ArimaaCC_* tags). The last D 1 version is tagged d1-final.
The port to D 2 (commit 262e835) gave search results identical to d1-final. Later commits then fixed things the port had kept only to match it:
The port also changed behavior outside normal play:
This software is being provided with a written authorization from Arimaa.com and in compliance with "Section 3 of the Arimaa Public License". Authorization #90819. Any rights granted by the end user license of this software apply only to this software and do not extend to the Arimaa game. The end user is responsible to ensure that any derivate work based on this software complies with the Arimaa Public License and obtain any authorization or license by contacting Arimaa.com. The Arimaa name is a trademark of Arimaa.com. The Arimaa game is patented. The Arimaa game rules, the Arimaa board design and the Arimaa piece design are copyright protected. The Arimaa Public License allows cost free use of the Arimaa game for non-commercial use.