I've been learning Python lately, and I thought I should let everyone take a look at a very primitive program that I did. I thought that maybe it could help a few newbies, eh? Since I'm used to C, it uses a list within a list to simulate a two dimmensional array.

/msg Nanosecond with bugs.

```"""Tic Tac Toe v0.2 by Nanosecond in 2001 in Python

-TODO: Add a second method for Connect 4 like play
-TODO: Make it so not entering input doesn't crash it
-TODO: Make it so entering non-integer input doesn't crash it
-TODO: Figure out why NE to SW doesn't work
-TODO: Figure out why doesn't detect win if height, width, and row are equal

/msg Nanosecond if you figure out any of these TODOs =)"""

def space_calc(boardsize):
"Calculates number of spaces to use when drawing board."
i, x = 10, 1
while boardsize > i:
x = x + 1
i = i * 10
return x

def square_calc(pmove, board):
"Calculates pmove into two integers that can be used, example: board[x][y]"
if pmove >= (len(board) * len(board)) or pmove < 0:
return (-1, -1)		#Invalid Board Location
return divmod(pmove, len(board))

def check_square(board, pmove):
"Takes square_calc tuple and checks if already taken."
if pmove == -1 or pmove == -1:
return 0
#Out of Range
if type(board[pmove][pmove]) == type(0):
return 1
#Already Taken
elif type(board[pmove][pmove]) != type(0):
return 0
#No Problem
print "Entering the twilight zone!"
return 0

#Function to work on:
def checkwin(board, stats):
"Checks to see if a player has won."
#Stats is a tuple
#Stats player
#Stats How many in a row required
i, j, k, x = 0, 0, 0, 0
for i in range(len(board)):
for j in range(len(board[i])):
if type(board[i][j]) == type(0): #Check if taken
break
if j+stats < len(board):	#Check range
#Horizantal
for k in range(stats):
if board[i][j+k] == stats:
x = x + 1
else:
break
if x == stats:
return 1
x = 0
if i+stats < len(board):
#Vertical
for k in range(stats):
if board[i+k][j] == stats:
x = x + 1
else:
break
if x == stats:
return 1
x = 0
if i+stats < len(board) and j+stats < len(board):
#NW to SE
for k in range(stats):
if board[i+k][j+k] == stats:
x = x + 1
else:
break
if x == stats:
return 1
x = 0
if i+stats < len(board) and j-stats in range(len(board)):
#NE to SW
print "test"
for k in range(stats):
if board[i+k][j-k] == stats:
x = x + 1
else:
break
if x == stats:
return 1
x = 0
return 0

def printboard(board, boardspace):
"Function for printing the board onto the screen."
i, j, k = 0, 0, 0
print	#Has to be here to show up correctly out of IDLE, wierd
for i in range(len(board)):
print "|",
for j in range(len(board[i])):
print ("%%%ds |" % boardspace) % board[i][j],
print
print

height, width, row = 3, 3, 3			# Default Values
player, player1, player2 = 'X', 'X', 'O'	#Player is the current player
while 1:
height = int(raw_input("Please enter height: "))
width = int(raw_input("Please enter width: "))
row = int(raw_input("How many in a row to win: "))
if height < 0 or width < 0 or row < 2:
print "Error, Try Again."
else:
break
print	#Just for spacing
print

####Begin Board Creation####
board = []				# Init board
for i in range(height):
board.append( * width)	# Create board
i, j, k = 0, 0, 0
for i in range(len(board)):		# Number board
for j in range(len(board[i])):
board[i][j] = k+j
k = k+j+1
del i, j				# Clean up
####End Board Creation####

printboard(board, space_calc(height * width))
k = ()
gameend = 0

######Begin Game Loop######

while not (gameend):
pmove = 0
while 1:
print "Go Player " + player + ": ",
pmove = int(raw_input())
if (check_square(board, square_calc(pmove, board))):
break
k = square_calc(pmove, board)
board[k][k] = player
if checkwin(board, (player, row)) == 1:
printboard(board, space_calc(height * width))
print "\nPlayer " + player + " wins!"
gameend = 1
break
if (player == player1):
player = player2
elif (player == player2):
player = player1
else:
print "ERROR, Player equals non-player variable."
break
printboard(board, space_calc(height * width))

######End Game Loop########
```

Log in or register to write something here or to contact authors.