Emulating the black box behavior allows us to build tests that prove your code works, as long, as the emulation remains close to the real thing. The Ruby Warrior runtime has features within it, that I do not know yet since I am still at level 7.
The output from my game emulator looks nice and allows me to great new alternative levels that exercise all the features of my player that I wish to.
GAME START
| ^ >|
| ^ >|
| ^ >|
| ^ >|
| ^ >|
| ^>|
| ^|
GAME OVER: ALIVE
GAME START
| ^ C >|
| ^C >|
| ^ >|
| ^ >|
| ^ >|
| ^ >|
| ^>|
| ^|
GAME OVER: ALIVE
GAME START
| ^ S >|
| ^S >|
| ^S >|
| ^S >|
| ^S >|
| ^S >|
| ^S >|
| ^S >|
| ^S >|
| ^ >|
| ^ >|
| ^ >|
| ^ >|
| ^>|
| ^|
GAME OVER: ALIVE
A simple rspec runner of these game layouts and a way to encode the game boards makes setup easy.
describe "Game" do
let(:player) { Player.new }
it "plays empty board" do
game = Game.new(" >")
game.play(player)
player.should be_alive
end
it "rescues a sad caged pair of eyes" do
game = Game.new(" C >")
game.play(player)
player.should be_alive
end
it "attacks some sludge" do
game = Game.new(" S >")
game.play(player)
player.should be_alive
end
end
The simple Game runner.
class Game
def initialize(pieces)
@pieces = pieces
end
def play(player)
warrior = Warrior.new
warrior.board = Board.new(@pieces)
puts "GAME START"
while (warrior.alive? && warrior.on_board?) do
puts warrior.board.with_player_at(warrior.position)
player.play_turn(warrior)
end
puts "GAME OVER: #{warrior.alive? ? 'ALIVE' : 'DEAD' }"
warrior.alive?
end
end
No comments:
Post a Comment