// File: DaSnek[P]TicTacToe-AI/game.cpp
// Function: main
int main() {
	Board b;
//note to self:
//please rewrite this entire main function, 
	while (true) {
		int w = b.check_for_win();

		if (b.check_for_tie() && !w) 
			break;
		
		if (w) {
			std::cout << (w == AI ? 'X' : 'O') << " won" << std::endl;
			b.print_board();
			exit(0);
		}

		int row, col;

		b.print_board();
		std::cout << std::endl;
		printf("%c's turn: ", b.get_cur_player() == AI ? 'X' : 'O');

		if (b.get_cur_player() == AI) {
			std::cout << std::endl;
			Coor c = make_move(b);
			b.place_move(c.i, c.j);
		} else {
			std::cin.clear();
			std::cin >> row >> col;
			if (!b.place_move(row, col)) 
				std::cout << "move invalid" << std::endl;
		}
	}

	b.print_board();
	std::cout << "Tied" << std::endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movl $0x0, -0x4(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x15d0
jmp 0x132d
leaq -0x28(%rbp), %rdi
callq 0x16a0
movl %eax, -0x74(%rbp)
jmp 0x133b
movl -0x74(%rbp), %eax
movl %eax, -0x2c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x1a50
movb %al, -0x75(%rbp)
jmp 0x134f
movb -0x75(%rbp), %al
testb $0x1, %al
jne 0x1358
jmp 0x1374
cmpl $0x0, -0x2c(%rbp)
jne 0x1374
jmp 0x156c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x15bd
cmpl $0x0, -0x2c(%rbp)
je 0x13de
movl -0x2c(%rbp), %eax
subl $0x1, %eax
sete %al
movzbl %al, %ecx
movl %ecx, %eax
leal 0x4f(%rax,%rax,8), %esi
movq 0x5c3d(%rip), %rdi      # 0x6fd0
callq 0x1100
movq %rax, -0x80(%rbp)
jmp 0x139e
movq -0x80(%rbp), %rdi
leaq 0x2c5b(%rip), %rsi      # 0x4004
callq 0x10c0
movq %rax, -0x88(%rbp)
jmp 0x13b7
movq -0x88(%rbp), %rdi
movq 0x5bfb(%rip), %rsi      # 0x6fc0
callq 0x10f0
jmp 0x13cc
leaq -0x28(%rbp), %rdi
callq 0x1ae0
jmp 0x13d7
xorl %edi, %edi
callq 0x1110
leaq -0x28(%rbp), %rdi
callq 0x1ae0
jmp 0x13e9
movq 0x5be0(%rip), %rdi      # 0x6fd0
movq 0x5bc9(%rip), %rsi      # 0x6fc0
callq 0x10f0
jmp 0x13fe
leaq -0x28(%rbp), %rdi
callq 0x1c00
movl %eax, -0x8c(%rbp)
jmp 0x140f
movl -0x8c(%rbp), %eax
subl $0x1, %eax
sete %al
movzbl %al, %ecx
movl %ecx, %eax
leal 0x4f(%rax,%rax,8), %esi
leaq 0x2bde(%rip), %rdi      # 0x4009
xorl %eax, %eax
callq 0x1030
jmp 0x1434
leaq -0x28(%rbp), %rdi
callq 0x1c00
movl %eax, -0x90(%rbp)
jmp 0x1445
movl -0x90(%rbp), %eax
cmpl $0x1, %eax
jne 0x14ca
movq 0x5b79(%rip), %rdi      # 0x6fd0
movq 0x5b62(%rip), %rsi      # 0x6fc0
callq 0x10f0
jmp 0x1465
leaq -0x70(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1c10
jmp 0x1474
leaq -0x70(%rbp), %rdi
callq 0x37e0
movq %rax, -0x98(%rbp)
jmp 0x1486
movq -0x98(%rbp), %rax
movq %rax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x1c50
movl -0x4c(%rbp), %esi
movl -0x48(%rbp), %edx
leaq -0x28(%rbp), %rdi
callq 0x1c70
jmp 0x14ab
jmp 0x1567
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x1c50
jmp 0x15bd
movq 0x5b0f(%rip), %rdi      # 0x6fe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
xorl %esi, %esi
callq 0x1160
jmp 0x14e4
movq 0x5af5(%rip), %rdi      # 0x6fe0
leaq -0x40(%rbp), %rsi
callq 0x1080
movq %rax, -0xa0(%rbp)
jmp 0x14fd
movq -0xa0(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x1080
jmp 0x150f
movl -0x40(%rbp), %esi
movl -0x44(%rbp), %edx
leaq -0x28(%rbp), %rdi
callq 0x1c70
movb %al, -0xa1(%rbp)
jmp 0x1526
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x1565
jmp 0x1532
movq 0x5a97(%rip), %rdi      # 0x6fd0
leaq 0x2ad5(%rip), %rsi      # 0x4015
callq 0x10c0
movq %rax, -0xb0(%rbp)
jmp 0x154e
movq -0xb0(%rbp), %rdi
movq 0x5a64(%rip), %rsi      # 0x6fc0
callq 0x10f0
jmp 0x1563
jmp 0x1565
jmp 0x1567
jmp 0x132b
leaq -0x28(%rbp), %rdi
callq 0x1ae0
jmp 0x1577
movq 0x5a52(%rip), %rdi      # 0x6fd0
leaq 0x2a9d(%rip), %rsi      # 0x4022
callq 0x10c0
movq %rax, -0xb8(%rbp)
jmp 0x1593
movq -0xb8(%rbp), %rdi
movq 0x5a1f(%rip), %rsi      # 0x6fc0
callq 0x10f0
jmp 0x15a8
leaq -0x28(%rbp), %rdi
callq 0x1c50
movl -0x4(%rbp), %eax
addq $0xc0, %rsp
popq %rbp
retq
leaq -0x28(%rbp), %rdi
callq 0x1c50
movq -0x38(%rbp), %rdi
callq 0x1180
nop