Merge games and plugins.
[kaya.git] / lib / plugins / games / chess.rb
blob8e18fc004b2d6dd3bb36608f29c11e71b962bda1
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'
10 require 'plugins/plugin'
12 module Chess
14 class Game
15   include Plugin
16   
17   plugin :name => 'Chess',
18          :id => :chess,
19          :interface => :game,
20          :keywords => %w(chess)
21          
22   attr_reader :size, :policy, :state, :board, :move,
23               :animator, :validator, :piece, :players,
24               :types, :serializer, :game_writer,
25               :game_extensions
26               
27   def initialize
28     @size = Point.new(8, 8)
29     @policy = Policy.new(Move)
30     @state_component = State
31     @state = Factory.new(State) { State.new(board.new, move, piece) }
32     @board = Factory.new(Board) { Board.new(size) }
33     @move = Move
34     @animator = Animator
35     @validator = Validator
36     @piece = Piece
37     @players = [:white, :black]
38     @types = [:pawn, :knight,:bishop, :rook, :queen, :king]
39     @serializer = Factory.new(Serializer) {|rep| 
40       Serializer.new(rep, validator, move, piece) }
41     @keywords = %w(chess)
43     @game_writer = PGN.new(serializer.new(:compact), state)
44     @game_extensions = %w(pgn)
45   end
46   
47   def game_reader
48     @game_writer
49   end
50 end
52 end
54 module Chess5x5
56 class Game < Chess::Game
57   plugin :name => 'Chess 5x5',
58          :id => :chess5x5,
59          :interface => :game,
60          :keywords => %w(chess)
61   
62   def initialize
63     super
64     @size = Point.new(5, 5)
65     @game_extensions = []
66   end
67   
68 end
70 end