File Coverage

blib/lib/Chess/PGN/Moves.pm
Criterion Covered Total %
statement 12 12 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 16 16 100.0


line stmt bran cond sub pod time code
1             package Chess::PGN::Moves;
2            
3 1     1   15200 use 5.006;
  1         3  
  1         38  
4 1     1   5 use strict;
  1         1  
  1         30  
5 1     1   5 use warnings;
  1         6  
  1         104  
6            
7             require Exporter;
8            
9             our @ISA = qw(Exporter);
10             our @EXPORT = qw(
11             %King_Moves
12             %Queen_Moves
13             %Rook_Moves
14             %Bishop_Moves
15             %Knight_Moves
16             %pawnWhite
17             %pawnBlack
18             %from_algebraic
19             %move_table
20             %engWhite
21             %engBlack
22             %Whiteeng
23             %Blackeng
24             );
25             our $VERSION = '0.05';
26            
27 1         4237 use vars qw(
28             %King_Moves
29             %Queen_Moves
30             %Rook_Moves
31             %Bishop_Moves
32             %Knight_Moves
33             %pawnWhite
34             %pawnBlack
35             %from_algebraic
36             %move_table
37             %engWhite
38             %engBlack
39             %Whiteeng
40             %Blackeng
41 1     1   4 );
  1         1  
42            
43             %engWhite = qw (
44             a1 QR1 a2 QR2 a3 QR3 a4 QR4 a5 QR5 a6 QR6 a7 QR7 a8 QR8
45             b1 QN1 b2 QN2 b3 QN3 b4 QN4 b5 QN5 b6 QN6 b7 QN7 b8 QN8
46             c1 QB1 c2 QB2 c3 QB3 c4 QB4 c5 QB5 c6 QB6 c7 QB7 c8 QB8
47             d1 Q1 d2 Q2 d3 Q3 d4 Q4 d5 Q5 d6 Q6 d7 Q7 d8 Q8
48             e1 K1 e2 K2 e3 K3 e4 K4 e5 K5 e6 K6 e7 K7 e8 K8
49             f1 KB1 f2 KB2 f3 KB3 f4 KB4 f5 KB5 f6 KB6 f7 KB7 f8 KB8
50             g1 KN1 g2 KN2 g3 KN3 g4 KN4 g5 KN5 g6 KN6 g7 KN7 g8 KN8
51             h1 KR1 h2 KR2 h3 KR3 h4 KR4 h5 KR5 h6 KR6 h7 KR7 h8 KR8
52             );
53            
54             %engBlack = qw (
55             a1 QR8 a2 QR7 a3 QR6 a4 QR5 a5 QR4 a6 QR3 a7 QR2 a8 QR1
56             b1 QN8 b2 QN7 b3 QN6 b4 QN5 b5 QN4 b6 QN3 b7 QN2 b8 QN1
57             c1 QB8 c2 QB7 c3 QB6 c4 QB5 c5 QB4 c6 QB3 c7 QB2 c8 QB1
58             d1 Q8 d2 Q7 d3 Q6 d4 Q5 d5 Q4 d6 Q3 d7 Q2 d8 Q1
59             e1 K8 e2 K7 e3 K6 e4 K5 e5 K4 e6 K3 e7 K2 e8 K1
60             f1 KB8 f2 KB7 f3 KB6 f4 KB5 f5 KB4 f6 KB3 f7 KB2 f8 KB1
61             g1 KN8 g2 KN7 g3 KN6 g4 KN5 g5 KN4 g6 KN3 g7 KN2 g8 KN1
62             h1 KR8 h2 KR7 h3 KR6 h4 KR5 h5 KR4 h6 KR3 h7 KR2 h8 KR1
63             );
64            
65             %Whiteeng = qw (
66             QR8 a8 QR7 a7 QR6 a6 QR5 a5 QR4 a4 QR3 a3 QR2 a2 QR1 a1
67             QN8 b8 QN7 b7 QN6 b6 QN5 b5 QN4 b4 QN3 b3 QN2 b2 QN1 b1
68             QB8 c8 QB7 c7 QB6 c6 QB5 c5 QB4 c4 QB3 c3 QB2 c2 QB1 c1
69             Q8 d8 Q7 d7 Q6 d6 Q5 d5 Q4 d4 Q3 d3 Q2 d2 Q1 d1
70             K8 e8 K7 e7 K6 e6 K5 e5 K4 e4 K3 e3 K2 e2 K1 e1
71             KB8 f8 KB7 f7 KB6 f6 KB5 f5 KB4 f4 KB3 f3 KB2 f2 KB1 f1
72             KN8 g8 KN7 g7 KN6 g6 KN5 g5 KN4 g4 KN3 g3 KN2 g2 KN1 g1
73             KR8 h8 KR7 h7 KR6 h6 KR5 h5 KR4 h4 KR3 h3 KR2 h2 KR1 h1
74             );
75            
76             %Blackeng = qw (
77             QR1 a8 QR2 a7 QR3 a6 QR4 a5 QR5 a4 QR6 a3 QR7 a2 QR8 a1
78             QN1 b8 QN2 b7 QN3 b6 QN4 b5 QN5 b4 QN6 b3 QN7 b2 QN8 b1
79             QB1 c8 QB2 c7 QB3 c6 QB4 c5 QB5 c4 QB6 c3 QB7 c2 QB8 c1
80             Q1 d8 Q2 d7 Q3 d6 Q4 d5 Q5 d4 Q6 d3 Q7 d2 Q8 d1
81             K1 e8 K2 e7 K3 e6 K4 e5 K5 e4 K6 e3 K7 e2 K8 e1
82             KB1 f8 KB2 f7 KB3 f6 KB4 f5 KB5 f4 KB6 f3 KB7 f2 KB8 f1
83             KN1 g8 KN2 g7 KN3 g6 KN4 g5 KN5 g4 KN6 g3 KN7 g2 KN8 g1
84             KR1 h8 KR2 h7 KR3 h6 KR4 h5 KR5 h4 KR6 h3 KR7 h2 KR8 h1
85             );
86            
87             %King_Moves = (
88             a1 => [qw(a2 b2 b1)],
89             b1 => [qw(a2 b2 c2 a1 c1)],
90             c1 => [qw(b2 c2 d2 b1 d1)],
91             d1 => [qw(c2 d2 e2 c1 e1)],
92             e1 => [qw(d2 e2 f2 d1 f1)],
93             f1 => [qw(e2 f2 g2 e1 g1)],
94             g1 => [qw(f2 g2 h2 f1 h1)],
95             h1 => [qw(g2 h2 g1)],
96             a2 => [qw(a3 b3 b2 a1 b1)],
97             b2 => [qw(a3 b3 c3 a2 c2 a1 b1 c1)],
98             c2 => [qw(b3 c3 d3 b2 d2 b1 c1 d1)],
99             d2 => [qw(c3 d3 e3 c2 e2 c1 d1 e1)],
100             e2 => [qw(d3 e3 f3 d2 f2 d1 e1 f1)],
101             f2 => [qw(e3 f3 g3 e2 g2 e1 f1 g1)],
102             g2 => [qw(f3 g3 h3 f2 h2 f1 g1 h1)],
103             h2 => [qw(g3 h3 g2 g1 h1)],
104             a3 => [qw(a4 b4 b3 a2 b2)],
105             b3 => [qw(a4 b4 c4 a3 c3 a2 b2 c2)],
106             c3 => [qw(b4 c4 d4 b3 d3 b2 c2 d2)],
107             d3 => [qw(c4 d4 e4 c3 e3 c2 d2 e2)],
108             e3 => [qw(d4 e4 f4 d3 f3 d2 e2 f2)],
109             f3 => [qw(e4 f4 g4 e3 g3 e2 f2 g2)],
110             g3 => [qw(f4 g4 h4 f3 h3 f2 g2 h2)],
111             h3 => [qw(g4 h4 g3 g2 h2)],
112             a4 => [qw(a5 b5 b4 a3 b3)],
113             b4 => [qw(a5 b5 c5 a4 c4 a3 b3 c3)],
114             c4 => [qw(b5 c5 d5 b4 d4 b3 c3 d3)],
115             d4 => [qw(c5 d5 e5 c4 e4 c3 d3 e3)],
116             e4 => [qw(d5 e5 f5 d4 f4 d3 e3 f3)],
117             f4 => [qw(e5 f5 g5 e4 g4 e3 f3 g3)],
118             g4 => [qw(f5 g5 h5 f4 h4 f3 g3 h3)],
119             h4 => [qw(g5 h5 g4 g3 h3)],
120             a5 => [qw(a6 b6 b5 a4 b4)],
121             b5 => [qw(a6 b6 c6 a5 c5 a4 b4 c4)],
122             c5 => [qw(b6 c6 d6 b5 d5 b4 c4 d4)],
123             d5 => [qw(c6 d6 e6 c5 e5 c4 d4 e4)],
124             e5 => [qw(d6 e6 f6 d5 f5 d4 e4 f4)],
125             f5 => [qw(e6 f6 g6 e5 g5 e4 f4 g4)],
126             g5 => [qw(f6 g6 h6 f5 h5 f4 g4 h4)],
127             h5 => [qw(g6 h6 g5 g4 h4)],
128             a6 => [qw(a7 b7 b6 a5 b5)],
129             b6 => [qw(a7 b7 c7 a6 c6 a5 b5 c5)],
130             c6 => [qw(b7 c7 d7 b6 d6 b5 c5 d5)],
131             d6 => [qw(c7 d7 e7 c6 e6 c5 d5 e5)],
132             e6 => [qw(d7 e7 f7 d6 f6 d5 e5 f5)],
133             f6 => [qw(e7 f7 g7 e6 g6 e5 f5 g5)],
134             g6 => [qw(f7 g7 h7 f6 h6 f5 g5 h5)],
135             h6 => [qw(g7 h7 g6 g5 h5)],
136             a7 => [qw(a8 b8 b7 a6 b6)],
137             b7 => [qw(a8 b8 c8 a7 c7 a6 b6 c6)],
138             c7 => [qw(b8 c8 d8 b7 d7 b6 c6 d6)],
139             d7 => [qw(c8 d8 e8 c7 e7 c6 d6 e6)],
140             e7 => [qw(d8 e8 f8 d7 f7 d6 e6 f6)],
141             f7 => [qw(e8 f8 g8 e7 g7 e6 f6 g6)],
142             g7 => [qw(f8 g8 h8 f7 h7 f6 g6 h6)],
143             h7 => [qw(g8 h8 g7 g6 h6)],
144             a8 => [qw(b8 a7 b7)],
145             b8 => [qw(a8 c8 a7 b7 c7)],
146             c8 => [qw(b8 d8 b7 c7 d7)],
147             d8 => [qw(c8 e8 c7 d7 e7)],
148             e8 => [qw(d8 f8 d7 e7 f7)],
149             f8 => [qw(e8 g8 e7 f7 g7)],
150             g8 => [qw(f8 h8 f7 g7 h7)],
151             h8 => [qw(g8 g7 h7)],
152             );
153            
154             %Queen_Moves = (
155             a1 => [qw(b1 c1 d1 e1 f1 g1 h1 a2 a3 a4 a5 a6 a7 a8 b2 c3 d4 e5 f6 g7 h8)],
156             b1 => [qw(a1 c1 d1 e1 f1 g1 h1 b2 b3 b4 b5 b6 b7 b8 c2 d3 e4 f5 g6 h7 a2)],
157             c1 => [qw(a1 b1 d1 e1 f1 g1 h1 c2 c3 c4 c5 c6 c7 c8 d2 e3 f4 g5 h6 b2 a3)],
158             d1 => [qw(a1 b1 c1 e1 f1 g1 h1 d2 d3 d4 d5 d6 d7 d8 e2 f3 g4 h5 c2 b3 a4)],
159             e1 => [qw(a1 b1 c1 d1 f1 g1 h1 e2 e3 e4 e5 e6 e7 e8 f2 g3 h4 d2 c3 b4 a5)],
160             f1 => [qw(a1 b1 c1 d1 e1 g1 h1 f2 f3 f4 f5 f6 f7 f8 g2 h3 e2 d3 c4 b5 a6)],
161             g1 => [qw(a1 b1 c1 d1 e1 f1 h1 g2 g3 g4 g5 g6 g7 g8 h2 f2 e3 d4 c5 b6 a7)],
162             h1 => [qw(a1 b1 c1 d1 e1 f1 g1 h2 h3 h4 h5 h6 h7 h8 g2 f3 e4 d5 c6 b7 a8)],
163             a2 => [qw(b2 c2 d2 e2 f2 g2 h2 a1 a3 a4 a5 a6 a7 a8 b3 c4 d5 e6 f7 g8 b1)],
164             b2 => [qw(a2 c2 d2 e2 f2 g2 h2 b1 b3 b4 b5 b6 b7 b8 a1 c3 d4 e5 f6 g7 h8 c1 a3)],
165             c2 => [qw(a2 b2 d2 e2 f2 g2 h2 c1 c3 c4 c5 c6 c7 c8 b1 d3 e4 f5 g6 h7 d1 b3 a4)],
166             d2 => [qw(a2 b2 c2 e2 f2 g2 h2 d1 d3 d4 d5 d6 d7 d8 c1 e3 f4 g5 h6 e1 c3 b4 a5)],
167             e2 => [qw(a2 b2 c2 d2 f2 g2 h2 e1 e3 e4 e5 e6 e7 e8 d1 f3 g4 h5 f1 d3 c4 b5 a6)],
168             f2 => [qw(a2 b2 c2 d2 e2 g2 h2 f1 f3 f4 f5 f6 f7 f8 e1 g3 h4 g1 e3 d4 c5 b6 a7)],
169             g2 => [qw(a2 b2 c2 d2 e2 f2 h2 g1 g3 g4 g5 g6 g7 g8 f1 h3 h1 f3 e4 d5 c6 b7 a8)],
170             h2 => [qw(a2 b2 c2 d2 e2 f2 g2 h1 h3 h4 h5 h6 h7 h8 g1 g3 f4 e5 d6 c7 b8)],
171             a3 => [qw(b3 c3 d3 e3 f3 g3 h3 a1 a2 a4 a5 a6 a7 a8 b4 c5 d6 e7 f8 c1 b2)],
172             b3 => [qw(a3 c3 d3 e3 f3 g3 h3 b1 b2 b4 b5 b6 b7 b8 a2 c4 d5 e6 f7 g8 d1 c2 a4)],
173             c3 => [qw(a3 b3 d3 e3 f3 g3 h3 c1 c2 c4 c5 c6 c7 c8 a1 b2 d4 e5 f6 g7 h8 e1 d2 b4 a5)],
174             d3 => [qw(a3 b3 c3 e3 f3 g3 h3 d1 d2 d4 d5 d6 d7 d8 b1 c2 e4 f5 g6 h7 f1 e2 c4 b5 a6)],
175             e3 => [qw(a3 b3 c3 d3 f3 g3 h3 e1 e2 e4 e5 e6 e7 e8 c1 d2 f4 g5 h6 g1 f2 d4 c5 b6 a7)],
176             f3 => [qw(a3 b3 c3 d3 e3 g3 h3 f1 f2 f4 f5 f6 f7 f8 d1 e2 g4 h5 h1 g2 e4 d5 c6 b7 a8)],
177             g3 => [qw(a3 b3 c3 d3 e3 f3 h3 g1 g2 g4 g5 g6 g7 g8 e1 f2 h4 h2 f4 e5 d6 c7 b8)],
178             h3 => [qw(a3 b3 c3 d3 e3 f3 g3 h1 h2 h4 h5 h6 h7 h8 f1 g2 g4 f5 e6 d7 c8)],
179             a4 => [qw(b4 c4 d4 e4 f4 g4 h4 a1 a2 a3 a5 a6 a7 a8 b5 c6 d7 e8 d1 c2 b3)],
180             b4 => [qw(a4 c4 d4 e4 f4 g4 h4 b1 b2 b3 b5 b6 b7 b8 a3 c5 d6 e7 f8 e1 d2 c3 a5)],
181             c4 => [qw(a4 b4 d4 e4 f4 g4 h4 c1 c2 c3 c5 c6 c7 c8 a2 b3 d5 e6 f7 g8 f1 e2 d3 b5 a6)],
182             d4 => [qw(a4 b4 c4 e4 f4 g4 h4 d1 d2 d3 d5 d6 d7 d8 a1 b2 c3 e5 f6 g7 h8 g1 f2 e3 c5 b6 a7)],
183             e4 => [qw(a4 b4 c4 d4 f4 g4 h4 e1 e2 e3 e5 e6 e7 e8 b1 c2 d3 f5 g6 h7 h1 g2 f3 d5 c6 b7 a8)],
184             f4 => [qw(a4 b4 c4 d4 e4 g4 h4 f1 f2 f3 f5 f6 f7 f8 c1 d2 e3 g5 h6 h2 g3 e5 d6 c7 b8)],
185             g4 => [qw(a4 b4 c4 d4 e4 f4 h4 g1 g2 g3 g5 g6 g7 g8 d1 e2 f3 h5 h3 f5 e6 d7 c8)],
186             h4 => [qw(a4 b4 c4 d4 e4 f4 g4 h1 h2 h3 h5 h6 h7 h8 e1 f2 g3 g5 f6 e7 d8)],
187             a5 => [qw(b5 c5 d5 e5 f5 g5 h5 a1 a2 a3 a4 a6 a7 a8 b6 c7 d8 e1 d2 c3 b4)],
188             b5 => [qw(a5 c5 d5 e5 f5 g5 h5 b1 b2 b3 b4 b6 b7 b8 a4 c6 d7 e8 f1 e2 d3 c4 a6)],
189             c5 => [qw(a5 b5 d5 e5 f5 g5 h5 c1 c2 c3 c4 c6 c7 c8 a3 b4 d6 e7 f8 g1 f2 e3 d4 b6 a7)],
190             d5 => [qw(a5 b5 c5 e5 f5 g5 h5 d1 d2 d3 d4 d6 d7 d8 a2 b3 c4 e6 f7 g8 h1 g2 f3 e4 c6 b7 a8)],
191             e5 => [qw(a5 b5 c5 d5 f5 g5 h5 e1 e2 e3 e4 e6 e7 e8 a1 b2 c3 d4 f6 g7 h8 h2 g3 f4 d6 c7 b8)],
192             f5 => [qw(a5 b5 c5 d5 e5 g5 h5 f1 f2 f3 f4 f6 f7 f8 b1 c2 d3 e4 g6 h7 h3 g4 e6 d7 c8)],
193             g5 => [qw(a5 b5 c5 d5 e5 f5 h5 g1 g2 g3 g4 g6 g7 g8 c1 d2 e3 f4 h6 h4 f6 e7 d8)],
194             h5 => [qw(a5 b5 c5 d5 e5 f5 g5 h1 h2 h3 h4 h6 h7 h8 d1 e2 f3 g4 g6 f7 e8)],
195             a6 => [qw(b6 c6 d6 e6 f6 g6 h6 a1 a2 a3 a4 a5 a7 a8 b7 c8 f1 e2 d3 c4 b5)],
196             b6 => [qw(a6 c6 d6 e6 f6 g6 h6 b1 b2 b3 b4 b5 b7 b8 a5 c7 d8 g1 f2 e3 d4 c5 a7)],
197             c6 => [qw(a6 b6 d6 e6 f6 g6 h6 c1 c2 c3 c4 c5 c7 c8 a4 b5 d7 e8 h1 g2 f3 e4 d5 b7 a8)],
198             d6 => [qw(a6 b6 c6 e6 f6 g6 h6 d1 d2 d3 d4 d5 d7 d8 a3 b4 c5 e7 f8 h2 g3 f4 e5 c7 b8)],
199             e6 => [qw(a6 b6 c6 d6 f6 g6 h6 e1 e2 e3 e4 e5 e7 e8 a2 b3 c4 d5 f7 g8 h3 g4 f5 d7 c8)],
200             f6 => [qw(a6 b6 c6 d6 e6 g6 h6 f1 f2 f3 f4 f5 f7 f8 a1 b2 c3 d4 e5 g7 h8 h4 g5 e7 d8)],
201             g6 => [qw(a6 b6 c6 d6 e6 f6 h6 g1 g2 g3 g4 g5 g7 g8 b1 c2 d3 e4 f5 h7 h5 f7 e8)],
202             h6 => [qw(a6 b6 c6 d6 e6 f6 g6 h1 h2 h3 h4 h5 h7 h8 c1 d2 e3 f4 g5 g7 f8)],
203             a7 => [qw(b7 c7 d7 e7 f7 g7 h7 a1 a2 a3 a4 a5 a6 a8 b8 g1 f2 e3 d4 c5 b6)],
204             b7 => [qw(a7 c7 d7 e7 f7 g7 h7 b1 b2 b3 b4 b5 b6 b8 a6 c8 h1 g2 f3 e4 d5 c6 a8)],
205             c7 => [qw(a7 b7 d7 e7 f7 g7 h7 c1 c2 c3 c4 c5 c6 c8 a5 b6 d8 h2 g3 f4 e5 d6 b8)],
206             d7 => [qw(a7 b7 c7 e7 f7 g7 h7 d1 d2 d3 d4 d5 d6 d8 a4 b5 c6 e8 h3 g4 f5 e6 c8)],
207             e7 => [qw(a7 b7 c7 d7 f7 g7 h7 e1 e2 e3 e4 e5 e6 e8 a3 b4 c5 d6 f8 h4 g5 f6 d8)],
208             f7 => [qw(a7 b7 c7 d7 e7 g7 h7 f1 f2 f3 f4 f5 f6 f8 a2 b3 c4 d5 e6 g8 h5 g6 e8)],
209             g7 => [qw(a7 b7 c7 d7 e7 f7 h7 g1 g2 g3 g4 g5 g6 g8 a1 b2 c3 d4 e5 f6 h8 h6 f8)],
210             h7 => [qw(a7 b7 c7 d7 e7 f7 g7 h1 h2 h3 h4 h5 h6 h8 b1 c2 d3 e4 f5 g6 g8)],
211             a8 => [qw(b8 c8 d8 e8 f8 g8 h8 a1 a2 a3 a4 a5 a6 a7 h1 g2 f3 e4 d5 c6 b7)],
212             b8 => [qw(a8 c8 d8 e8 f8 g8 h8 b1 b2 b3 b4 b5 b6 b7 a7 h2 g3 f4 e5 d6 c7)],
213             c8 => [qw(a8 b8 d8 e8 f8 g8 h8 c1 c2 c3 c4 c5 c6 c7 a6 b7 h3 g4 f5 e6 d7)],
214             d8 => [qw(a8 b8 c8 e8 f8 g8 h8 d1 d2 d3 d4 d5 d6 d7 a5 b6 c7 h4 g5 f6 e7)],
215             e8 => [qw(a8 b8 c8 d8 f8 g8 h8 e1 e2 e3 e4 e5 e6 e7 a4 b5 c6 d7 h5 g6 f7)],
216             f8 => [qw(a8 b8 c8 d8 e8 g8 h8 f1 f2 f3 f4 f5 f6 f7 a3 b4 c5 d6 e7 h6 g7)],
217             g8 => [qw(a8 b8 c8 d8 e8 f8 h8 g1 g2 g3 g4 g5 g6 g7 a2 b3 c4 d5 e6 f7 h7)],
218             h8 => [qw(a8 b8 c8 d8 e8 f8 g8 h1 h2 h3 h4 h5 h6 h7 a1 b2 c3 d4 e5 f6 g7)],
219             );
220            
221             %Rook_Moves = (
222             a1 => [qw(b1 c1 d1 e1 f1 g1 h1 a2 a3 a4 a5 a6 a7 a8)],
223             b1 => [qw(a1 c1 d1 e1 f1 g1 h1 b2 b3 b4 b5 b6 b7 b8)],
224             c1 => [qw(a1 b1 d1 e1 f1 g1 h1 c2 c3 c4 c5 c6 c7 c8)],
225             d1 => [qw(a1 b1 c1 e1 f1 g1 h1 d2 d3 d4 d5 d6 d7 d8)],
226             e1 => [qw(a1 b1 c1 d1 f1 g1 h1 e2 e3 e4 e5 e6 e7 e8)],
227             f1 => [qw(a1 b1 c1 d1 e1 g1 h1 f2 f3 f4 f5 f6 f7 f8)],
228             g1 => [qw(a1 b1 c1 d1 e1 f1 h1 g2 g3 g4 g5 g6 g7 g8)],
229             h1 => [qw(a1 b1 c1 d1 e1 f1 g1 h2 h3 h4 h5 h6 h7 h8)],
230             a2 => [qw(b2 c2 d2 e2 f2 g2 h2 a1 a3 a4 a5 a6 a7 a8)],
231             b2 => [qw(a2 c2 d2 e2 f2 g2 h2 b1 b3 b4 b5 b6 b7 b8)],
232             c2 => [qw(a2 b2 d2 e2 f2 g2 h2 c1 c3 c4 c5 c6 c7 c8)],
233             d2 => [qw(a2 b2 c2 e2 f2 g2 h2 d1 d3 d4 d5 d6 d7 d8)],
234             e2 => [qw(a2 b2 c2 d2 f2 g2 h2 e1 e3 e4 e5 e6 e7 e8)],
235             f2 => [qw(a2 b2 c2 d2 e2 g2 h2 f1 f3 f4 f5 f6 f7 f8)],
236             g2 => [qw(a2 b2 c2 d2 e2 f2 h2 g1 g3 g4 g5 g6 g7 g8)],
237             h2 => [qw(a2 b2 c2 d2 e2 f2 g2 h1 h3 h4 h5 h6 h7 h8)],
238             a3 => [qw(b3 c3 d3 e3 f3 g3 h3 a1 a2 a4 a5 a6 a7 a8)],
239             b3 => [qw(a3 c3 d3 e3 f3 g3 h3 b1 b2 b4 b5 b6 b7 b8)],
240             c3 => [qw(a3 b3 d3 e3 f3 g3 h3 c1 c2 c4 c5 c6 c7 c8)],
241             d3 => [qw(a3 b3 c3 e3 f3 g3 h3 d1 d2 d4 d5 d6 d7 d8)],
242             e3 => [qw(a3 b3 c3 d3 f3 g3 h3 e1 e2 e4 e5 e6 e7 e8)],
243             f3 => [qw(a3 b3 c3 d3 e3 g3 h3 f1 f2 f4 f5 f6 f7 f8)],
244             g3 => [qw(a3 b3 c3 d3 e3 f3 h3 g1 g2 g4 g5 g6 g7 g8)],
245             h3 => [qw(a3 b3 c3 d3 e3 f3 g3 h1 h2 h4 h5 h6 h7 h8)],
246             a4 => [qw(b4 c4 d4 e4 f4 g4 h4 a1 a2 a3 a5 a6 a7 a8)],
247             b4 => [qw(a4 c4 d4 e4 f4 g4 h4 b1 b2 b3 b5 b6 b7 b8)],
248             c4 => [qw(a4 b4 d4 e4 f4 g4 h4 c1 c2 c3 c5 c6 c7 c8)],
249             d4 => [qw(a4 b4 c4 e4 f4 g4 h4 d1 d2 d3 d5 d6 d7 d8)],
250             e4 => [qw(a4 b4 c4 d4 f4 g4 h4 e1 e2 e3 e5 e6 e7 e8)],
251             f4 => [qw(a4 b4 c4 d4 e4 g4 h4 f1 f2 f3 f5 f6 f7 f8)],
252             g4 => [qw(a4 b4 c4 d4 e4 f4 h4 g1 g2 g3 g5 g6 g7 g8)],
253             h4 => [qw(a4 b4 c4 d4 e4 f4 g4 h1 h2 h3 h5 h6 h7 h8)],
254             a5 => [qw(b5 c5 d5 e5 f5 g5 h5 a1 a2 a3 a4 a6 a7 a8)],
255             b5 => [qw(a5 c5 d5 e5 f5 g5 h5 b1 b2 b3 b4 b6 b7 b8)],
256             c5 => [qw(a5 b5 d5 e5 f5 g5 h5 c1 c2 c3 c4 c6 c7 c8)],
257             d5 => [qw(a5 b5 c5 e5 f5 g5 h5 d1 d2 d3 d4 d6 d7 d8)],
258             e5 => [qw(a5 b5 c5 d5 f5 g5 h5 e1 e2 e3 e4 e6 e7 e8)],
259             f5 => [qw(a5 b5 c5 d5 e5 g5 h5 f1 f2 f3 f4 f6 f7 f8)],
260             g5 => [qw(a5 b5 c5 d5 e5 f5 h5 g1 g2 g3 g4 g6 g7 g8)],
261             h5 => [qw(a5 b5 c5 d5 e5 f5 g5 h1 h2 h3 h4 h6 h7 h8)],
262             a6 => [qw(b6 c6 d6 e6 f6 g6 h6 a1 a2 a3 a4 a5 a7 a8)],
263             b6 => [qw(a6 c6 d6 e6 f6 g6 h6 b1 b2 b3 b4 b5 b7 b8)],
264             c6 => [qw(a6 b6 d6 e6 f6 g6 h6 c1 c2 c3 c4 c5 c7 c8)],
265             d6 => [qw(a6 b6 c6 e6 f6 g6 h6 d1 d2 d3 d4 d5 d7 d8)],
266             e6 => [qw(a6 b6 c6 d6 f6 g6 h6 e1 e2 e3 e4 e5 e7 e8)],
267             f6 => [qw(a6 b6 c6 d6 e6 g6 h6 f1 f2 f3 f4 f5 f7 f8)],
268             g6 => [qw(a6 b6 c6 d6 e6 f6 h6 g1 g2 g3 g4 g5 g7 g8)],
269             h6 => [qw(a6 b6 c6 d6 e6 f6 g6 h1 h2 h3 h4 h5 h7 h8)],
270             a7 => [qw(b7 c7 d7 e7 f7 g7 h7 a1 a2 a3 a4 a5 a6 a8)],
271             b7 => [qw(a7 c7 d7 e7 f7 g7 h7 b1 b2 b3 b4 b5 b6 b8)],
272             c7 => [qw(a7 b7 d7 e7 f7 g7 h7 c1 c2 c3 c4 c5 c6 c8)],
273             d7 => [qw(a7 b7 c7 e7 f7 g7 h7 d1 d2 d3 d4 d5 d6 d8)],
274             e7 => [qw(a7 b7 c7 d7 f7 g7 h7 e1 e2 e3 e4 e5 e6 e8)],
275             f7 => [qw(a7 b7 c7 d7 e7 g7 h7 f1 f2 f3 f4 f5 f6 f8)],
276             g7 => [qw(a7 b7 c7 d7 e7 f7 h7 g1 g2 g3 g4 g5 g6 g8)],
277             h7 => [qw(a7 b7 c7 d7 e7 f7 g7 h1 h2 h3 h4 h5 h6 h8)],
278             a8 => [qw(b8 c8 d8 e8 f8 g8 h8 a1 a2 a3 a4 a5 a6 a7)],
279             b8 => [qw(a8 c8 d8 e8 f8 g8 h8 b1 b2 b3 b4 b5 b6 b7)],
280             c8 => [qw(a8 b8 d8 e8 f8 g8 h8 c1 c2 c3 c4 c5 c6 c7)],
281             d8 => [qw(a8 b8 c8 e8 f8 g8 h8 d1 d2 d3 d4 d5 d6 d7)],
282             e8 => [qw(a8 b8 c8 d8 f8 g8 h8 e1 e2 e3 e4 e5 e6 e7)],
283             f8 => [qw(a8 b8 c8 d8 e8 g8 h8 f1 f2 f3 f4 f5 f6 f7)],
284             g8 => [qw(a8 b8 c8 d8 e8 f8 h8 g1 g2 g3 g4 g5 g6 g7)],
285             h8 => [qw(a8 b8 c8 d8 e8 f8 g8 h1 h2 h3 h4 h5 h6 h7)],
286             );
287            
288             %Bishop_Moves = (
289             a1 => [qw(b2 c3 d4 e5 f6 g7 h8)],
290             b1 => [qw(c2 d3 e4 f5 g6 h7 a2)],
291             c1 => [qw(d2 e3 f4 g5 h6 b2 a3)],
292             d1 => [qw(e2 f3 g4 h5 c2 b3 a4)],
293             e1 => [qw(f2 g3 h4 d2 c3 b4 a5)],
294             f1 => [qw(g2 h3 e2 d3 c4 b5 a6)],
295             g1 => [qw(h2 f2 e3 d4 c5 b6 a7)],
296             h1 => [qw(g2 f3 e4 d5 c6 b7 a8)],
297             a2 => [qw(b3 c4 d5 e6 f7 g8 b1)],
298             b2 => [qw(a1 c3 d4 e5 f6 g7 h8 c1 a3)],
299             c2 => [qw(b1 d3 e4 f5 g6 h7 d1 b3 a4)],
300             d2 => [qw(c1 e3 f4 g5 h6 e1 c3 b4 a5)],
301             e2 => [qw(d1 f3 g4 h5 f1 d3 c4 b5 a6)],
302             f2 => [qw(e1 g3 h4 g1 e3 d4 c5 b6 a7)],
303             g2 => [qw(f1 h3 h1 f3 e4 d5 c6 b7 a8)],
304             h2 => [qw(g1 g3 f4 e5 d6 c7 b8)],
305             a3 => [qw(b4 c5 d6 e7 f8 c1 b2)],
306             b3 => [qw(a2 c4 d5 e6 f7 g8 d1 c2 a4)],
307             c3 => [qw(a1 b2 d4 e5 f6 g7 h8 e1 d2 b4 a5)],
308             d3 => [qw(b1 c2 e4 f5 g6 h7 f1 e2 c4 b5 a6)],
309             e3 => [qw(c1 d2 f4 g5 h6 g1 f2 d4 c5 b6 a7)],
310             f3 => [qw(d1 e2 g4 h5 h1 g2 e4 d5 c6 b7 a8)],
311             g3 => [qw(e1 f2 h4 h2 f4 e5 d6 c7 b8)],
312             h3 => [qw(f1 g2 g4 f5 e6 d7 c8)],
313             a4 => [qw(b5 c6 d7 e8 d1 c2 b3)],
314             b4 => [qw(a3 c5 d6 e7 f8 e1 d2 c3 a5)],
315             c4 => [qw(a2 b3 d5 e6 f7 g8 f1 e2 d3 b5 a6)],
316             d4 => [qw(a1 b2 c3 e5 f6 g7 h8 g1 f2 e3 c5 b6 a7)],
317             e4 => [qw(b1 c2 d3 f5 g6 h7 h1 g2 f3 d5 c6 b7 a8)],
318             f4 => [qw(c1 d2 e3 g5 h6 h2 g3 e5 d6 c7 b8)],
319             g4 => [qw(d1 e2 f3 h5 h3 f5 e6 d7 c8)],
320             h4 => [qw(e1 f2 g3 g5 f6 e7 d8)],
321             a5 => [qw(b6 c7 d8 e1 d2 c3 b4)],
322             b5 => [qw(a4 c6 d7 e8 f1 e2 d3 c4 a6)],
323             c5 => [qw(a3 b4 d6 e7 f8 g1 f2 e3 d4 b6 a7)],
324             d5 => [qw(a2 b3 c4 e6 f7 g8 h1 g2 f3 e4 c6 b7 a8)],
325             e5 => [qw(a1 b2 c3 d4 f6 g7 h8 h2 g3 f4 d6 c7 b8)],
326             f5 => [qw(b1 c2 d3 e4 g6 h7 h3 g4 e6 d7 c8)],
327             g5 => [qw(c1 d2 e3 f4 h6 h4 f6 e7 d8)],
328             h5 => [qw(d1 e2 f3 g4 g6 f7 e8)],
329             a6 => [qw(b7 c8 f1 e2 d3 c4 b5)],
330             b6 => [qw(a5 c7 d8 g1 f2 e3 d4 c5 a7)],
331             c6 => [qw(a4 b5 d7 e8 h1 g2 f3 e4 d5 b7 a8)],
332             d6 => [qw(a3 b4 c5 e7 f8 h2 g3 f4 e5 c7 b8)],
333             e6 => [qw(a2 b3 c4 d5 f7 g8 h3 g4 f5 d7 c8)],
334             f6 => [qw(a1 b2 c3 d4 e5 g7 h8 h4 g5 e7 d8)],
335             g6 => [qw(b1 c2 d3 e4 f5 h7 h5 f7 e8)],
336             h6 => [qw(c1 d2 e3 f4 g5 g7 f8)],
337             a7 => [qw(b8 g1 f2 e3 d4 c5 b6)],
338             b7 => [qw(a6 c8 h1 g2 f3 e4 d5 c6 a8)],
339             c7 => [qw(a5 b6 d8 h2 g3 f4 e5 d6 b8)],
340             d7 => [qw(a4 b5 c6 e8 h3 g4 f5 e6 c8)],
341             e7 => [qw(a3 b4 c5 d6 f8 h4 g5 f6 d8)],
342             f7 => [qw(a2 b3 c4 d5 e6 g8 h5 g6 e8)],
343             g7 => [qw(a1 b2 c3 d4 e5 f6 h8 h6 f8)],
344             h7 => [qw(b1 c2 d3 e4 f5 g6 g8)],
345             a8 => [qw(h1 g2 f3 e4 d5 c6 b7)],
346             b8 => [qw(a7 h2 g3 f4 e5 d6 c7)],
347             c8 => [qw(a6 b7 h3 g4 f5 e6 d7)],
348             d8 => [qw(a5 b6 c7 h4 g5 f6 e7)],
349             e8 => [qw(a4 b5 c6 d7 h5 g6 f7)],
350             f8 => [qw(a3 b4 c5 d6 e7 h6 g7)],
351             g8 => [qw(a2 b3 c4 d5 e6 f7 h7)],
352             h8 => [qw(a1 b2 c3 d4 e5 f6 g7)],
353             );
354            
355             %Knight_Moves = (
356             a1 => [qw(b3 c2)],
357             b1 => [qw(a3 c3 d2)],
358             c1 => [qw(a2 b3 d3 e2)],
359             d1 => [qw(b2 c3 e3 f2)],
360             e1 => [qw(c2 d3 f3 g2)],
361             f1 => [qw(d2 e3 g3 h2)],
362             g1 => [qw(e2 f3 h3)],
363             h1 => [qw(f2 g3)],
364             a2 => [qw(b4 c3 c1)],
365             b2 => [qw(a4 c4 d3 d1)],
366             c2 => [qw(a1 a3 b4 d4 e3 e1)],
367             d2 => [qw(b1 b3 c4 e4 f3 f1)],
368             e2 => [qw(c1 c3 d4 f4 g3 g1)],
369             f2 => [qw(d1 d3 e4 g4 h3 h1)],
370             g2 => [qw(e1 e3 f4 h4)],
371             h2 => [qw(f1 f3 g4)],
372             a3 => [qw(b5 c4 c2 b1)],
373             b3 => [qw(a1 a5 c5 d4 d2 c1)],
374             c3 => [qw(b1 a2 a4 b5 d5 e4 e2 d1)],
375             d3 => [qw(c1 b2 b4 c5 e5 f4 f2 e1)],
376             e3 => [qw(d1 c2 c4 d5 f5 g4 g2 f1)],
377             f3 => [qw(e1 d2 d4 e5 g5 h4 h2 g1)],
378             g3 => [qw(f1 e2 e4 f5 h5 h1)],
379             h3 => [qw(g1 f2 f4 g5)],
380             a4 => [qw(b6 c5 c3 b2)],
381             b4 => [qw(a2 a6 c6 d5 d3 c2)],
382             c4 => [qw(b2 a3 a5 b6 d6 e5 e3 d2)],
383             d4 => [qw(c2 b3 b5 c6 e6 f5 f3 e2)],
384             e4 => [qw(d2 c3 c5 d6 f6 g5 g3 f2)],
385             f4 => [qw(e2 d3 d5 e6 g6 h5 h3 g2)],
386             g4 => [qw(f2 e3 e5 f6 h6 h2)],
387             h4 => [qw(g2 f3 f5 g6)],
388             a5 => [qw(b7 c6 c4 b3)],
389             b5 => [qw(a3 a7 c7 d6 d4 c3)],
390             c5 => [qw(b3 a4 a6 b7 d7 e6 e4 d3)],
391             d5 => [qw(c3 b4 b6 c7 e7 f6 f4 e3)],
392             e5 => [qw(d3 c4 c6 d7 f7 g6 g4 f3)],
393             f5 => [qw(e3 d4 d6 e7 g7 h6 h4 g3)],
394             g5 => [qw(f3 e4 e6 f7 h7 h3)],
395             h5 => [qw(g3 f4 f6 g7)],
396             a6 => [qw(b8 c7 c5 b4)],
397             b6 => [qw(a4 a8 c8 d7 d5 c4)],
398             c6 => [qw(b4 a5 a7 b8 d8 e7 e5 d4)],
399             d6 => [qw(c4 b5 b7 c8 e8 f7 f5 e4)],
400             e6 => [qw(d4 c5 c7 d8 f8 g7 g5 f4)],
401             f6 => [qw(e4 d5 d7 e8 g8 h7 h5 g4)],
402             g6 => [qw(f4 e5 e7 f8 h8 h4)],
403             h6 => [qw(g4 f5 f7 g8)],
404             a7 => [qw(c8 c6 b5)],
405             b7 => [qw(a5 d8 d6 c5)],
406             c7 => [qw(b5 a6 a8 e8 e6 d5)],
407             d7 => [qw(c5 b6 b8 f8 f6 e5)],
408             e7 => [qw(d5 c6 c8 g8 g6 f5)],
409             f7 => [qw(e5 d6 d8 h8 h6 g5)],
410             g7 => [qw(f5 e6 e8 h5)],
411             h7 => [qw(g5 f6 f8)],
412             a8 => [qw(c7 b6)],
413             b8 => [qw(a6 d7 c6)],
414             c8 => [qw(b6 a7 e7 d6)],
415             d8 => [qw(c6 b7 f7 e6)],
416             e8 => [qw(d6 c7 g7 f6)],
417             f8 => [qw(e6 d7 h7 g6)],
418             g8 => [qw(f6 e7 h6)],
419             h8 => [qw(g6 f7)],
420             );
421            
422             %pawnWhite = (
423             a2 => [qw(a3 a4 b3)],
424             b2 => [qw(b3 b4 a3 c3)],
425             c2 => [qw(c3 c4 b3 d3)],
426             d2 => [qw(d3 d4 c3 e3)],
427             e2 => [qw(e3 e4 d3 f3)],
428             f2 => [qw(f3 f4 e3 g3)],
429             g2 => [qw(g3 g4 f3 h3)],
430             h2 => [qw(h3 h4 g3)],
431             a3 => [qw(a4 b4)],
432             b3 => [qw(b4 c4 a4)],
433             c3 => [qw(c4 d4 b4)],
434             d3 => [qw(d4 e4 c4)],
435             e3 => [qw(e4 f4 d4)],
436             f3 => [qw(f4 g4 e4)],
437             g3 => [qw(g4 h4 f4)],
438             h3 => [qw(h4 g4)],
439             a4 => [qw(a5 b5)],
440             b4 => [qw(b5 c5 a5)],
441             c4 => [qw(c5 d5 b5)],
442             d4 => [qw(d5 e5 c5)],
443             e4 => [qw(e5 f5 d5)],
444             f4 => [qw(f5 g5 e5)],
445             g4 => [qw(g5 h5 f5)],
446             h4 => [qw(h5 g5)],
447             a5 => [qw(a6 b6)],
448             b5 => [qw(b6 c6 a6)],
449             c5 => [qw(c6 d6 b6)],
450             d5 => [qw(d6 e6 c6)],
451             e5 => [qw(e6 f6 d6)],
452             f5 => [qw(f6 g6 e6)],
453             g5 => [qw(g6 h6 f6)],
454             h5 => [qw(h6 g6)],
455             a6 => [qw(a7 b7)],
456             b6 => [qw(b7 c7 a7)],
457             c6 => [qw(c7 d7 b7)],
458             d6 => [qw(d7 e7 c7)],
459             e6 => [qw(e7 f7 d7)],
460             f6 => [qw(f7 g7 e7)],
461             g6 => [qw(g7 h7 f7)],
462             h6 => [qw(h7 g7)],
463             a7 => [qw(a8 b8)],
464             b7 => [qw(b8 c8 a8)],
465             c7 => [qw(c8 d8 b8)],
466             d7 => [qw(d8 e8 c8)],
467             e7 => [qw(e8 f8 d8)],
468             f7 => [qw(f8 g8 e8)],
469             g7 => [qw(g8 h8 f8)],
470             h7 => [qw(h8 g8)],
471             );
472            
473             %pawnBlack = (
474             a7 => [qw(a6 a5 b6)],
475             b7 => [qw(b6 b5 c6 a6)],
476             c7 => [qw(c6 c5 d6 b6)],
477             d7 => [qw(d6 d5 e6 c6)],
478             e7 => [qw(e6 e5 f6 d6)],
479             f7 => [qw(f6 f5 g6 e6)],
480             g7 => [qw(g6 g5 h6 f6)],
481             h7 => [qw(h6 h5 g6)],
482             a6 => [qw(a5 b5)],
483             b6 => [qw(b5 c5 a5)],
484             c6 => [qw(c5 d5 b5)],
485             d6 => [qw(d5 e5 c5)],
486             e6 => [qw(e5 f5 d5)],
487             f6 => [qw(f5 g5 e5)],
488             g6 => [qw(g5 h5 f5)],
489             h6 => [qw(h5 g5)],
490             a5 => [qw(a4 b4)],
491             b5 => [qw(b4 c4 a4)],
492             c5 => [qw(c4 d4 b4)],
493             d5 => [qw(d4 e4 c4)],
494             e5 => [qw(e4 f4 d4)],
495             f5 => [qw(f4 g4 e4)],
496             g5 => [qw(g4 h4 f4)],
497             h5 => [qw(h4 g4)],
498             a4 => [qw(a3 b3)],
499             b4 => [qw(b3 c3 a3)],
500             c4 => [qw(c3 d3 b3)],
501             d4 => [qw(d3 e3 c3)],
502             e4 => [qw(e3 f3 d3)],
503             f4 => [qw(f3 g3 e3)],
504             g4 => [qw(g3 h3 f3)],
505             h4 => [qw(h3 g3)],
506             a3 => [qw(a2 b2)],
507             b3 => [qw(b2 c2 a2)],
508             c3 => [qw(c2 d2 b2)],
509             d3 => [qw(d2 e2 c2)],
510             e3 => [qw(e2 f2 d2)],
511             f3 => [qw(f2 g2 e2)],
512             g3 => [qw(g2 h2 f2)],
513             h3 => [qw(h2 g2)],
514             a2 => [qw(a1 b1)],
515             b2 => [qw(b1 c1 a1)],
516             c2 => [qw(c1 d1 b1)],
517             d2 => [qw(d1 e1 c1)],
518             e2 => [qw(e1 f1 d1)],
519             f2 => [qw(f1 g1 e1)],
520             g2 => [qw(g1 h1 f1)],
521             h2 => [qw(h1 g1)],
522             );
523            
524             %from_algebraic = (
525             "a1", 0,"b1", 1,"c1", 2,"d1", 3,"e1", 4,"f1", 5,"g1", 6,"h1", 7,
526             "a2", 8,"b2", 9,"c2",10,"d2",11,"e2",12,"f2",13,"g2",14,"h2",15,
527             "a3",16,"b3",17,"c3",18,"d3",19,"e3",20,"f3",21,"g3",22,"h3",23,
528             "a4",24,"b4",25,"c4",26,"d4",27,"e4",28,"f4",29,"g4",30,"h4",31,
529             "a5",32,"b5",33,"c5",34,"d5",35,"e5",36,"f5",37,"g5",38,"h5",39,
530             "a6",40,"b6",41,"c6",42,"d6",43,"e6",44,"f6",45,"g6",46,"h6",47,
531             "a7",48,"b7",49,"c7",50,"d7",51,"e7",52,"f7",53,"g7",54,"h7",55,
532             "a8",56,"b8",57,"c8",58,"d8",59,"e8",60,"f8",61,"g8",62,"h8",63,
533             );
534            
535             %move_table = (
536             K => \%King_Moves,
537             Q => \%Queen_Moves,
538             R => \%Rook_Moves,
539             N => \%Knight_Moves,
540             B => \%Bishop_Moves,
541             );
542            
543             1;
544             __END__