# How to make a resizable chess board?

For some reason I need to create a chess board. I can create a chess board by following command:

Graphics[{
EdgeForm[Thick], Black, Rectangle[{0, 0}],
EdgeForm[Thick], White, Rectangle[{1, 0}],
EdgeForm[Thick], , Black, Rectangle[{2, 0}],

EdgeForm[Thick], White, Rectangle[{0, 1}],
EdgeForm[Thick], Black, Rectangle[{1, 1}],
EdgeForm[Thick], White, Rectangle[{2, 1}],

EdgeForm[Thick], Black, Rectangle[{0, 2}],
EdgeForm[Thick], White, Rectangle[{1, 2}],
EdgeForm[Thick], , Black, Rectangle[{2, 2}],

}]


Problem is it has to be resizable (Manipulate command). And I should put the numbers for columns and rows. I am going to give one parameter such as board size. The code will generate the board. I believe there is a code for that, but I couldn't find on the internet. Thanks for the help.

This is an example, chess board. Manipulate[MatrixPlot[Table[Mod[i + j, 2], {i, 1, n}, {j, 1, n}], ColorFunction -> "Monochrome"], {{n, 8}, 1, 20}] Nice and simple.

To make it a little more terse we can use Array in place of Table:

Manipulate[MatrixPlot[Plus ~Array~ {n, n} ~Mod~ 2, ColorFunction -> "Monochrome"], {{n, 8}, 1, 20}]


With correct column numbering, thanks to a shameless steal from Kuba:

Manipulate[
MatrixPlot[Table[Mod[i + j, 2], {i, 1, n}, {j, 1, n}],
ColorFunction -> "Monochrome",
FrameTicks -> {Range@n,Transpose[{#, FromCharacterCode /@ (# + 96)} &[Range[n]]]}], {{n, 8}, 1, 20}]

• Thank you so much for the code. :) Now, I need to put queen pictures some of the squares. Is there any quick way to do it? – forumcash May 7 '14 at 20:25
• You could use Show[] – nickjamesuk May 7 '14 at 20:28
• @user14114 \[WhiteQueen] and \[BlackQueen] are the characters you need. – Sjoerd C. de Vries May 7 '14 at 20:59
• This answer doesn't quite do what O.P. asked/showed: still need letters rather than numbers to label columns; index origin for vertical labels to be at bottom; and squares gray instead of black (so that chess pieces would show when on the dark squares). – murray Sep 2 '14 at 14:47
• @murray The OP states, "And I should put the numbers for columns and rows." And this answer was accepted. The image the OP used as an example is taken from the web, I would guess, and does not represent a strict requirement. – Michael E2 Sep 2 '14 at 15:31

For even n:

MatrixPlot[
PlotTheme -> "Monochrome"] • Clever use of ArrayPad! – Simon Woods Sep 2 '14 at 19:31
• @eldo,Can your solution extend to other integer like 5,6,9 etc? – xyz Sep 12 '14 at 6:56
• @ShutaoTANG I tried some alternative approaches where Method 2 uses ArrayPad while Method 1 tries to be as succint as possible, mathematica.stackexchange.com/a/95577/2000. Method 1 has a similar issue as with eldo such that the colour traversal by one due to different oddity. Method 2 does not have this issue. – hhh Sep 26 '15 at 23:14

cb[n_Integer /; n > 0] := MatrixPlot@SparseArray[{i_, j_} :> Mod[i + j, 2], {n, n}]

cb For those who desire a more traditional board:

Block[{n = 8},
MatrixPlot[
SparseArray[{i_, j_} :> Mod[1 + i + j, 2], {n, n}],
ColorFunction -> GrayLevel,
FrameTicks -> {
{#, #} &@ Table[{i, n - i + 1}, {i, n}],
{#, #} &@ Table[{i, FromCharacterCode[ToCharacterCode["a"] + i - 1]}, {i, n}]},
FrameStyle -> Bold
]
]


Thanks to @eldo, someone answered this question and bumped it to the top of the stack. I had seen it about an hour before when I referred @eldo to it, but I ignored it until it came to the top of the stack. Now we have several answers to both, each of which might be an answer to the other.

• You should of course notice that in chess one uses different labels. – Alexey Bobrick Sep 2 '14 at 15:12
• @AlexeyBobrick I did notice. But I also noticed the accepted answer. Which does the OP want? What is the standard chess labelling for a 30 x 30 board? – Michael E2 Sep 2 '14 at 15:19
• Well, I don't know, but a chess board is a chess board:) In the question example it is ok. – Alexey Bobrick Sep 2 '14 at 15:31
• ArrayMesh[] can be used in newer versions as well: ArrayMesh[SparseArray[{i_, j_} :> Mod[i + j, 2], {8, 8}], MeshCellStyle -> Black] – J. M.'s technical difficulties Dec 11 '16 at 7:38

This is one of those problems that has many solutions:

cb[n_] := MatrixPlot[
Range@ConstantArray[n, n] + Range[n],
ColorFunction -> (GrayLevel@Mod[1 + #, 2] &),
ColorFunctionScaling -> False,
FrameTicks -> {
{#, #} &@ Table[{i, n - i + 1, 0}, {i, n}],
{#, #} &@ Table[{i, FromCharacterCode[ToCharacterCode["a"] + i - 1], 0}, {i, n}]},
FrameStyle -> Bold]

cb Other ways to generate the matrix:

Apply[Plus, Outer[List, Range[n], Range[n]], {2}],
Total[Outer[List, Range[n], Range[n]], {-1}],


### My solution

ChessBoard[n_?IntegerQ] := MatrixPlot[
Flatten[
Table[
{Flatten@Table[{1, 0}, {n}],
RotateLeft[Flatten@Table[{1, 0}, {n}], 1]}, {n}], 1],
ColorFunction -> "Monochrome"]

Manipulate[ChessBoard[n], {n, 2, 5, 1}] Method 1. 63 chars (and 39 without beautifying to black-white)

This considers the system as graph traversal where the number of steps is the sum and each step you wear different suit. Method 2. 87 chars with Array manipulation (63)

I remixed Eldo's idea about reflection, better idea is probably to find a command to repeat a pattern like "repeat 10 N amount of times and fill the array with the content" and the good side of this method is that you can very easily get different kinds of boards by changing oddity and to be enough enterntaining: Method 2 results into jail stripes with even number :) Yet another solution, inclusive labeling.

Manipulate[
MatrixPlot[Table[If[EvenQ[i + j], 1, 0], {i, 1, n}, {j, 1, n}],
FrameTicks -> Transpose[{#, {#, CharacterRange["A", "Z"][[#]]}} & /@ Range[n]],
PlotTheme -> "Monochrome"], {{n, 8}, 1, 26}] Mod[Array[Plus, {9, 9}], 2] // Image // ImageResize[#, 300] & Mod[Array[Plus, {9, 9}], 2] // Raster // Graphics (* or *)
Graphics @ Raster[Mod[+##, 2]& ~ Array ~ {9, 9}] 