Skip to content

Instantly share code, notes, and snippets.

@frp
Created March 17, 2014 00:50
Show Gist options
  • Save frp/9592102 to your computer and use it in GitHub Desktop.
Save frp/9592102 to your computer and use it in GitHub Desktop.
Bot 2048
require 'selenium-webdriver'
$driver = Selenium::WebDriver.for :firefox
$driver.get("http://gabrielecirulli.github.io/2048/")
def sendkey key
$driver.action.send_keys(key).perform
end
def finished
result = $driver.find_elements(:class, "game-over")
result.count > 0
end
def get_tiles
(1..4).map { |y|
(1..4).map { |x|
tiles = $driver.find_elements(:class, "tile-position-#{x}-#{y}")
if tiles.count > 0
tile = tiles[0]
tile_sz = 2
while tile_sz <= 2048
if tile.attribute("class").index("tile-#{tile_sz}")
break
end
tile_sz *= 2
end
tile_sz
else
0
end
}
}
end
def get_score
result = $driver.find_elements(:class, "score-container")
result[0].text.to_i
end
$file = File.new(ARGV[0] || "results.txt", "a")
$file.write(Time.now)
$file.write(" Initialized\n")
def save_result array, score
$file.write(Time.now)
$file.write(" ")
$file.write(array.to_s)
$file.write(" with score " + score.to_s)
$file.write("\n")
end
require './processing'
keys = [:up, :down, :left, :right]
stop_value = 10
counter = 0
while true
sendkey keys[rand(4)]
sleep 0.05
if counter == stop_value
if finished
puts "Game finished"
save_result get_tiles, get_score
sendkey ' '
end
counter = 0
end
counter += 1
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment