CBlair1986,
I'd like to be able to check for a X-in-a-row win on a
Y-by-Y board. I'd eventually like to be able to check
for a 10-in-a-row on a 50-by-50 board. Are there any
easy methods I could use, besides doing a check for
each possible win?
Well, if you only need to check for a win after someone moves, you
can just perform four checks for the up/down/diagonal1/diagonal2 cases
for up to X squares away from the last move.
If instead you don't know the last move and need a generic algorithm
to see if player A has a win, a simple one is to initialize a YxY array
to zeros, then loop over each row/column. For each square where player
A has played, increment the four squares: same row next column; next row
previous column; next row same column; and next row next column. Or,
put another way:
123
456
789
If player A has played in square 5, increment squares 6, 7, 8, and
9. After each increment, test for a value equal to X, indicating a
player A win. If you need to check for a player B win, you'll need to
use the same algorithm on a separate array. If you have a player C,
you'll need a third array, etc.
This algorithm is O(Y^2), so it won't scale well when Y becomes
large, but for a 50x50 board, your only talking about 2,500 iterations,
which should be fine.
I hope this helps.
- Warren Brown