// WOOOOOO: This comment makes this code my most heavily commented code
// ever. Have fun understanding it ^_^

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "ttt.h"
#include "funcs.cpp"

playerdefinition player[PLAYER_COUNT];

int main()
{
	srand(static_cast<unsigned>(time(0)));
	int board[BOARD_WIDTH][BOARD_HEIGHT];
	int running = 0, x = 0, y = 0, turn = 0, movegood = 0, victory = 0, pnum = 0;
	char letter, blah;
	location moveloc;

	for (x = 0; x < BOARD_HEIGHT; x++)
	{
		for (y = 0; y < BOARD_WIDTH; y++)
		{
			board[x][y] = 0;
		}
	}

	printf("TIC TAC TOE\r\n");

		for (pnum = 0; pnum < PLAYER_COUNT; pnum++)
		{
			player[pnum].ptype = 0;
			while (player[pnum].ptype < 1 || player[pnum].ptype > 2)
			{
				printf("Player %d, (H)uman or (C)omputer? ", pnum);
				scanf("%c%c", &letter, &blah);
				if (letter == 'H' || letter == 'h') {
					player[pnum].ptype = PLAYER_HUMAN;
					printf("Player %d is human.\n", pnum);
				} else if (letter == 'C' || letter == 'c') {
					player[pnum].ptype = PLAYER_COMPUTER;
					printf("Player %d is computer.\n", pnum);
				} else {
					printf("Invalid player type.\n");
				}
			}
		}

		letter = ' ';

		while (!(player[0].value == CHAR_X || player[0].value == CHAR_O))
		{
			printf("Is Player 0 using X or O as a marker? ");
			scanf("%c%c", &letter, &blah);
			if (letter == 'X' || letter == 'x') {
				player[0].value = CHAR_X;
				printf("Player 0 using 'X' (%d).\n", CHAR_X);
			} else if (letter == 'O' || letter == 'o') {
				player[0].value = CHAR_O;
				printf("Player 0 using 'O' (%d).\n", CHAR_O);
			} else {
				printf("Invalid character.\n");
			}
		}

		if (player[0].value == CHAR_X)
		{
			printf("Player 1 using 'O' (%d).\n", CHAR_O);
			player[1].value = CHAR_O;
		} else {
			printf("Player 1 using 'X' (%d).\n", CHAR_X);
			player[1].value = CHAR_X;
		}
		
		printf("\n\nFinally, we start the game!\n\n");

	running = 1;

	turn = 0;

	while (running!=0)
	{
		printboard(board);
		printf("Player %d's turn.\n\n", turn);

		if (player[turn].ptype == PLAYER_COMPUTER)
		{
				moveloc = makemove(board);
				board[moveloc.x][moveloc.y] = player[turn].value;
				printf("%d,%d = %d\n", moveloc.x, moveloc.y, player[pnum].value);
				goto NextPass;
		}

		movegood = 0;

		while (movegood == 0)
		{
			x = -1;
			y = -1;
			letter = ' ';
			while (x < 0 || x > 2)
			{
				x = -1;
				printf("Please enter the X location (1-3): ");
				scanf("%d", &x);
				x -= 1;
				if (x < 0 || x > 2) {printf("Invalid X location.");}
			}
	
			while (y < 0 || y > 2)
			{
				y = -1;
				printf("Please enter the Y location (1-3): ");
				scanf("%d", &y);
				y -= 1;
				if (y < 0 || y > 2) {printf("Invalid Y location.\n");}
			}
	
			movegood = 1;
			if (board[x][y] != 0) {movegood = 0;
                              printf("That spot is already taken.\n");}

		}

		board[x][y] = player[turn].value;

		NextPass:

		if ((victory = checkwin(board))!=0)
		{
			if (victory == -1)
			{
				printf("\n\nGame tied.\n\n");
				return 0;
			}
			else
			{
				for (pnum = 0; pnum < PLAYER_COUNT; pnum++)
				{
					if (player[pnum].value == victory) {
						printf("\n\nPlayer %d won! Congratulations!\n\n", pnum);
						return 0;
					}
				}
			}
		}

		turn++;
		if (turn == PLAYER_COUNT) {turn = 0;}
	}

}
