diff options
author | Martin DeMello <mdemello@google.com> | 2019-02-07 00:52:02 -0800 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2019-02-07 16:20:28 -0600 |
commit | 9e93419a236f34cfb016461a7e37a1280177e05a (patch) | |
tree | 2196679c562381de0ae9ccc44835733d01c0dbf9 /bindings/ruby | |
parent | d387d2e719f736d28db797d47ffc4fca29a202fa (diff) |
Add ruby bindings
Diffstat (limited to 'bindings/ruby')
-rw-r--r-- | bindings/ruby/test1_position.rb | 42 | ||||
-rw-r--r-- | bindings/ruby/test2_selfplay.rb | 47 | ||||
-rw-r--r-- | bindings/ruby/test_base.rb | 35 |
3 files changed, 124 insertions, 0 deletions
diff --git a/bindings/ruby/test1_position.rb b/bindings/ruby/test1_position.rb new file mode 100644 index 0000000..b76ca56 --- /dev/null +++ b/bindings/ruby/test1_position.rb @@ -0,0 +1,42 @@ +require_relative 'quackle' +require_relative 'test_base' + +dm = initialize_dm + +# Create a computer player +player1 = get_computer_player(dm) +puts player1.name + +# Create the Game file (.gcg) reader +gamereader = Quackle::GCGIO.new +gamePath = Quackle::Util.stdStringToQString('../../test/positions/short_game_with_bad_moves.gcg') +game = gamereader.read(gamePath, Quackle::Logania::MaintainBoardPreparation) + +# Get the current position +position = game.currentPosition + +player1.setPosition(position) + +racks = Quackle::ProbableRackList.new +unseenbag = position.unseenBag +if unseenbag.size <= dm.parameters.rackSize + 3 + enum = Quackle::Enumerator.new(unseenbag) + enum.enumerate(racks) + racks.each do |rack| + puts rack + end +end + +movesToShow = 10 + +puts "Board state: \n%s" % position.board.toString +puts "Move made: %s" % position.moveMade.toString +puts "Current player: %s" % position.currentPlayer.storeInformationToString +puts "Turn number: %i" % position.turnNumber + +movelist = player1.moves(10) + +# Show 10 moves suggested by computer player +movelist.each do |move| + puts move.toString +end diff --git a/bindings/ruby/test2_selfplay.rb b/bindings/ruby/test2_selfplay.rb new file mode 100644 index 0000000..3cc101b --- /dev/null +++ b/bindings/ruby/test2_selfplay.rb @@ -0,0 +1,47 @@ +require_relative 'quackle' +require_relative 'test_base' + + +dm = initialize_dm + +p1 = get_computer_player(dm) +p2 = get_computer_player(dm) + +# Create computer players +player1 = Quackle::Player.new('Compy1', Quackle::Player::ComputerPlayerType, 0) +player1.setComputerPlayer(p1) +puts player1.name + +player2 = Quackle::Player.new('Compy2', Quackle::Player::ComputerPlayerType, 1) +player2.setComputerPlayer(p2) +puts player2.name + +dm.seedRandomNumbers(42) + +game = Quackle::Game.new +players = Quackle::PlayerList.new + +players << player1 +players << player2 + +game.setPlayers(players) +game.associateKnownComputerPlayers +game.addPosition + + +50.times do + if game.currentPosition.gameOver + puts 'GAME OVER' + break + end + + player = game.currentPosition.currentPlayer + puts 'Player: ' + player.name + puts 'Rack : ' + player.rack.toString + + move = game.haveComputerPlay + puts 'Move: ' + move.toString + puts "Board: \n" + game.currentPosition.board.toString + + sleep(1) +end diff --git a/bindings/ruby/test_base.rb b/bindings/ruby/test_base.rb new file mode 100644 index 0000000..6fa7f05 --- /dev/null +++ b/bindings/ruby/test_base.rb @@ -0,0 +1,35 @@ +def initialize_dm(lexicon: 'twl06', alphabet: 'english', datadir: '../../data') + # Set up the data manager + dm = Quackle::DataManager.new + dm.setComputerPlayers(Quackle::ComputerPlayerCollection.fullCollection) + dm.setBackupLexicon(lexicon) + dm.setAppDataDirectory(datadir) + + # Set up the alphabet + abc = Quackle::AlphabetParameters.findAlphabetFile(alphabet) + abc2 = Quackle::Util.stdStringToQString(abc) #convert to qstring + fa = Quackle::FlexibleAlphabetParameters.new + + fail unless fa.load(abc2) + dm.setAlphabetParameters(fa) + + # Set up the board + board = Quackle::BoardParameters.new + dm.setBoardParameters(board) + + # Find the lexicon + dawg = Quackle::LexiconParameters.findDictionaryFile(lexicon + '.dawg') + gaddag = Quackle::LexiconParameters.findDictionaryFile(lexicon + '.gaddag') + dm.lexiconParameters.loadDawg(dawg) + dm.lexiconParameters.loadGaddag(gaddag) + + dm.strategyParameters.init(lexicon) + return dm +end + +def get_computer_player(dm, name: 'Speedy Player') + player, found = dm.computerPlayers.playerForName(name) + fail unless found + player.computerPlayer +end + |