View file wapirate/wml/compai.php

File size: 13.4Kb
<?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 player one! 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; 

        } 

    }

	

	// Attempt a large triangle if possible 

    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 "OH NO! You were just owned by 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'; 

} 

?>