So, here is the full code:
enum Color {none=0,red=1,black=2};
enum sColor {black=0,white=1};
class Square {
public:
this(Color color, sColor Scolor) {
this.color = color;
this.Scolor = Scolor;
}
Color color;
sColor Scolor;
}
import std.stdio;
void cPrintboard(Square[8][8] square)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
final switch(square[i][j].color) {
case Color.none:
write(" n ");
break;
case Color.red:
write(" r ");
break;
case Color.black:
write(" b ");
break;
}
}
writeln("");
}
writeln("");
}
void sPrintboard(Square[8][8] square) {
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
final switch(square[i][j].Scolor) {
case sColor.white:
write(" w ");
break;
case sColor.black:
write(" b ");
break;
}
}
writeln("");
}
writeln("");
}
bool isEven(int a)
{
return a&1;
}
void main()
{
Square[8][8] square;
for(int i=7;7>=0;i--)
{
for(int j=7;j>=0;j--)
{
if((isEven(i)&&isEven(j))^(!isEven(i)&&!isEven(j)))
square[i][j] = new Square(Color.none, sColor.white);
else if((!isEven(i)&&isEven(j))^(isEven(i)&&!isEven(j)))
square[i][j] = new Square(Color.none,sColor.black);
else
assert(false);
}
}
for(int i=2;i>=0;i--)
{
for(int j=7;i>=0;j--)
{
if((!isEven(i)&&isEven(j))^(isEven(i)&&!isEven(j)))
square[i][j].color = Color.red; //The program breaks here, with a range violation message
else
{
}
}
}
cPrintboard(square);
sPrintboard(square);
}
What am I doing wrong here? Is it the 'for' loop?