Chessboard

- XLogo nested loops

This uses a nested loop to draw a chequer board. To draw a standard chessboard, use an Order of 8.

To New
  # set default screen, pen and turtle values
  ResetAll SetScreenSize [400 400] HideTurtle
  SetSC Black SetPC Green SetPS 1 PenUp
End

To GridSq :Order :Side
  # draw tile at each column x row position
  LocalMake "Offset (1+:Order)/2
  For (List "Col 1 :Order) [
    For (List "Row 1 :Order) [
      SetXY :Side*(:Col-:Offset) :Side*(:Row-:Offset)
      Tile :Col :Row :Side] ]
End

To Tile :Col :Row :Side
  # draw black or white filled square and label (col row)
  If Even? (:Col+:Row) [SetPC Black] [SetPC White]
  Square :Side-1 Fill
  SetPC Gray Label Word :Col :Row Wait 4
End

To Even? :Num
  # return 'true' if Num even, else return 'false'
  If (Mod :Num 2)=0 [Output "True] [Output "False]
End

To Square :Side
  # square (side x side) drawn from centre (tp)
  Back :Side/2 Right 90 Back :Side/2 PenDown
  Repeat 4 [
    Forward :Side Left 90]
  PenUp Forward :Side/2 Left 90 Forward :Side/2     # r2c
End

To Go :Order
  New SetFontJustify [1 1] Make "Board 320
  SetPC Gray Square :Board+12 Fill
  GridSq :Order Int :Board/:Order
End

An alternative tile. Copy and paste into XLogo editor and rename 'Tile'.

To TileAlt :Col :Row :Side
  # draw light or dark border square
  SetH 0 If Even? (:Col+:Row) [
    Left 8 SetPC [0 0 64] Square 0.85*:Side Fill
    SetPC [229 229 255] Square 0.75*:Side Fill] [    # else
    Right 8 SetPC [229 229 255] Square 0.85*:Side Fill
    SetPC [0 0 64] Square 0.75*:Side Fill]
End

Drain
Chessboard

Procedures blue
Variables pink
Comments green
Library gray