summaryrefslogtreecommitdiff
path: root/bindings/lua/test_selfplay.lua
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2016-07-03 03:07:52 -0500
committerGitHub <noreply@github.com>2016-07-03 03:07:52 -0500
commit50c4a8cd619d0da78a1a4012d2f688dea4c7ec27 (patch)
treea40498693dc3b56005c96c35c7c38aa816782662 /bindings/lua/test_selfplay.lua
parentda2f20720facda706be06b5813ab20057d5b4de9 (diff)
parent147b22ae1225863cac9f07b3906415713afdcf02 (diff)
Merge pull request #35 from gokceneraslan/master
Generate Python, Lua and Go bindings through SWIG
Diffstat (limited to 'bindings/lua/test_selfplay.lua')
-rw-r--r--bindings/lua/test_selfplay.lua90
1 files changed, 90 insertions, 0 deletions
diff --git a/bindings/lua/test_selfplay.lua b/bindings/lua/test_selfplay.lua
new file mode 100644
index 0000000..9209f52
--- /dev/null
+++ b/bindings/lua/test_selfplay.lua
@@ -0,0 +1,90 @@
+require 'quackle'
+
+function startUp(lexicon, alphabet, datadir)
+
+ local lexicon = lexicon or 'twl06'
+ local alphabet = alphabet or 'english'
+ local datadir = datadir or '../../data'
+
+ -- Set up the data manager
+ local dm = quackle.DataManager()
+ dm:setComputerPlayers(quackle.ComputerPlayerCollection.fullCollection())
+ dm:setBackupLexicon(lexicon)
+ dm:setAppDataDirectory(datadir)
+
+ -- Set up the alphabet
+ local abc = quackle.AlphabetParameters.findAlphabetFile(alphabet)
+ local abc2 = quackle.Util.stdStringToQString(abc) --convert to qstring
+ local fa = quackle.FlexibleAlphabetParameters()
+
+ assert(fa:load(abc2))
+ dm:setAlphabetParameters(fa)
+
+ -- Set up the board
+ local board = quackle.BoardParameters()
+ dm:setBoardParameters(board)
+
+ -- Find the lexicon
+ local dawg = quackle.LexiconParameters.findDictionaryFile(lexicon .. '.dawg')
+ local gaddag = quackle.LexiconParameters.findDictionaryFile(lexicon .. '.gaddag')
+ dm:lexiconParameters():loadDawg(dawg)
+ dm:lexiconParameters():loadGaddag(gaddag)
+
+ dm:strategyParameters():initialize(lexicon)
+ return dm
+
+end
+
+
+function getComputerPlayer(dm, name)
+
+ local name = name or 'Speedy Player'
+
+ local player, found = dm:computerPlayers():playerForName(name)
+ assert(found)
+ player = player:computerPlayer()
+
+ return player
+
+end
+
+dm = startUp()
+
+p1 = getComputerPlayer(dm)
+p2 = getComputerPlayer(dm)
+
+-- Create computer players
+player1 = quackle.Player('Compy1', quackle.Player.ComputerPlayerType, 0)
+player1:setComputerPlayer(p1)
+print(player1:name())
+
+player2 = quackle.Player('Compy2', quackle.Player.ComputerPlayerType, 1)
+player2:setComputerPlayer(p2)
+print(player2:name())
+
+dm:seedRandomNumbers(42)
+
+game = quackle.Game()
+players = quackle.PlayerList()
+
+players:push_back(player1)
+players:push_back(player2)
+
+game:setPlayers(players)
+game:associateKnownComputerPlayers()
+game:addPosition()
+
+for i=1, 50 do
+ if game:currentPosition():gameOver() then
+ print "GAME OVER"
+ break
+ end
+
+ player = game:currentPosition():currentPlayer()
+ move = game:haveComputerPlay()
+ --print("Player: " .. player:name())
+ print("Rack : " .. player:rack():toString())
+ print('Move: ' .. move:toString())
+ print('Board: \n' .. game:currentPosition():board():toString())
+
+end