The highlighted statements show how array indexes themselves can be key parts of the processing. Use the debugging skills you have learned to trace the values of the program statements to understand exactly what this section of the program is doing.
To understand the code, keep in mind that the variable iMove is a value from 1 to 9 that has to be 'translated' into a position in the 3 by 3 grid for either X or 0. The arrays are declared as:
~~~~~~~~~~~~~~~~~~~~~~~~~
Dim iXPos(3, 3) As Short Dim iOPos(3, 3) As Short
~~~~~~~~~~~~~~~~~~~~~~~~~
As an example of how a difference between VB 6 and VB.NET works out in an actual program, the arrays here have one more element than necessary. As you learn in Chapter 11 of the book, VB.NET uses O based arrays so these arrays can actually contain 16 elements from (0, 0) to (3, 3). The VB 6 version was the right size because VB 6 uses 1 based arrays from (1, 1) to (3, 3). But it's actually a lot easier in this example to simply disregard the unnecessary array elements. As an exercise for you to work on ...
What would you have to change in the program to use a VB.NET 0-based, 9 element array?
If you try this problem, you'll probably convince yourself that leaving it the way it is works a lot better. And another interesting fact that the book doesn't mention (which leads us right into the next section) is that Collections can be specified as 1-based in VB.NET ... although Microsoft advises against it.

