display | more...

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[1])) 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[0] == -1 or pmove[1] == -1:
		return 0
		#Out of Range
	if type(board[pmove[0]][pmove[1]]) == type(0):
		return 1
		#Already Taken
	elif type(board[pmove[0]][pmove[1]]) != 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[0] player
	#Stats[1] 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[1] < len(board[0]):	#Check range
				#Horizantal
				for k in range(stats[1]):
					if board[i][j+k] == stats[0]:
						x = x + 1
					else:
						break
				if x == stats[1]:
					return 1
				x = 0
			if i+stats[1] < len(board):
				#Vertical
				for k in range(stats[1]):
					if board[i+k][j] == stats[0]:
					   x = x + 1
					else:
						break
				if x == stats[1]:
					return 1
				x = 0
			if i+stats[1] < len(board) and j+stats[1] < len(board[0]):
				#NW to SE
				for k in range(stats[1]):
					if board[i+k][j+k] == stats[0]:
					   x = x + 1
					else:
						break
				if x == stats[1]:
					return 1
				x = 0
			if i+stats[1] < len(board) and j-stats[1] in range(len(board[0])):
				#NE to SW
				print "test"
				for k in range(stats[1]):
					if board[i+k][j-k] == stats[0]:
						x = x + 1
					else:
						break
				if x == stats[1]:
					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([0] * 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[0]][k[1]] = 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.