# Python 2, <s>143</s> <s>131</s> 107 Bytes

<!-- language-all: lang-py -->

This doesn't use any real fancy tricks, <s>except list transposition to make index access easier</s> since we can print the board transposed. Definitely not done with this just yet. Moves are taken as 0-based numbers. Byte count comes before commenting. 

Jonathan Allan had a better approach to building the board, mine is improved slightly since the slicing is a bit shorter `[-j:] -> [:j]` and the list comprehension helps shorten printing.

    i,j,k=input()                                     # split up the input
    t=0                                               # keep track of whose move it is
    g=i*['']                                          # board init
    for b in k:g[b]+='XO'[t%2];t+=1                   # read moves sequentially, place pieces
    print'\n'.join(''.join((m+'.'*j)[:j])for m in g)  # build the board

Example Input: `[7, 6, [3, 3, 4, 4, 5, 6, 2]]`

Example Output:


[Try it online][1] or [view all test cases][2].

  [1]: https://repl.it/DnAQ/17
  [2]: https://repl.it/DnAQ/16