File size: 10.23Kb
<?php
// Validate that the human has only submitted ONE move
// Make sure it is not the first turn either
if ($_POST['turn'] > 0)
{
$prevmove = $_POST['movecount'] + 1;
$currentmove = $a1 + $a2 + $a3 + $a4 + $a5 + $a6 + $a7 + $a8 + $a9;
if ($currentmove != $prevmove)
{
echo "CHEATER! You can only move one square a turn, and you must move! Restart!";
$won = 'true';
}
}
// Check to see if the HUMAN has won, if so display the message
// Make sure the human did not cheat first
if ($won != true)
{
if ($a1 == 1 and $a2 == 1 and $a3 == 1 or $a1 == 1 and $a5 == 1 and $a9 == 1 or $a1 == 1 and $a4 == 1 and $a7 == 1 or $a2 == 1 and $a5 == 1 and $a8 == 1 or $a3 == 1 and $a6 == 1 and $a9 == 1 or $a3 == 1 and $a5 == 1 and $a7 == 1 or $a4 == 1 and $a5 == 1 and $a6 == 1 or $a7 == 1 and $a8 == 1 and $a9 == 1)
{
echo "Congratz! You have won the game! <br />";
$won = 'true';
// For the counter
$win = 'true';
}
}
// Check to see if the game is a draw
if ($a1 > 0 and $a2 > 0 and $a3 > 0 and $a4 > 0 and $a5 > 0 and $a6 > 0 and $a7 > 0 and $a8 > 0 and $a9 > 0 and $won != true)
{
echo "Tie!";
$won = 'true';
// For the counter
$tie = 'true';
}
// If it is the first turn and the computer is going first, initiate strategy
if ($_POST['turn'] == NULL and $_POST['compfirst'] == 'true')
{
$i = 2;
$seti = 'false';
$move = rand(1, 4);
if ($move == 1)
{
$a5 = 2;
}
elseif ($move == 2)
{
$a8 = 2;
}
elseif ($move == 3)
{
$a3 = 2;
}
elseif ($move == 4)
{
$a2 = 2;
}
}
// If it is the first turn, and Player went first, initiate strategy
elseif ($_POST['turn'] == 1 and $_POST['compfirst'] != 'true')
{
// If the human takes anything but the center, the computer will move center
if ($a1 == 1 or $a2 == 1 or $a3 == 1 or $a4 == 1 or $a6 == 1 or $a7 == 1 or $a8 == 1 or $a9 == 1 and $a5 != 1 and $a5 != 2)
{
$a5 = 2;
}
// If the human takes center, the computer will take a corner
elseif ($a5 == 1)
{
if ($a1 != 1 and $a1 != 2)
{
$a1 = 2;
}
elseif ($a3 != 1 and $a3 != 2)
{
$a3 = 2;
}
elseif ($a7 != 1 and $a7 != 2)
{
$a7 = 2;
}
elseif ($a9 != 1 and $a7 != 2)
{
$a9 = 2;
}
}
}
// If it is not the first turn, initiate strategy
// Make sure the player has NOT cheated and that the game is NOT won already
if ($_POST['turn'] > 1 and $won != 'true')
{
// Computer moves to complete a set of three if possible
if ($a2 == 2 and $a3 == 2 and $a1 != 2 and $a1 != 1 or $a5 == 2 and $a9 == 2 and $a1 != 2 and $a1 != 1 or $a4 == 2 and $a7 == 2 and $a1 != 2 and $a1 != 1)
{
$a1 = 2;
}
elseif ($a1 == 2 and $a3 == 2 and $a2 != 2 and $a2 != 1 or $a5 == 2 and $a8 == 2 and $a2 != 2 and $a2 != 1)
{
$a2 = 2;
}
elseif ($a1 == 2 and $a2 == 2 and $a3 != 2 and $a3 != 1 or $a6 == 2 and $a9 == 2 and $a3 != 2 and $a3 != 1 or $a5 == 2 and $a7 == 2 and $a3 != 2 and $a3 != 1)
{
$a3 = 2;
}
elseif ($a1 == 2 and $a7 == 2 and $a4 != 2 and $a4 != 1 or $a5 == 2 and $a6 == 2 and $a4 != 2 and $a4 != 1)
{
$a4 = 2;
}
elseif ($a1 == 2 and $a9 == 2 and $a5 != 2 and $a5 != 1 or $a3 == 2 and $a7 == 2 and $a5 != 2 and $a5 != 1 or $a2 == 2 and $a8 == 2 and $a5 != 2 and $a5 != 1 or $a4 == 2 and $a6 == 2 and $a5 != 2 and $a5 != 1)
{
$a5 = 2;
}
elseif ($a3 == 2 and $a9 == 2 and $a6 != 2 and $a6 != 1 or $a4 == 2 and $a5 == 2 and $a6 != 2 and $a6 != 1)
{
$a6 = 2;
}
elseif ($a1 == 2 and $a4 == 2 and $a7 != 2 and $a7 != 1 or $a9 == 2 and $a8 == 2 and $a7 != 2 and $a7 != 1 or $a3 == 2 and $a5 == 2 and $a7 != 2 and $a7 != 1)
{
$a7 = 2;
}
elseif ($a2 == 2 and $a5 == 2 and $a8 != 2 and $a8 != 1 or $a7 == 2 and $a9 == 2 and $a8 != 2 and $a8 != 1)
{
$a8 = 2;
}
elseif ($a1 == 2 and $a5 == 2 and $a9 != 2 and $a9 != 1 or $a7 == 2 and $a8 == 2 and $a9 != 2 and $a9 != 1 or $a3 == 2 and $a6 == 2 and $a9 != 2 and $a9 != 1)
{
$a9 = 2;
}
// Block opponent if two are aligned, and computer does not have two aligned
elseif ($a2 == 1 and $a3 == 1 and $a1 != 2 or $a5 == 1 and $a9 == 1 and $a1 != 2 or $a4 == 1 and $a7 == 1 and $a1 != 2)
{
$a1 = 2;
}
elseif ($a1 == 1 and $a3 == 1 and $a2 != 2 or $a5 == 1 and $a8 == 1 and $a2 != 2)
{
$a2 = 2;
}
elseif ($a1 == 1 and $a2 == 1 and $a3 != 2 or $a6 == 1 and $a9 == 1 and $a3 != 2 or $a5 == 1 and $a7 == 1 and $a3 != 2)
{
$a3 = 2;
}
elseif ($a1 == 1 and $a7 == 1 and $a4 != 2 or $a5 == 1 and $a6 == 1 and $a4 != 2)
{
$a4 = 2;
}
elseif ($a1 == 1 and $a9 == 1 and $a5 != 2 or $a3 == 1 and $a7 == 1 and $a5 != 2 or $a2 == 1 and $a8 == 1 and $a5 != 2 or $a4 == 1 and $a6 == 1 and $a5 != 2)
{
$a5 = 2;
}
elseif ($a3 == 1 and $a9 == 1 and $a6 != 2 or $a4 == 1 and $a5 == 1 and $a6 != 2)
{
$a6 = 2;
}
elseif ($a1 == 1 and $a4 == 1 and $a7 != 2 or $a9 == 1 and $a8 == 1 and $a7 != 2 or $a3 == 1 and $a5 == 1 and $a7 != 2)
{
$a7 = 2;
}
elseif ($a2 == 1 and $a5 == 1 and $a8 != 2 or $a7 == 1 and $a9 == 1 and $a8 != 2)
{
$a8 = 2;
}
elseif ($a1 == 1 and $a5 == 1 and $a9 != 2 or $a7 == 1 and $a8 == 1 and $a9 != 2 or $a3 == 1 and $a6 == 1 and $a9 != 2)
{
$a9 = 2;
}
// Attempt the split tactic if possible, ONLY ON THE SECOND TURN
elseif ($a1 == 2 and $a5 == 1 and $a9 < 1 and $_POST['turn'] == 2 or $a9 == 2 and $a5 == 1 and $a1 < 1 and $_POST['turn'] == 2)
{
if ($a9 < 1)
{
$a9 = 2;
}
elseif ($a1 < 1)
{
$a1 = 2;
}
}
elseif ($a3 == 2 and $a5 == 1 and $a7 < 1 and $_POST['turn'] == 2 or $a7 == 2 and $a5 == 1 and $a3 < 1 and $_POST['turn'] == 2)
{
if ($a7 < 1)
{
$a7 = 2;
}
elseif ($a3 < 1)
{
$a3 = 2;
}
}
// Attempt the triangle tactic if possible
elseif ($a2 == 2 and $a5 == 2 and $a1 < 1 or $a2 == 2 and $a5 == 2 and $a8 < 1 and $a3 < 1)
{
if ($a1 < 1)
{
$a1 = 2;
}
elseif ($a3 < 1)
{
$a3 = 2;
}
}
elseif ($a4 == 2 and $a5 == 2 and $a1 < 1 or $a4 == 2 and $a5 == 2 and $a6 < 1 and $a7 < 1)
{
if ($a1 < 1)
{
$a1 = 2;
}
elseif ($a7 < 1)
{
$a7 = 2;
}
}
elseif ($a8 == 2 and $a5 == 2 and $a7 < 1 or $a8 == 2 and $a5 == 2 and $a3 > 1 and $a9 < 1)
{
if ($a7 < 1)
{
$a7 = 2;
}
elseif ($a9 < 1)
{
$a9 = 2;
}
}
elseif ($a6 == 2 and $a5 == 2 and $a3 < 1 or $a6 == 2 and $a5 == 2 and $a4 < 1 and $a9 < 1)
{
if ($a3 < 1)
{
$a3 = 2;
}
elseif ($a9 < 1)
{
$a9 = 2;
}
}
elseif ($a1 == 2 and $a2 < 1 and $a5 == 2 and $a3 < 1)
{
$a3 = 2;
}
elseif ($a3 == 2 and $a2 < 1 and $a5 == 2 and $a1 < 1)
{
$a1 = 2;
}
elseif ($a1 == 2 and $a4 < 1 and $a5 == 2 and $a7 < 1)
{
$a7 = 2;
}
elseif ($a7 == 2 and $a4 < 1 and $a5 == 2 and $a1 < 1)
{
$a1 = 2;
}
elseif ($a7 == 2 and $a8 < 1 and $a5 == 2 and $a9 < 1)
{
$a9 = 2;
}
elseif ($a9 == 2 and $a8 < 1 and $a5 == 2 and $a7 < 1)
{
$a7 = 2;
}
elseif ($a3 == 2 and $a6 < 1 and $a5 == 2 and $a9 < 1)
{
$a9 = 2;
}
elseif ($a9 == 2 and $a6 < 1 and $a5 == 2 and $a3 < 1)
{
$a3 = 2;
}
// Move to edge if the opponent is doing the 'split' tactic
elseif ($a1 == 1 and $a5 == 2 and $a9 == 1 or $a3 == 1 and $a5 == 2 and $a7 == 1)
{
if ($a2 != 1 and $a2 != 2)
{
$a2 = 2;
}
elseif ($a4 != 1 and $a4 != 2)
{
$a4 = 2;
}
elseif ($a6 != 1 and $a6 != 2)
{
$a6 = 2;
}
elseif ($a8 != 1 and $a8 != 2)
{
$a8 = 2;
}
}
// If opponent is doing the corner split, take the correct corner
elseif ($a2 == 1 and $a4 == 1 and $a1 < 1)
{
$a1 = 2;
}
elseif ($a2 == 1 and $a6 == 1 and $a3 < 1)
{
$a3 = 2;
}
elseif ($a4 == 1 and $a8 == 1 and $a7 < 1)
{
$a7 = 2;
}
elseif ($a8 == 1 and $a6 == 1 and $a9 < 1)
{
$a9 = 2;
}
// In case that the computer went first, did not take center, and human did not take center, take center
elseif ($a5 != 1 and $a5 != 2)
{
$a5 = 2;
}
// Move to side if the 'special' is being used by the human ONLY ON TURN 2
elseif ($a2 == 1 and $a9 == 1 and $a4 < 1 and $_POST['turn'] == 2 or $a2 == 1 and $a7 == 1 and $a6 < 1 and $_POST['turn'] == 2 or $a8 == 1 and $a1 == 1 and $a6 < 1 and $_POST['turn'] == 2 or $a8 == 1 and $a3 == 1 and $a4 < 1 and $_POST['turn'] == 2)
{
if ($a9 == 1 and $a4 < 1)
{
$a4 = 2;
}
elseif ($a7 == 1 and $a6 < 1)
{
$a6 = 2;
}
elseif ($a1 == 1 and $a6 < 1)
{
$a6 = 2;
}
elseif ($a3 == 1 and $a4 < 1)
{
$a4 = 2;
}
}
elseif ($a4 == 1 and $a3 == 1 and $a8 < 1 and $_POST['turn'] == 2 or $a4 == 1 and $a9 == 1 and $a2 < 1 and $_POST['turn'] == 2 or $a6 == 1 and $a1 == 1 and $a8 < 1 and $_POST['turn'] == 2 or $a6 == 1 and $a7 == 1 and $a2 < 1 and $_POST['turn'] == 2)
{
if ($a3 == 1 and $a8 < 1)
{
$a8 = 2;
}
elseif ($a9 == 1 and $a2 < 1)
{
$a2 = 2;
}
elseif ($a1 == 1 and $a8 < 1)
{
$a8 = 2;
}
elseif ($a7 == 1 and $a2 < 1)
{
$a2 = 2;
}
}
// If the computer went first and took a8, and human took a5, try to split the corner
elseif ($a8 == 2 and $a5 == 1 and $a6 < 1)
{
$a6 = 2;
}
elseif ($a8 == 2 and $a6 == 2 and $a9 < 1)
{
$a9 = 2;
}
// Attempt the special if the computer went first and on a2, and the human took a5
elseif ($a2 == 2 and $a5 == 1 and $a7 < 1)
{
$a7 = 2;
}
// Move to corner if no two player ticks are aligned and nothing else applied
elseif ($a1 != 1 and $a1 != 2)
{
$a1 = 2;
}
elseif ($a3 != 1 and $a3 != 2)
{
$a3 = 2;
}
elseif ($a7 != 1 and $a7 != 2)
{
$a7 = 2;
}
elseif ($a9 != 1 and $a9 != 2)
{
$a9 = 2;
}
// Move to edge if all corners are blocked AND no two ticks are aligned and nothing else applied
elseif ($a2 != 1 and $a2 != 2)
{
$a2 = 2;
}
elseif ($a4 != 1 and $a4 != 2)
{
$a4 = 2;
}
elseif ($a6 != 1 and $a6 != 2)
{
$a6 = 2;
}
elseif ($a8 != 1 and $a8 != 2)
{
$a8 = 2;
}
elseif ($won != 'true')
{
echo "Warning: Fatal attempt to generate computer move. Game unable to continue. Click the restart button.";
$won = 'true';
}
}
// Check to see if the COMPUTER has won if PLAYER has not already, if so display the message
// Also make sure player has not cheated first
if ($won != 'true')
{
if ($a1 == 2 and $a2 == 2 and $a3 == 2 or $a1 == 2 and $a5 == 2 and $a9 == 2 or $a1 == 2 and $a4 == 2 and $a7 == 2 or $a2 == 2 and $a5 == 2 and $a8 == 2 or $a3 == 2 and $a6 == 2 and $a9 == 2 or $a3 == 2 and $a5 == 2 and $a7 == 2 or $a4 == 2 and $a5 == 2 and $a6 == 2 or $a7 == 2 and $a8 == 2 and $a9 == 2)
{
echo "Bwahahaha! You lost to a computer! <br />";
$won = 'true';
// For the counter
$lose = 'true';
}
}
// Check for a draw again, if computer took the last square
// Check to see if the game is a draw
if ($a1 > 0 and $a2 > 0 and $a3 > 0 and $a4 > 0 and $a5 > 0 and $a6 > 0 and $a7 > 0 and $a8 > 0 and $a9 > 0 and $won != true)
{
echo "Tie!";
$won = 'true';
// For the counter
$tie = 'true';
}
?>