summaryrefslogtreecommitdiff
path: root/bindings/lua/test_selfplay.lua
blob: 4be6c289128739dbe57f770eef03de3607de68c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require 'quackle'

function startUp(lexicon, alphabet, datadir)

    local lexicon = lexicon and lexicon or 'twl06'
    local alphabet = alphabet and alphabet or 'english'
    local datadir = datadir and 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 and 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