1 /***************************************************************************
2 * Brutal Chess
3 * http://brutalchess.sf.net
4 *
5 * File : boardposition.cpp
6 * Authors : Mike Cook, Joe Flint, Neil Pankey
7 **************************************************************************/
8
9 #include "boardposition.h"
10 #include "board.h"
11 #include <iostream>
12
BoardPosition(const char & file,const int & rank)13 BoardPosition::BoardPosition(const char & file, const int & rank)
14 : m_file0(file-'a'), m_rank0(rank-1)
15 {}
16
17
isValid() const18 bool BoardPosition::isValid() const
19 {
20 return (m_file0 >= 0) && (m_rank0 >= 0) && (m_file0 < Board::BOARDSIZE) &&
21 (m_rank0 < Board::BOARDSIZE);
22 }
23
N() const24 const BoardPosition BoardPosition::N() const
25 {
26 return BoardPosition(m_file0, m_rank0 + 1);
27 }
28
NE() const29 const BoardPosition BoardPosition::NE() const
30 {
31 return BoardPosition(m_file0 + 1, m_rank0 + 1);
32 }
33
E() const34 const BoardPosition BoardPosition::E() const
35 {
36 return BoardPosition(m_file0 + 1, m_rank0);
37 }
38
SE() const39 const BoardPosition BoardPosition::SE() const
40 {
41 return BoardPosition(m_file0 + 1, m_rank0 - 1);
42 }
43
S() const44 const BoardPosition BoardPosition::S() const
45 {
46 return BoardPosition(m_file0, m_rank0 - 1);
47 }
48
SW() const49 const BoardPosition BoardPosition::SW() const
50 {
51 return BoardPosition(m_file0 - 1, m_rank0 - 1);
52 }
53
W() const54 const BoardPosition BoardPosition::W() const
55 {
56 return BoardPosition(m_file0 - 1, m_rank0);
57 }
58
NW() const59 const BoardPosition BoardPosition::NW() const
60 {
61 return BoardPosition(m_file0 - 1, m_rank0 + 1);
62 }
63
outN() const64 const bool BoardPosition::outN() const
65 {
66 return (m_rank0 >= Board::BOARDSIZE);
67 }
68
outNE() const69 const bool BoardPosition::outNE() const
70 {
71 return (m_rank0 >= Board::BOARDSIZE || m_file0 >= Board::BOARDSIZE);
72 }
73
outE() const74 const bool BoardPosition::outE() const
75 {
76 return (m_file0 >= Board::BOARDSIZE);
77 }
78
outSE() const79 const bool BoardPosition::outSE() const
80 {
81 return (m_rank0 < 0 || m_file0 >= Board::BOARDSIZE);
82 }
83
outS() const84 const bool BoardPosition::outS() const
85 {
86 return (m_rank0 < 0);
87 }
88
outSW() const89 const bool BoardPosition::outSW() const
90 {
91 return (m_rank0 < 0 || m_file0 < 0);
92 }
93
outW() const94 const bool BoardPosition::outW() const
95 {
96 return (m_file0 < 0);
97 }
98
outNW() const99 const bool BoardPosition::outNW() const
100 {
101 return (m_rank0 >= Board::BOARDSIZE || m_file0 < 0);
102 }
103
moveN()104 void BoardPosition::moveN()
105 {
106 m_rank0++;
107 }
108
moveNE()109 void BoardPosition::moveNE()
110 {
111 m_rank0++;
112 m_file0++;
113 }
114
moveE()115 void BoardPosition::moveE()
116 {
117 m_file0++;
118 }
119
moveSE()120 void BoardPosition::moveSE()
121 {
122 m_rank0--;
123 m_file0++;
124 }
125
moveS()126 void BoardPosition::moveS()
127 {
128 m_rank0--;
129 }
130
moveSW()131 void BoardPosition::moveSW()
132 {
133 m_rank0--;
134 m_file0--;
135 }
136
moveW()137 void BoardPosition::moveW()
138 {
139 m_file0--;
140 }
141
moveNW()142 void BoardPosition::moveNW()
143 {
144 m_rank0++;
145 m_file0--;
146 }
147
operator ==(const BoardPosition & bp1,const BoardPosition & bp2)148 bool operator== (const BoardPosition& bp1, const BoardPosition& bp2)
149 {
150 return (bp1.m_file0 == bp2.m_file0) && (bp1.m_rank0 == bp2.m_rank0);
151 }
152
operator !=(const BoardPosition & bp1,const BoardPosition & bp2)153 bool operator!= (const BoardPosition& bp1, const BoardPosition& bp2)
154 {
155 return (bp1.m_file0 != bp2.m_file0) || (bp1.m_rank0 != bp2.m_rank0);
156 }
157
operator <<(std::ostream & os,const BoardPosition & bp)158 std::ostream& operator<< (std::ostream& os, const BoardPosition & bp)
159 {
160 os << (char)(bp.m_file0+'a') << bp.m_rank0+1;
161 return os;
162 }
163
164 // End of file boardposition.cpp
165