Advertisement
Guest User

Untitled

a guest
May 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 31.19 KB | None | 0 0
  1. <?php
  2.  
  3. // Require other files for validation and generation.
  4. require 'pieces/pawn.php';
  5. require 'pieces/knight.php';
  6. require 'pieces/bishop.php';
  7. require 'pieces/rook.php';
  8. require 'pieces/queen.php';
  9. require 'pieces/king.php';
  10. // require 'unused/chat.php';
  11.  
  12. function dbConnection(){
  13.     // The database credentials.
  14.     $server = "localhost";
  15.     $username = "";
  16.     $password = "";
  17.     $database = "";
  18.  
  19.     // Create a connection that we can use to get and set database from/to the mysql database.
  20.     $conn = mysqli_connect($server, $username, $password, $database);
  21.  
  22.     if (!$conn){
  23.         die ("database connection failed: ".mysqli_connect_error());
  24.     }
  25.  
  26.     return $conn;
  27. }
  28.  
  29. function saveBoard($game_id, $piece_positions){
  30.     $db = dbConnection();
  31.  
  32.     $stmt = $db->prepare("UPDATE `games` SET piece_positions=? WHERE id=?;");
  33.  
  34.     //adapted from http://stackoverflow.com/questions/383631/json-encode-mysql-results
  35.     ///////////////////////////////// I accidently loads the pieces positions without json decoding them first cuasing a massive error ///////////////////
  36.     $stmt->bind_param("ss", json_encode($piece_positions), $game_id);
  37.  
  38.     // Execute the query and store the result in a result object variable
  39.     $stmt->execute();
  40.  
  41.     return TRUE;
  42.  
  43.     /*
  44.     $stmt_1->bind_param("s", json_encode($piece_positions));            
  45.  
  46.  
  47.     // Execute the query and store the result in a result object variable
  48.     $result = mysqli_query($conn, $sql);
  49.  
  50.     $the_game = $result->fetch_assoc();
  51.  
  52.     // Call our board generator function
  53.     $piece_positions = $the_game['piece_positions'];
  54.  
  55.     return $piece_positions;*/
  56. }
  57.  
  58. function saveTurn($game_id, $turn){
  59.     $db = dbConnection();
  60.  
  61.     $stmt = $db->prepare("UPDATE `games` SET player_turn=? WHERE id=?;");
  62.  
  63.     $stmt->bind_param("ss", $turn, $game_id);
  64.  
  65.     $stmt->execute();
  66.  
  67.     return TRUE;
  68. }
  69.  
  70. function loadBoard($game_id){
  71.  
  72.     $db = dbConnection();
  73.  
  74.     $sql = "SELECT * FROM games WHERE id='$game_id';";
  75.  
  76.     // Execute the query and store the result in a result object variable
  77.     $result = mysqli_query($db, $sql);
  78.  
  79.     $the_game = $result->fetch_assoc();
  80.  
  81.     // Call our board generator function
  82.     $piece_positions = $the_game['piece_positions'];
  83.  
  84.     //adapted from http://php.net/manual/en/function.json-decode.php
  85.     $piece_positions = json_decode($piece_positions, TRUE);
  86.  
  87.     return $piece_positions;
  88.  
  89. }
  90.  
  91. function loadTurn($game_id){
  92.  
  93.     $db = dbConnection();
  94.  
  95.     $sql = "SELECT * FROM games WHERE id='$game_id';";
  96.  
  97.     $result = mysqli_query($db, $sql);
  98.  
  99.     $the_game = $result->fetch_assoc();
  100.  
  101.     $turn = $the_game['player_turn'];
  102.  
  103.     return $turn;
  104. }
  105.  
  106. function loadTurnId($game_id, $turn){
  107.  
  108.     $db = dbConnection();
  109.  
  110.     $sql = "SELECT * FROM users_games WHERE game_id='$game_id';";
  111.  
  112.     $result = mysqli_query($db, $sql);
  113.  
  114.     $the_game = $result->fetch_assoc();
  115.  
  116.     $turn_id = $the_game['white_user_id'];
  117.     $turn_id = $the_game['black_user_id'];
  118.  
  119.     return $turn;
  120. }
  121.  
  122. /*
  123.  * This function will find out what piece is being moved and then run the appropriate logic to determine if the move is
  124.  * a legitimate move.
  125.  */
  126. function validateMove($source, $destination, $piece, $piece_positions)
  127. {
  128.     switch ($piece) {
  129.         case 'WLR':
  130.             return validRookMove($source, $destination, $piece);
  131.             break;
  132.         case 'WLN':
  133.             return validKNightMove($source, $destination);
  134.             break;
  135.         case 'WLB':
  136.             return validBishopMove($source, $destination);
  137.             break;
  138.         case 'WRR':
  139.             return validRookMove($source, $destination, $piece);
  140.             break;
  141.         case 'WRN':
  142.             return validKNightMove($source, $destination);
  143.             break;
  144.         case 'WRB':
  145.             return validBishopMove($source, $destination);
  146.             break;
  147.         case 'WQ':
  148.             return validQueenMove($source, $destination, $piece);
  149.             break;
  150.         case 'WK':
  151.             return validKingMove($source, $destination);
  152.             break;
  153.         case 'WAP':
  154.             return validPawnMove($source, $destination, $piece, $piece_positions);
  155.             break;
  156.         case 'WBP':
  157.             return validPawnMove($source, $destination, $piece, $piece_positions);
  158.             break;
  159.         case 'WCP':
  160.             return validPawnMove($source, $destination, $piece, $piece_positions);
  161.             break;
  162.         case 'WDP':
  163.             return validPawnMove($source, $destination, $piece, $piece_positions);
  164.             break;
  165.         case 'WEP':
  166.             return validPawnMove($source, $destination, $piece, $piece_positions);
  167.             break;
  168.         case 'WFP':
  169.             return validPawnMove($source, $destination, $piece, $piece_positions);
  170.             break;
  171.         case 'WGP':
  172.             return validPawnMove($source, $destination, $piece, $piece_positions);
  173.             break;
  174.         case 'WHP':
  175.             return validPawnMove($source, $destination, $piece, $piece_positions);
  176.             break;
  177.  
  178.         //black pieces
  179.         case 'BLR':
  180.             return validRookMove($source, $destination, $piece);
  181.             break;
  182.         case 'BLN':
  183.             return validKNightMove($source, $destination);
  184.             break;
  185.         case 'BLB':
  186.             return validBishopMove($source, $destination);
  187.             break;
  188.         case 'BRR':
  189.             return validRookMove($source, $destination, $piece);
  190.             break;
  191.         case 'BRN':
  192.             return validKNightMove($source, $destination);
  193.             break;
  194.         case 'BRB':
  195.             return validBishopMove($source, $destination);
  196.             break;
  197.         case 'BQ':
  198.             return validQueenMove($source, $destination, $piece);
  199.             break;
  200.         case 'BK':
  201.             return validKingMove($source, $destination);
  202.             break;
  203.         case 'BAP':
  204.             return validPawnMove($source, $destination, $piece, $piece_positions);
  205.             break;
  206.         case 'BBP':
  207.             return validPawnMove($source, $destination, $piece, $piece_positions);
  208.             break;
  209.         case 'BCP':
  210.             return validPawnMove($source, $destination, $piece, $piece_positions);
  211.             break;
  212.         case 'BDP':
  213.             return validPawnMove($source, $destination, $piece, $piece_positions);
  214.             break;
  215.         case 'BEP':
  216.             return validPawnMove($source, $destination, $piece, $piece_positions);
  217.             break;
  218.         case 'BFP':
  219.             return validPawnMove($source, $destination, $piece, $piece_positions);
  220.             break;
  221.         case 'BGP':
  222.             return validPawnMove($source, $destination, $piece, $piece_positions);
  223.             break;
  224.         case 'BHP':
  225.             return validPawnMove($source, $destination, $piece, $piece_positions);
  226.             break;
  227.         default:
  228.             return FALSE;
  229.     }
  230. }
  231.  
  232. function getSqreCol($b_file, $b_rank)
  233. {
  234.     $lightSqre = ['A1', 'C1', 'E1', 'G1',
  235.         'B2', 'D2', 'F2', 'H2',
  236.         'A3', 'C3', 'E3', 'G3',
  237.         'B4', 'D4', 'F4', 'H4',
  238.         'A5', 'C5', 'E5', 'G5',
  239.         'B6', 'D6', 'F6', 'H6',
  240.         'A7', 'C7', 'E7', 'G7',
  241.         'B8', 'D8', 'F8', 'H8'
  242.     ];
  243.  
  244.     $darkSqre = ['B1', 'D1', 'F1', 'H1',
  245.         'A2', 'C2', 'E2', 'G2',
  246.         'B3', 'D3', 'F3', 'H3',
  247.         'A4', 'C4', 'E4', 'G4',
  248.         'B5', 'D5', 'F5', 'H5',
  249.         'A6', 'C6', 'E6', 'G6',
  250.         'B7', 'D7', 'F7', 'H7',
  251.         'A8', 'C8', 'E8', 'G8'
  252.     ];
  253.  
  254.     if (in_array($b_file . $b_rank, $darkSqre)) {
  255.         echo "<div style='background-color:" . getDarkSquareColour() . "; width:50px; height:50px; display:inline-block;'>";
  256.     } else if (in_array($b_file . $b_rank, $lightSqre)) {
  257.         echo "<div style='background-color:" . getLightSquareColour() . "; width:50px; height:50px; display:inline-block;'>";
  258.     } else {
  259.         echo "<div  style='display:inline-block;'>";
  260.     }
  261. }
  262.  
  263. // A function that takes the letter of a square and a number of a square and the current position of pieces inorder to draw the board.
  264. function getPeice($b_file, $b_rank, $piece_positions)
  265. {
  266.     // It first checks if there is a piece in the square it is looking at if not it will print a blank square.
  267.     if (array_key_exists($b_file . $b_rank, $piece_positions)) {
  268.         // If there is a piece it will get the ID of the piece from the array
  269.         $the_piece = $piece_positions[$b_file . $b_rank];
  270.  
  271.         // It will then use this ID to load the correct artwork for the piece
  272.         switch ($the_piece) {
  273.             //White pieces
  274.             case 'WLR':
  275.                 echo "<img src='imgs/waRook.png'>";
  276.                 break;
  277.             case 'WLN':
  278.                 echo "<img src='imgs/wKnight.png'>";
  279.                 break;
  280.             case 'WLB':
  281.                 echo "<img src='imgs/wBishop.png'>";
  282.                 break;
  283.             case 'WRR':
  284.                 echo "<img src='imgs/waRook.png'>";
  285.                 break;
  286.             case 'WRN':
  287.                 echo "<img src='imgs/wKnight.png'>";
  288.                 break;
  289.             case 'WRB':
  290.                 echo "<img src='imgs/wBishop.png'>";
  291.                 break;
  292.             case 'WQ':
  293.                 echo "<img src='imgs/wQueen.png'>";
  294.                 break;
  295.             case 'WK':
  296.                 echo "<img src='imgs/wKing.png'>";
  297.                 break;
  298.             case 'WAP':
  299.                 echo "<img src='imgs/wPawn.png'>";
  300.                 break;
  301.             case 'WBP':
  302.                 echo "<img src='imgs/wPawn.png'>";
  303.                 break;
  304.             case 'WCP':
  305.                 echo "<img src='imgs/wPawn.png'>";
  306.                 break;
  307.             case 'WDP':
  308.                 echo "<img src='imgs/wPawn.png'>";
  309.                 break;
  310.             case 'WEP':
  311.                 echo "<img src='imgs/wPawn.png'>";
  312.                 break;
  313.             case 'WFP':
  314.                 echo "<img src='imgs/wPawn.png'>";
  315.                 break;
  316.             case 'WGP':
  317.                 echo "<img src='imgs/wPawn.png'>";
  318.                 break;
  319.             case 'WHP':
  320.                 echo "<img src='imgs/wPawn.png'>";
  321.                 break;
  322.  
  323.             //black pieces
  324.             case 'BLR':
  325.                 echo "<img src='imgs/baRook.png'>";
  326.                 break;
  327.             case 'BLN':
  328.                 echo "<img src='imgs/bKnight.png'>";
  329.                 break;
  330.             case 'BLB':
  331.                 echo "<img src='imgs/bBishop.png'>";
  332.                 break;
  333.             case 'BRR':
  334.                 echo "<img src='imgs/bhRook.png'>";
  335.                 break;
  336.             case 'BRN':
  337.                 echo "<img src='imgs/bKnight.png'>";
  338.                 break;
  339.             case 'BRB':
  340.                 echo "<img src='imgs/bBishop.png'>";
  341.                 break;
  342.             case 'BQ':
  343.                 echo "<img src='imgs/bQueen.png'>";
  344.                 break;
  345.             case 'BK':
  346.                 echo "<img src='imgs/bKing.png'>";
  347.                 break;
  348.             case 'BAP':
  349.                 echo "<img src='imgs/bPawn.png'>";
  350.                 break;
  351.             case 'BBP':
  352.                 echo "<img src='imgs/bPawn.png'>";
  353.                 break;
  354.             case 'BCP':
  355.                 echo "<img src='imgs/bPawn.png'>";
  356.                 break;
  357.             case 'BDP':
  358.                 echo "<img src='imgs/bPawn.png'>";
  359.                 break;
  360.             case 'BEP':
  361.                 echo "<img src='imgs/bPawn.png'>";
  362.                 break;
  363.             case 'BFP':
  364.                 echo "<img src='imgs/bPawn.png'>";
  365.                 break;
  366.             case 'BGP':
  367.                 echo "<img src='imgs/bPawn.png'>";
  368.                 break;
  369.             case 'BHP':
  370.                 echo "<img src='imgs/bPawn.png'>";
  371.                 break;
  372.             default:
  373.                 echo "<img src='imgs/boardPlaceholder.png'>";
  374.         }
  375.     } else {
  376.         echo "<img src='imgs/boardPlaceholder.png'>";
  377.     }
  378. }
  379.  
  380. // This function is called when we want to clear the board or set it back to its default setup
  381. // it just overwrites all of thep pieces in the piece position array.
  382. function defaultBoard()
  383. {
  384.     //create a collection of chess peices
  385.     $piece_positions = array(
  386.         //white pieces
  387.         'A1' => 'WLR',
  388.         'B1' => 'WLN',
  389.         'C1' => 'WLB',
  390.         'D1' => 'WQ',
  391.         'E1' => 'WK',
  392.         'F1' => 'WRB',
  393.         'G1' => 'WRN',
  394.         'H1' => 'WRR',
  395.         'A2' => 'WAP',
  396.         'B2' => 'WBP',
  397.         'C2' => 'WCP',
  398.         'D2' => 'WDP',
  399.         'E2' => 'WEP',
  400.         'F2' => 'WFP',
  401.         'G2' => 'WGP',
  402.         'H2' => 'WHP',
  403.  
  404.         // Other squares
  405.         'A3' => '',
  406.         'B3' => '',
  407.         'C3' => '',
  408.         'D3' => '',
  409.         'E3' => '',
  410.         'F3' => '',
  411.         'G3' => '',
  412.         'H3' => '',
  413.         'A4' => '',
  414.         'B4' => '',
  415.         'C4' => '',
  416.         'D4' => '',
  417.         'E4' => '',
  418.         'F4' => '',
  419.         'G4' => '',
  420.         'H4' => '',
  421.         'A5' => '',
  422.         'B5' => '',
  423.         'C5' => '',
  424.         'D5' => '',
  425.         'E5' => '',
  426.         'F5' => '',
  427.         'G5' => '',
  428.         'H5' => '',
  429.         'A6' => '',
  430.         'B6' => '',
  431.         'C6' => '',
  432.         'D6' => '',
  433.         'E6' => '',
  434.         'F6' => '',
  435.         'G6' => '',
  436.         'H6' => '',
  437.  
  438.         //Black pieces
  439.         'A8' => 'BLR',
  440.         'B8' => 'BLN',
  441.         'C8' => 'BLB',
  442.         'D8' => 'BQ',
  443.         'E8' => 'BK',
  444.         'F8' => 'BRB',
  445.         'G8' => 'BRN',
  446.         'H8' => 'BRR',
  447.         'A7' => 'BAP',
  448.         'B7' => 'BBP',
  449.         'C7' => 'BCP',
  450.         'D7' => 'BDP',
  451.         'E7' => 'BEP',
  452.         'F7' => 'BFP',
  453.         'G7' => 'BGP',
  454.         'H7' => 'BHP'
  455.     );
  456.     return $piece_positions;
  457. }
  458.  
  459. function translateLetterToNumber($letter)
  460. {
  461.     switch ($letter) {
  462.         case 'A':
  463.             $number = 1;
  464.             break;
  465.         case 'B':
  466.             $number = 2;
  467.             break;
  468.         case 'C':
  469.             $number = 3;
  470.             break;
  471.         case 'D':
  472.             $number = 4;
  473.             break;
  474.         case 'E':
  475.             $number = 5;
  476.             break;
  477.         case 'F':
  478.             $number = 6;
  479.             break;
  480.         case 'G':
  481.             $number = 7;
  482.             break;
  483.         case 'H':
  484.             $number = 8;
  485.             break;
  486.     }
  487.  
  488.     return $number;
  489. }
  490.  
  491. function translateNumberToLetter($number)
  492. {
  493.     switch ($number) {
  494.         case '1':
  495.             $letter = "A";
  496.             break;
  497.         case '2':
  498.             $letter = "B";
  499.             break;
  500.         case '3':
  501.             $letter = "C";
  502.             break;
  503.         case '4':
  504.             $letter = "D";
  505.             break;
  506.         case '5':
  507.             $letter = "E";
  508.             break;
  509.         case '6':
  510.             $letter = "F";
  511.             break;
  512.         case '7':
  513.             $letter = "G";
  514.             break;
  515.         case '8':
  516.             $letter = "H";
  517.             break;
  518.     }
  519.  
  520.     return $letter;
  521. }
  522.  
  523. function allowDaigonalMovement($source_letter_number, $destination_letter_number, $source_number, $destination_number)
  524. {
  525.     // We use if logic to figure out if source or destination is bigger.
  526.     if ($source_letter_number > $destination_letter_number) {
  527.         // Find the difference between the source letter and destination letter
  528.         $letter_difference = $source_letter_number - $destination_letter_number;
  529.     } else {
  530.         // Find the difference between the source letter and destination letter
  531.         $letter_difference = $destination_letter_number - $source_letter_number;
  532.     }
  533.  
  534.     // We use if logic to figure out if source or destination is bigger.
  535.     if ($source_number > $destination_number) {
  536.         // Find the difference between the source number and destination number
  537.         $number_difference = $source_number - $destination_number;
  538.     } else {
  539.         // Find the difference between the source number and destination number
  540.         $number_difference = $destination_number - $source_number;
  541.     }
  542.  
  543.     // If the number changed the at the exact same amount as the letter we know the piece moved diagonally on the board.
  544.     if ($letter_difference == $number_difference) {
  545.         return TRUE;
  546.     } else {
  547.         return FALSE;
  548.     }
  549. }
  550.  
  551. function allowOnlyOneSpace($source_letter_number, $destination_letter_number, $source_number, $destination_number)
  552. {
  553.     // We use if logic to figure out if source or destination is bigger.
  554.     if ($source_letter_number > $destination_letter_number) {
  555.         // Find the difference between the source letter and destination letter
  556.         $letter_difference = $source_letter_number - $destination_letter_number;
  557.     } else {
  558.         // Find the difference between the source letter and destination letter
  559.         $letter_difference = $destination_letter_number - $source_letter_number;
  560.     }
  561.  
  562.     // We use if logic to figure out if source or destination is bigger.
  563.     if ($source_number > $destination_number) {
  564.         // Find the difference between the source number and destination number
  565.         $number_difference = $source_number - $destination_number;
  566.     } else {
  567.         // Find the difference between the source number and destination number
  568.         $number_difference = $destination_number - $source_number;
  569.     }
  570.  
  571.     // Make sure the change is only one space.
  572.     if ($letter_difference > 1 || $number_difference > 1) {
  573.         return FALSE;
  574.     } else
  575.     {
  576.         return TRUE;
  577.     }
  578.  
  579. }
  580.  
  581. function allowHorizontalMovement($source_number, $destination_number)
  582. {
  583.     if ($source_number == $destination_number) {
  584.         return TRUE;
  585.     }
  586.     else
  587.     {
  588.         return FALSE;
  589.     }
  590. }
  591.  
  592. function allowVerticalMovement($source_letter, $destination_letter)
  593. {
  594.     if ($source_letter == $destination_letter) {
  595.         return TRUE;
  596.     }
  597.     else
  598.     {
  599.         return FALSE;
  600.     }
  601. }
  602.  
  603. function detectColision($source ,$destination,$piece_positions){
  604.     // Initialise some variables we are going to use through out
  605.     $source_letter = substr($source, 0, 1);
  606.     $source_number = substr($source, 1, 1);
  607.     $destination_letter = substr($destination, 0, 1);
  608.     $destination_number = substr($destination, 1, 1);
  609.  
  610.     if ( $source_letter == $destination_letter || $source_number == $destination_number ){
  611.         if( $source_letter == $destination_letter ){
  612.             $move_direction = "vertical";
  613.         } else if ( $source_number == $destination_number ){
  614.             $move_direction = "horizontal";
  615.         }
  616.     } else {
  617.         $move_direction = "diagonal";
  618.     }
  619.  
  620.     if ( $move_direction == "vertical" ){
  621.  
  622.         if ( $destination_number > $source_number ){
  623.             $move_up_down = "up";
  624.         } else {
  625.             $move_up_down = "down";
  626.         }
  627.  
  628.         while ( $source_number != $destination_number){
  629.             if ( $move_up_down == "up" ){
  630.                 $source_number++;
  631.             } else {
  632.                 $source_number--;
  633.             }
  634.             if (isset($piece_positions[$source_letter.$source_number]) && $piece_positions[$source_letter.$source_number] != ""){
  635.                 return $source_letter.$source_number;
  636.  
  637.             }
  638.         }
  639.     }
  640.     if ( $move_direction == "horizontal" ){
  641.  
  642.         // We need to translate the source letter into a number for easier processing.
  643.         $source_letter_number = translateLetterToNumber($source_letter);
  644.  
  645.         // We need to translate the destination letter into a number for easier processing.
  646.         $destination_letter_number = translateLetterToNumber($destination_letter);
  647.  
  648.         if ( $destination_letter_number > $source_letter_number){
  649.             $move_left_right = "right";
  650.         } else {
  651.             $move_left_right = "left";
  652.         }
  653.  
  654.         while ( $source_letter_number != $destination_letter_number){
  655.             if ( $move_left_right == "right" ){
  656.                 $source_letter_number++;
  657.             } else {
  658.                 $source_letter_number--;
  659.             }
  660.  
  661.             $source_letter = translateNumberToLetter($source_letter_number);
  662.  
  663.             if (isset($piece_positions[$source_letter.$source_number]) && $piece_positions[$source_letter.$source_number] != ""){
  664.  
  665.  
  666.                 return $source_letter.$source_number;
  667.             }
  668.         }
  669.  
  670.     }
  671.  
  672.     if ( $move_direction == "diagonal" ){
  673.         // We need to translate the source letter into a number for easier processing.
  674.         $source_letter_number = translateLetterToNumber($source_letter);
  675.  
  676.         // We need to translate the destination letter into a number for easier processing.
  677.         $destination_letter_number = translateLetterToNumber($destination_letter);
  678.  
  679.         if($destination_letter_number > $source_letter_number && $destination_number > $source_number){
  680.             $direction = "top_right";
  681.         }
  682.  
  683.         if ($destination_letter_number > $source_letter_number && $destination_number < $source_number){
  684.             $direction = "bottom_right";
  685.         }
  686.  
  687.         if($destination_letter_number < $source_letter_number && $destination_number > $source_number){
  688.             $direction = "top_left";
  689.         }
  690.  
  691.         if ($destination_letter_number < $source_letter_number && $destination_number < $source_number){
  692.             $direction = "bottom_left";
  693.         }
  694.  
  695.         while ($source_letter_number != $destination_letter_number && $source_number != $destination_number){
  696.  
  697.             if ($direction == "top_right"){
  698.                 $source_letter_number++;
  699.                 $source_number++;
  700.             }
  701.  
  702.             if ($direction == "bottom_right"){
  703.                 $source_letter_number++;
  704.                 $source_number--;
  705.             }
  706.  
  707.             if ($direction == "top_left"){
  708.                 $source_letter_number--;
  709.                 $source_number++;
  710.             }
  711.  
  712.             if ($direction == "bottom_left"){
  713.                 $source_letter_number--;
  714.                 $source_number--;
  715.             }
  716.             $source_letter = translateNumberToLetter($source_letter_number);
  717.  
  718.             if (isset($piece_positions[$source_letter.$source_number]) && $piece_positions[$source_letter.$source_number] != ""){
  719.  
  720.  
  721.                 return $source_letter.$source_number;
  722.             }
  723.         }
  724.     }
  725.     return FALSE;
  726. }
  727.  
  728. function takePiece($colision, $piece_positions, $colour){
  729.     $the_piece = $piece_positions[$colision];
  730.  
  731. //problem was substr($the_piece, 1, 1) should have started at 0 instead of 1
  732.  
  733.     if(substr($the_piece, 0, 1) == "W"){
  734.         if($colour == "white"){
  735.             return FALSE;
  736.         } else {
  737.             return TRUE;
  738.         }
  739.  
  740.  
  741.  
  742.     } else if(substr($the_piece, 0, 1) == "B"){
  743.         if($colour == "black"){
  744.             return FALSE;
  745.         } else {
  746.             return TRUE;
  747.         }
  748.     }
  749. }
  750.  
  751. function getUsername($user_id){
  752.     $db = dbConnection();
  753.  
  754.     $sql = "SELECT * FROM users WHERE id=" . $user_id . ";";
  755.  
  756.     // Execute the query and store the result in a result object variable
  757.     $result = mysqli_query($db, $sql);
  758.  
  759.  
  760.     //////////////////////////////    database error showing accidently requesting user_id instead of id ///////////////////////////
  761.     /*var_dump(mysqli_error($db));
  762.     die();*/
  763.  
  764.     /*var_dump($result);
  765.     die();*/
  766.  
  767.     $the_user = $result->fetch_assoc();
  768.  
  769.  
  770.     // Execute the query and store the result in a result object variable
  771.  
  772.  
  773.     return $the_user['username'];
  774. }
  775.  
  776. // function for text colour metrics
  777. // colours come in as array with 3 values red, blue and green.
  778. function getFontColour(){
  779.  
  780.     $user_id = $_SESSION['user_id'];
  781.  
  782.     $db = dbConnection();
  783.  
  784.     $sql = "SELECT * FROM user_options WHERE user_id='$user_id';";
  785.  
  786.     // Execute the query and store the result in a result object variable
  787.     $result = mysqli_query($db, $sql);
  788.  
  789.     $the_user_settings = $result->fetch_assoc();
  790.  
  791.     // Call our board generator function
  792.     $font_colour = $the_user_settings['font_colour'];
  793.  
  794.     return $font_colour;
  795.  
  796. }
  797.  
  798. function getFontSize(){
  799.  
  800.     $user_id = $_SESSION['user_id'];
  801.  
  802.     $db = dbConnection();
  803.  
  804.     $sql = "SELECT * FROM user_options WHERE user_id='$user_id';";
  805.  
  806.     // Execute the query and store the result in a result object variable
  807.     $result = mysqli_query($db, $sql);
  808.  
  809.     $the_user_settings = $result->fetch_assoc();
  810.  
  811.     // Call our board generator function
  812.     $font_size = $the_user_settings['font_size'];
  813.  
  814.     return $font_size;
  815. }
  816.  
  817. function getBackgroundColour(){
  818.  
  819.     $user_id = $_SESSION['user_id'];
  820.  
  821.     $db = dbConnection();
  822.  
  823.     $sql = "SELECT * FROM user_options WHERE user_id='$user_id';";
  824.  
  825.     // Execute the query and store the result in a result object variable
  826.     $result = mysqli_query($db, $sql);
  827.  
  828.     $the_user_settings = $result->fetch_assoc();
  829.  
  830.     // Call our board generator function
  831.     $background_colour = $the_user_settings['background_colour'];
  832.  
  833.     return $background_colour;
  834. }
  835.  
  836.  
  837. function getDarkSquareColour() {
  838.  
  839.     $user_id = $_SESSION['user_id'];
  840.  
  841.     $db = dbConnection();
  842.  
  843.     $sql = "SELECT * FROM user_options WHERE user_id='$user_id';";
  844.  
  845.     // Execute the query and store the result in a result object variable
  846.     $result = mysqli_query($db, $sql);
  847.  
  848.     $the_user_settings = $result->fetch_assoc();
  849.  
  850.     // Call our board generator function
  851.     $dark_square = $the_user_settings['dark_square'];
  852.  
  853.     return $dark_square;
  854.  
  855. }
  856.  
  857. function getLightSquareColour() {
  858.  
  859.     $user_id = $_SESSION['user_id'];
  860.  
  861.     $db = dbConnection();
  862.  
  863.     $sql = "SELECT * FROM user_options WHERE user_id='$user_id';";
  864.  
  865.     // Execute the query and store the result in a result object variable
  866.     $result = mysqli_query($db, $sql);
  867.  
  868.     $the_user_settings = $result->fetch_assoc();
  869.  
  870.     // Call our board generator function
  871.     $light_square = $the_user_settings['light_square'];
  872.  
  873.     return $light_square;
  874. }
  875.  
  876. function checkCheck($piece_positions, $player_turn){
  877.  
  878.     if ($player_turn == "black"){
  879.         foreach ($piece_positions as $position => $piece) {
  880.             // var_dump($piece);
  881.             if ($piece == "BK"){
  882.                 if (kingCheckedByPiece($position, $piece_positions, $player_turn)) {
  883.                     $check_checkmate = kingCheckmatedByPiece($position, $piece_positions, $player_turn);
  884.                     if ($check_checkmate == TRUE){
  885.                         return "CHECKMATE";
  886.                     }
  887.                     return TRUE;
  888.                 }
  889.             }
  890.         }
  891.     } else if ($player_turn == "white"){
  892.         foreach ($piece_positions as $position => $piece) {
  893.             /*var_dump($piece);*/
  894.             if  ($piece == "WK"){
  895.                 if (kingCheckedByPiece($position, $piece_positions, $player_turn)) {
  896.                     $check_checkmate = kingCheckmatedByPiece($position, $piece_positions, $player_turn);
  897.                     if ($check_checkmate == TRUE){
  898.                         return "CHECKMATE";
  899.                     }
  900.                     return TRUE;
  901.                 }
  902.             }
  903.         }
  904.     }
  905.  
  906.     return FALSE;
  907. }
  908.  
  909. function checkPawnPromotion($piece_positions, $player_turn){
  910.  
  911.     $top = ['A8', 'B8', 'C8', 'D8', 'E8', 'F8', 'G8', 'H8'];
  912.     $bottom = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1'];
  913.     $white_pawns = ['WAP','WBP','WCP','WDP','WEP','WFP','WGP','WHP'];
  914.     $black_pawns = ['BAP','BBP','BCP','BDP','BEP','BFP','BGP','BHP'];
  915.  
  916.     if ($player_turn == "black"){
  917.         foreach ($top as $t) {
  918.             if (isset($piece_positions[$t]) && in_array($piece_positions[$t], $white_pawns)) {
  919.                 return $piece_positions[$t];
  920.             }
  921.         }
  922.     } else if ($player_turn == "white") {
  923.         foreach ($bottom as $b) {
  924.             if (isset($piece_positions[$b]) && in_array($piece_positions[$b], $black_pawns)){
  925.                 return $piece_positions[$b];
  926.             }
  927.         }
  928.     }
  929. }
  930.  
  931. function getColourOfPlayer($game_id) {
  932.  
  933.     $logged_in_user = $_SESSION['user_id'];
  934.  
  935.     $conn = dbConnection();
  936.  
  937.     // Prepare a sql statement that will check for games we have against users where the status is in progress.
  938.     $stmt = $conn->prepare("SELECT * FROM users_games WHERE game_id = ?");
  939.  
  940.     // Bind our user ID to both black and white sides.
  941.     $stmt->bind_param("s", $game_id);
  942.  
  943.     // Execute the query
  944.     $stmt->execute();
  945.  
  946.     // Store the result in a result object variable
  947.     $res = $stmt->get_result();
  948.  
  949.     // For each game in the array
  950.     while($row = $res->fetch_assoc()){
  951.  
  952.         // If our user id is the same as the games white user id.
  953.         if($logged_in_user == $row['white_user_id']) {
  954.             // our colour is white
  955.             return "white";
  956.         }
  957.  
  958.         // If our user id is the same as the games black user id.
  959.         if($logged_in_user == $row['black_user_id']) {
  960.             // our colour is black
  961.             return "black";
  962.         }
  963.     }
  964. }
  965.  
  966. function castleKingSide($source, $destination, $piece_positions) {
  967.  
  968.     if ($source == "E8") {
  969.         $colour = 'black';
  970.     } else if ($source == "E1") {
  971.         $colour = 'white';
  972.     }
  973.  
  974.     $db = dbConnection();
  975.  
  976.     //$sql = "SELECT * FROM games WHERE id='$_SESSION['game_id']';";
  977.  
  978.     // Execute the query and store the result in a result object variable
  979.     $result = mysqli_query($db, $sql);
  980.  
  981.     $the_game = $result->fetch_assoc();
  982.  
  983.     if ($colour == 'black') {
  984.         if(isset($piece_positions['H8']) && $piece_positions['H8'] == "BRR") {
  985.             if ($the_game['BRR_moved'] == '0' && $the_game['BK_moved'] == '0'){
  986.                 if ($piece_positions['G8'] == '' && $piece_positions['F8'] == '') {
  987.                     return TRUE;
  988.                 }
  989.             }
  990.         }
  991.     } else if ($colour == 'white') {
  992.         if(isset($piece_positions['H1']) && $piece_positions['H1'] == "WRR") {
  993.             if ($the_game['WRR_moved'] == '0' && $the_game['WK_moved'] == '0'){
  994.                 if ($piece_positions['G1'] == '' && $piece_positions['F1'] == '') {
  995.                     return TRUE;
  996.                 }
  997.             }
  998.         }
  999.     }
  1000.  
  1001.     return false;
  1002.  
  1003. }
  1004.  
  1005. function castleQueenSide($source, $destination, $piece_positions) {
  1006.  
  1007.     if ($source == "E8") {
  1008.         $colour = 'black';
  1009.     } else if ($source == "E1") {
  1010.         $colour = 'white';
  1011.     }
  1012.  
  1013.     $db = dbConnection();
  1014.  
  1015.     // $sql = "SELECT * FROM games WHERE id='$_SESSION['game_id']';";
  1016.  
  1017.     // Execute the query and store the result in a result object variable
  1018.     $result = mysqli_query($db, $sql);
  1019.  
  1020.     $the_game = $result->fetch_assoc();
  1021.  
  1022.     if ($colour == 'black') {
  1023.         if(isset($piece_positions['A8']) && $piece_positions['A8'] == "BLR") {
  1024.             if ($the_game['BLR_moved'] == '0' && $the_game['BK_moved'] == '0'){
  1025.                 if ($piece_positions['B8'] == '' && $piece_positions['C8'] == '' && $piece_positions['D8'] == '') {
  1026.                     return TRUE;
  1027.                 }
  1028.             }
  1029.         }
  1030.     } else if ($colour == 'white') {
  1031.         if(isset($piece_positions['A1']) && $piece_positions['A1'] == "WLR") {
  1032.             if ($the_game['WLR_moved'] == '0' && $the_game['WK_moved'] == '0') {
  1033.                 if ($piece_positions['B1'] == '' && $piece_positions['C1'] == '' && $piece_positions['D1'] == '') {
  1034.                     return TRUE;
  1035.                 }
  1036.             }
  1037.         }
  1038.     }
  1039.  
  1040.     return false;
  1041.  
  1042. }
  1043.  
  1044.  
  1045.  
  1046. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement