Add game specific actions for shogi.
[kaya.git] / lib / plugins / games / chess.rb
blob65ebe0f175af475cac4618eeec5011e8b1025d75
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     @state_component = State
30     @state = Factory.new(State) { State.new(board.new, move, piece) }
31     @board = Factory.new(Board) { Board.new(size) }
32     @move = Move
33     @animator = Animator
34     @validator = Validator
35     @piece = Piece
36     @policy = Factory.new { Policy.new(Move) }
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