package com.rahul.bbgen;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
public class Main {
private BitBoard WRooks;
private BitBoard WBishops;
private BitBoard WPawns;
private BitBoard WKnights;
private BitBoard WKing;
private BitBoard WQueen;
private BitBoard BRooks;
private BitBoard BBishops;
private BitBoard BPawns;
private BitBoard BKnights;
private BitBoard BKing;
private BitBoard BQueen;
private void initBoards() {
WRooks = new BitBoard();
WBishops = new BitBoard();
WPawns = new BitBoard();
WKnights = new BitBoard();
WKing = new BitBoard();
WQueen = new BitBoard();
BRooks = new BitBoard();
BBishops = new BitBoard();
BPawns = new BitBoard();
BKnights = new BitBoard();
BKing = new BitBoard();
BQueen = new BitBoard();
}
public void createBoards(String fen) {
initBoards();
int bitIndex = 0;
char[] fenChars = fen.toCharArray();
for (int i = 0; i < fenChars.length && bitIndex < BitBoard.BOARD_LENGTH; i++) {
// System.out.println(fenChars[i]);
switch (fenChars[i]) {
case 'R':
WRooks.flipBit(bitIndex++);
break;
case 'N':
WKnights.flipBit(bitIndex++);
break;
case 'B':
WBishops.flipBit(bitIndex++);
break;
case 'P':
WPawns.flipBit(bitIndex++);
break;
case 'K':
WKing.flipBit(bitIndex++);
break;
case 'Q':
WQueen.flipBit(bitIndex++);
break;
case 'r':
BRooks.flipBit(bitIndex++);
break;
case 'n':
BKnights.flipBit(bitIndex++);
break;
case 'b':
BBishops.flipBit(bitIndex++);
break;
case 'p':
BPawns.flipBit(bitIndex++);
break;
case 'k':
BKing.flipBit(bitIndex++);
break;
case 'q':
BQueen.flipBit(bitIndex++);
break;
case '/':
break;
default:
// System.out.println((int) fenChars[i] - 48);
bitIndex += (int) fenChars[i] - 48;
}
}
}
public String prettyPrintBoards() {
StringBuilder builder = new StringBuilder();
builder.append("White Rooks : ");
builder.append(WRooks.getBitBoard() + "\n");
builder.append("White Knights : ");
builder.append(WKnights.getBitBoard() + "\n");
builder.append("White Bishops : ");
builder.append(WBishops.getBitBoard() + "\n");
builder.append("White Pawns : ");
builder.append(WPawns.getBitBoard() + "\n");
builder.append("White King : ");
builder.append(WKing.getBitBoard() + "\n");
builder.append("White Queen : ");
builder.append(WQueen.getBitBoard() + "\n");
builder.append("Black Rooks : ");
builder.append(BRooks.getBitBoard() + "\n");
builder.append("Black Knights : ");
builder.append(BKnights.getBitBoard() + "\n");
builder.append("Black Bishops : ");
builder.append(BBishops.getBitBoard() + "\n");
builder.append("Black Pawns : ");
builder.append(BPawns.getBitBoard() + "\n");
builder.append("Black King : ");
builder.append(BKing.getBitBoard() + "\n");
builder.append("Black Queen : ");
builder.append(BQueen.getBitBoard() + "\n");
return builder.toString();
}
public String printBoards() {
StringBuilder builder = new StringBuilder();
builder.append(WRooks.getBitBoard());
builder.append(WKnights.getBitBoard());
builder.append(WBishops.getBitBoard());
builder.append(WPawns.getBitBoard());
builder.append(WKing.getBitBoard());
builder.append(WQueen.getBitBoard());
builder.append(BRooks.getBitBoard());
builder.append(BKnights.getBitBoard());
builder.append(BBishops.getBitBoard());
builder.append(BPawns.getBitBoard());
builder.append(BKing.getBitBoard());
builder.append(BQueen.getBitBoard());
return builder.toString();
}
public void buildBoards() {
try {
BufferedReader br = new BufferedReader(new FileReader(new File(
"./data/game4.fen")));
PrintWriter out = new PrintWriter("./data/game4.bb");
String fen;
while ((fen = br.readLine()) != null) {
createBoards(fen);
out.println(printBoards());
}
br.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Main main = new Main();
main.buildBoards();
}
}