from visual import *

def grid(n=5, ds = 1., gridcolor = (.6, .6, .6)):
    assert n > 2, "n must be > 2"
    j=n/2
    k=j*2
    if k==n: offset=0
    else: offset = ds/2.
    grid = curve(color = gridcolor)
    for z in arange (-(j+offset)*ds, (j+offset+1)*ds, ds):
        for x in arange(-(j+offset)*ds, (j+offset+1)*ds, ds):
            grid.append(pos=(x, 0, z))
            if x == (j+offset) and not z==(j+offset):
                grid.append (pos=(-(j+offset)*ds,0,z))
                grid.append (pos=(-(j+offset)*ds,0,z+1))
    grid.append(pos=((j+offset)*ds,0,-(j+offset)*ds))
    grid.append (pos=(-(j+offset-1)*ds,0,-(j+offset)*ds))

    for x in arange (-(j+offset)*ds, (j+offset)*ds, ds):
        for z in arange (-(j+offset)*ds, (j+offset+1)*ds, 1):
            grid.append (pos=(x, 0, z))
            if z == (j+offset):
                grid.append (pos=(x,0,-(j+offset)*ds))
                grid.append (pos=(x+1, 0, -(j+offset)*ds))
    return grid

def win():    
    wins1=[]
    wins2=[]
    wins3=[]
    wins4=[]
    wins=[]

    # planar rows & columns
    for y in arange (-2,2,1):
        z=-2
        for x in arange(-2, 2,1):
            col=[(x,y,z), (x,y,z+1), (x,y,z+2), (x,y,z+3)]
            wins1.append(col)
        x=-2
        for z in arange(-2,2,1):
            row=[(x,y,z), (x+1,y,z), (x+2,y,z),(x+3,y,z)]
            wins1.append(row)

##    print "wins1"    
##    for a in arange(0,len(wins1)):
##        print wins1[a]

    # planar diagonals
    x=-2
    z=-2
    for y in arange (-2,2,1):
        wins2.append([(x,y,z), (x+1,y,z+1), (x+2,y,z+2), (x+3,y,z+3)])
        wins2.append([(x,y,z+3), (x+1,y,z+2), (x+2,y,z+1), (x+3,y,z)])

##    print "  "
##    print "wins2"
##    for a in arange(0,len(wins2)):
##        print wins2[a]

    y=-2
    # vertical columns
    for x in arange (-2,2,1):
        for z in arange (-2,2,1):
             wins3.append([(x,y,z),(x,y+1,z), (x,y+2,z), (x,y+3,z)])

##    print "  "
##    print "wins3"
##    for a in arange(0,len(wins3)):
##        print wins3[a]

    # 3d diagonals
    x=-2
    y=-2
    z=-2
    wins4.append([(x,y,z), (x+1, y+1, z+1), (x+2, y+2, z+2), (x+3,y+3,z+3)])
    z=1
    wins4.append([(x,y,z), (x+1, y+1, z-1), (x+2, y+2, z-2), (x+3,y+3,z-3)])
    x=1
    z=-2
    wins4.append([(x,y,z), (x-1, y+1, z+1), (x-2, y+2, z+2), (x-3,y+3,z+3)])
    z=1
    wins4.append([(x,y,z), (x-1, y+1, z-1), (x-2, y+2, z-2),(x-3,y+3,z-3)])

    # 3d slant
    z=-2
    y=-2
    for x in arange(-2,2,1):
        wins4.append([(x,y,z), (x,y+1,z+1), (x,y+2,z+2), (x,y+3,z+3)])
        wins4.append([(x,y,z+3), (x,y+1,z+2), (x,y+2,z+1), (x,y+3,z)])
    x=-2
    for z in arange(-2,2,1):
        wins4.append([(x,y,z), (x+1,y+1,z), (x+2,y+2,z), (x+3,y+3,z)])
        wins4.append([(x+3,y,z), (x+2,y+1,z), (x+1,y+2,z), (x,y+3,z)])
        
##    print "  "
##    print "wins4"
##    for a in arange(0,len(wins4)):
##        print wins4[a]

    wins=wins1+wins2+wins3+wins4
    return wins

##a=win()
print " "
print "Run 'tictac.py' to play 3D tictactoe."

