Introduce the concept of plugin interface.
[kaya.git] / lib / games / chess / main.rb
blob77f0e11eeed4d451e17f9d1bc866370973dffedb
1 require 'games/games'
2 require 'games/chess/state'
3 require 'games/chess/move'
4 require 'games/chess/board'
5 require 'games/chess/policy'
6 require 'games/chess/animator'
7 require 'games/chess/validator'
8 require 'games/chess/serializer'
9 require 'games/chess/pgn'
11 module Chess
13 Game.add :chess do
14   Game.new :size => Point.new(8, 8),
15            :policy => Policy.new(Move),
16            :state_component => State,
17            :state => lambda { state_component.new(board.new, move, piece) },
18            :board_component => Board,
19            :board => lambda { board_component.new(size) },
20            :move => Move,
21            :animator => Animator,
22            :validator => Validator,
23            :piece => Piece,
24            :players => [:white, :black],
25            :types => [:pawn, :knight, :bishop, :rook, :queen, :king],
26            :serializer => lambda {|rep| 
27               Serializer.new(rep, validator, move, piece) },
28            :keywords => %w(chess),
29            
30            :game_writer_component => PGN,
31            :game_writer => lambda { 
32               game_writer_component.new(serializer.new(:compact),
33                                         state) },
34            :game_reader => lambda { game_writer.new },
35            :game_extensions => %w(pgn)
36 end
38 Game.add :chess5x5, [:chess] do |chess|
39   chess.extend(:size => Point.new(5, 5))
40 end
42 end