-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathboard.rb
More file actions
143 lines (143 loc) · 3.49 KB
/
board.rb
File metadata and controls
143 lines (143 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
require './bishop'
require './king'
require './knight'
require './pawn'
require './queen'
require './rook'
require './white_player'
require './black_player'
require './black'
require './white'
require './tile'
class Board
def initialize
@boardConfig=Array.new
@enPassantPawn=nil
end
def getCurrentPlayer
@currentPlayer
end
def build
@gameBoard=createGameBoard
@whitePieces=getLivePieces(White.new)
@blackPieces=getLivePieces(Black.new)
@whiteLegalMoves=getLegalMoves(@whitePieces)
@blackLegalMoves=getLegalMoves(@blackPieces)
@whitePlayer=WhitePlayer.new(self,@whiteLegalMoves,@blackLegalMoves)
@blackPlayer=BlackPlayer.new(self,@blackLegalMoves,@whiteLegalMoves)
@currentPlayer=@turn.choosePlayer(@whitePlayer,@blackPlayer)
end
def getCurrentPlayer
@currentPlayer
end
def to_s
board=""
for i in 0..63
if(i%8==0)
board+="#{-(i/8)+8} "
end
if(@gameBoard[i].isTileOccupied?)
p=@gameBoard[i].getPiece.to_s
if @gameBoard[i].getPiece.getPieceAlliance==White.new
board+=" #{p.upcase} "
else
board+= " #{p} "
end
else
board+= " - "
end
if (i%8==7)
board+= "\n"
end
end
board+="\n"
board+= " a b c d e f g h"
board
end
def getWhitePieces
@whitePieces
end
def getBlackPieces
@blackPieces
end
def getWhitePlayer
@whitePlayer
end
def getBlackPlayer
@blackPlayer
end
def getLegalMoves(pieces)
legalMoves=Array.new
pieces.each do |piece|
legalMoves+=piece.calculateLegalMoves(self)
end
legalMoves
end
def getLivePieces(alliance)
livePieces=Array.new
for i in 0..63
if @gameBoard[i].isTileOccupied?
piece=@gameBoard[i].getPiece
if(piece.getPieceAlliance==alliance)
livePieces.push(piece)
end
end
end
livePieces
end
def createGameBoard
tiles=Array.new
for i in 0..63
tiles[i]=Tile.createTile(i,@boardConfig[i])
end
tiles
end
def createStandardBoard
setPiece(Rook.new(0,Black.new(),true))
setPiece(Knight.new(1,Black.new(),true))
setPiece(Bishop.new(2,Black.new(),true))
setPiece(Queen.new(3,Black.new(),true))
setPiece(King.new(4,Black.new(),true,false))
setPiece(Bishop.new(5,Black.new(),true))
setPiece(Knight.new(6,Black.new(),true))
setPiece(Rook.new(7,Black.new(),true))
for i in 8..15
setPiece(Pawn.new(i,Black.new(),true))
end
for i in 48..55
setPiece(Pawn.new(i,White.new(),true))
end
setPiece(Rook.new(56,White.new(),true))
setPiece(Knight.new(57,White.new(),true))
setPiece(Bishop.new(58,White.new(),true))
setPiece(Queen.new(59,White.new(),true))
setPiece(King.new(60,White.new(),true,false))
setPiece(Bishop.new(61,White.new(),true))
setPiece(Knight.new(62,White.new(),true))
setPiece(Rook.new(63,White.new(),true))
setTurn(White.new)
end
def setPiece(piece)
@boardConfig[piece.getPiecePosition]=piece
end
def getTile(coordinate)
@gameBoard[coordinate]
end
def getAllLegalMoves
moves=Array.new
moves=@whiteLegalMoves+@blackLegalMoves
moves
end
def setTurn(alliance)
@turn=alliance
end
def getTurn
@turn
end
def setEnPassantPawn(pawn)
@enPassantPawn=pawn
end
def getEnPassantPawn
@enPassantPawn
end
end