<?

// ces variables doivent être les mêmes que celles de JSO.JS
// car des opérations pour vérifier la logique de l'abandon, etc.
// seront faites
$blanc				= 100;
$noir 				= 200;
$abandon			= 222;
$nul					= 333;
$recommencer	= 444;
// ces variables doivent être les mêmes que celles de JSO.JS

include 'cron.php';

function coup_du_bon_joueur() {
global $tour, $id_partie, $id_inviteur, $id_invite, $elo1, $elo2;	
global $blanc, $noir, $abandon, $nul, $recommencer;
global $j1, $i1, $j2, $i2;
global $transformation_pour_timer;

	$num = requete_sql("SELECT id_membre_blanc, id_membre_noir FROM parties WHERE (id_partie = {$id_partie}) LIMIT 1");
	
	$id_inviteur = $num[1]['id_membre_blanc'];
	$id_invite	 = $num[1]['id_membre_noir'];
	
	$pseudo	= $_COOKIE['pseudo'];
	$password = $_COOKIE['password'];	
	
	if ((!$id_inviteur) || (!$id_invite)) {
	
				return 0;
	
	} else {
		
		if ((!$pseudo) || (!$password)) {
				
				return 0;
		
		} else {			
			
				$elo1 = retourner_champ_membre($id_inviteur, 'elo');
				$elo2 = retourner_champ_membre($id_invite, 'elo');
				
				$joueur_blanc = retourner_champ_membre($id_inviteur, 'pseudo');
				$pass_blanc 	= retourner_champ_membre($id_inviteur, 'password');
				$ordi_blanc 	= retourner_champ_membre($id_inviteur, 'ordi');
				$ordi_noir		= retourner_champ_membre($id_invite, 'ordi');
				
				if ((($pseudo == $joueur_blanc) && ($password == $pass_blanc))) {
					
						if ($i1 == $noir) { $i1 = $blanc; } // on échange si la couleur d'action est invalide
						
						$couleur 	= 'blanc';									
					
				} else {
					
						$joueur_noir 	= retourner_champ_membre($id_invite, 'pseudo');
						$pass_noir 		= retourner_champ_membre($id_invite, 'password');						
						
						if ((($pseudo == $joueur_noir) && ($password == $pass_noir))) {
							
								if ($i1 == $blanc) { $i1 = $noir; } // on échange si la couleur d'action est invalide
								
								$couleur 	= 'noir';								
														
						} else {
							
								$couleur 	= 'inconnue';
						}				
				}
		
				if (((!$tour) && ($ordi_noir)) 
				|| (($tour) && ($ordi_blanc))) {
					
								$bon_coup = 1;
		
				} else if ($transformation_pour_timer) {
						
								$bon_coup = 1;
								
				} else if (($tour) && ($couleur == 'blanc')) {							
							
								$bon_coup = 1;
						
				} else if ((!$tour) && ($couleur == 'noir')) {
							
								$bon_coup = 1;				
				
				}	else {
				
								$bon_coup = 0;
				}				
		}
	}
	
	return $bon_coup;
}

if ($_GET['init'] != 3) { header('Content-type: text/html; charset=UTF-8');  }

$lettre['A'] = 1; $lettre['B'] = 2; $lettre['C'] = 3; $lettre['D'] = 4;
$lettre['E'] = 5; $lettre['F'] = 6; $lettre['G'] = 7; $lettre['H'] = 8;

$chiffre[1] = 'A'; $chiffre[2] = 'B'; $chiffre[3] = 'C'; $chiffre[4] = 'D';
$chiffre[5] = 'E'; $chiffre[6] = 'F'; $chiffre[7] = 'G'; $chiffre[8] = 'H';

$tour = $_GET['tour'];
$id_partie = $_GET['nom_partie'];

if ((!file_exists("parties/{$id_partie}.txt")) || (!file_exists("parties/timer/{$id_partie}.txt"))) {
	
		echo "rediriger";
		exit;
}

include 'connect_sql.php';
include 'membres.php';
include 'calcul_elo.php';

$coup_bon_joueur = coup_du_bon_joueur();

$mat = $_GET['mat'];

if (($mat) && ($mat != 2)) {
	
	if (($tour && ($mat == 1)) || ($mat == 11) || ($mat == 4)) {
			
		$score1 = 1;
		$score2 = 0;
			
	} else {
		
		$score1 = 0;
		$score2 = 1;
	}
	
} else if ($mat == 2) {
	
		$score1 = 0.5;
		$score2 = 0.5;
}

$nul_ou_recommencer = $_GET['nul_ou_recommencer'];

$dernier_time				= time();

if ($nul_ou_recommencer) {
	
		requete_sql("UPDATE parties SET partie_en_cours = 1 WHERE id_partie = {$id_partie}");
}

if ($mat && (!$nul_ou_recommencer)) {

		requete_sql("UPDATE calculer_elo SET dernier_time = {$dernier_time} WHERE id_partie = {$id_partie}");
		
		requete_sql("UPDATE parties SET partie_en_cours = 0 WHERE id_partie = {$id_partie}");
}

$num 								= requete_sql("SELECT id_partie FROM calculer_elo WHERE id_partie = {$id_partie}");

$id_partie_calculer = $num[1]['id_partie'];

if (($mat) && (!$id_partie_calculer) && (!$nul_ou_recommencer)) {
	
		// si mat, ou match nul ET on n'est pas déjà entrain de calculer l'elo, alors on le calcule...
		
		$new_id = inserer_variables_to_table_sql ('id_partie, dernier_time', 'calculer_elo');			
		
		
		// CALCULE DE L'ELO DU JOUEUR BLANC
			
	  requete_sql("UPDATE membres SET cumul_elo_adversaires = cumul_elo_adversaires + {$elo2}, nb_adversaires = nb_adversaires + 1, score = score + {$score1} WHERE (id_membre = {$id_inviteur})");
				
		$num = requete_sql("SELECT cumul_elo_adversaires/nb_adversaires AS moyenne_elo_adversaire, score, nb_adversaires, categorie FROM membres WHERE (id_membre = {$id_inviteur})");
				
		$moyenne_elo_adversaire = $num[1]['moyenne_elo_adversaire'];
		$score 									= $num[1]['score'];
		$nb_adversaires					= $num[1]['nb_adversaires'];
		$categorie							= $num[1]['categorie'];
				
		if ($categorie == 'Jeune') {
						
				$jeune = 1;
				
		} else {
					
				$jeune = 0;
		}
			
		$new_elo1 = calculer_elo($elo1, $moyenne_elo_adversaire, $score, $nb_adversaires, $jeune);
				
		requete_sql("UPDATE membres SET elo = {$new_elo1} WHERE (id_membre = {$id_inviteur})");
				
		
		// CALCULE DE L'ELO DU JOUEUR NOIR
			
		requete_sql("UPDATE membres SET cumul_elo_adversaires = cumul_elo_adversaires + {$elo1}, nb_adversaires = nb_adversaires + 1, score = score + {$score2} WHERE (id_membre = {$id_invite})");
	
		$num = requete_sql("SELECT cumul_elo_adversaires/nb_adversaires AS moyenne_elo_adversaire, score, nb_adversaires, categorie FROM membres WHERE (id_membre = {$id_invite})");
		
		$moyenne_elo_adversaire = $num[1]['moyenne_elo_adversaire'];
		$score 									= $num[1]['score'];
		$nb_adversaires					= $num[1]['nb_adversaires'];
		$categorie							= $num[1]['categorie'];
		
		if ($categorie == 'Jeune') {
				
					$jeune = 1;
		
		} else {
			
				$jeune = 0;
		}
	
		$new_elo2 = calculer_elo($elo2, $moyenne_elo_adversaire, $score, $nb_adversaires, $jeune);
				
		requete_sql("UPDATE membres SET elo = {$new_elo2} WHERE (id_membre = {$id_invite})");
		
		$mat_et_calculer_elo = 1;		
}

if (!$SITE['lib_large']) {
	
		$SITE['lib_large'] = 1;

		function filtrer_large($chaine) {
			
				$chaine = html_entity_decode(stripslashes(strip_tags(trim($chaine))));
				$chaine = eregi_replace("[\"<>]", "",$chaine); 
			
				return $chaine;
		}
		
		function filtrer_nom_partie($chaine) {
			
				$chaine = eregi_replace("[^A-Z0-9éèêëaâäà_iîïuûüùoöô-]", "", $chaine);
				$chaine = filtrer_large($chaine);
			
				return $chaine;
		}
}

function quotient_division_entiere($nombre, $diviseur) {
	if ($diviseur == 0) { return 0; }
	else return floor($nombre/$diviseur);
}

function reste_division_entiere($nombre, $diviseur) {	
	if ($diviseur == 0) { return 0; }
	else return $nombre % $diviseur;
}

function retourner_timer_blanc($n, $mat) {
global $ftimer; 
	
	if ($mat) { return 0; }
	
	$timer_blanc = 0;
	
	if ($n >= 3) { 
	
			$k = quotient_division_entiere(($n-1),2);
			
			$timer_blanc = 0;
			
			for ($i = 1; $i <= $k; $i++) {
				
					$timer_blanc = $timer_blanc + abs($ftimer[2*$i] - $ftimer[2*$i - 1]);
			}
	}
	
	if (reste_division_entiere($n,2) == 1) {
		
			$timer_blanc = $timer_blanc + abs(getmtime()-$ftimer[$n]);

	} else {
		
			$timer_blanc = $timer_blanc + abs($ftimer[$n]-$ftimer[$n-1]);
	}
	
	$timer_blanc = round($timer_blanc);
	
	return $timer_blanc;
}


function retourner_timer_noir($n, $mat) {
global $mat, $ftimer;

	$timer_noir = 0;
	
	if ($mat) { return 0; }
	
	if ($n == 1) { return 0; }

	if ($n >= 3) { 

			if (reste_division_entiere($n,2) == 0) 	{ $k = quotient_division_entiere(($n-1),2); }
			else 																		{ $k = quotient_division_entiere(($n-3),2); }
			
			for ($i = 1; $i <= $k; $i++) {
				
					$timer_noir = $timer_noir + abs($ftimer[2*$i + 1] - $ftimer[2*$i]);
			}
	}
	
	if (reste_division_entiere($n,2) == 0) {
		
			$timer_noir = $timer_noir + abs(getmtime()-$ftimer[$n]);

	} else {
		
			$timer_noir = $timer_noir + abs($ftimer[$n]-$ftimer[$n-1]);
	}
		
	$timer_noir = round($timer_noir);
	
	return $timer_noir;
}


if ($_GET['nom_partie']) {

	$nom_partie = $_GET['nom_partie'];	

} else $nom_partie = 'les_coups';

$nom_partie = filtrer_nom_partie($nom_partie);

$dernier_time = time();

requete_sql("UPDATE parties SET dernier_time = {$dernier_time} WHERE id_partie={$nom_partie}");

// identification du membre courant : 

$pseudo = $_COOKIE['pseudo'];
$pasword = $_COOKIE['password'];

$num = requete_sql("SELECT id_membre FROM membres WHERE (pseudo = '{$pseudo}') and (password = '{$password}')");

$id_membre = $num[1]['id_membre'];

if (!$id_membre) { $id_membre = 0; }

// on update la dernière action de l'id du membre courant

$time_derniere_action = time();
					
requete_sql("UPDATE membres SET time_derniere_action={$time_derniere_action} WHERE id_membre = {$id_membre}");


include 'timer.php';

$num_ligne = $_GET['num_ligne'];

if (!$num_ligne) {

	$num_ligne = 0;
}

$angle_echiquier = $_GET['angle_echiquier'];

$transformation_pour_timer = $_GET['transformation_pour_timer'];

for ($i = 1; $i <= 8; $i++) {

	for ($j = 1; $j <= 8; $j++) {

		$bon_coup[$i][$j] = 0;
	}
}

if (!$angle_echiquier) {
	$angle_echiquier = 'courant';
}

if ($_GET['init'] == 1 ) {
	
	include("init.php");
	include ('inc_liste_coups.php'); 
	
	echo $info_coups;		
	exit;
}

if (!file_exists("parties/".$nom_partie.".txt")) {
	
		echo "rediriger";
		
	  exit();
	  
} else {
		
	$f=@fopen("parties/".$nom_partie.".txt","r");	
}

$j1 = $chiffre[$j1];

$doubler_timer = 0;

if (($j2 != 'Dn') && ($j2 != 'Fn') && ($j2 != 'Cn') && ($j2 != 'Tn') 
&& ($j2 != 'Db') && ($j2 != 'Fb') && ($j2 != 'Cb') && ($j2 != 'Tb')) { 
	$j2 = $chiffre[$j2]; } else {
	
		$j2 = "'{$j2}'"; 
		$transformation_pour_timer = 0; 
}
		
$timer_courant = getmtime();

if ((($_GET['init'] != 3) && ($coup_bon_joueur)) || ($nul_ou_recommencer)) {

	// si mode d'ENREGISTREMENT, alors enregistrer le coup fait en java sur le client => sur le serveur
	// l'autre joueur devra récupérer cette info pour actualise son java
		
		$fichier=fopen("parties/".$nom_partie.".txt", 'a+');
	
		fwrite($fichier,"coup({$j1},{$i1},{$j2},{$i2}); \n");
		fclose ($fichier);	
		
		// Enregistrer le timer_courant pour le demi-coup qui vient d'être joué
	
		if (!$transformation_pour_timer) {
			
				// DANS LE FUTUR POUR EVITER LE BUG DU TIMER QUAAND LES PIONS SE TRANSFORMENT : NE PAS ENREGISTRER LE TIMER CI-DESSOUS SI UN PION ARRIVE EN DERNIERE LIGNE
				// ET QU'IL N'EST PAS ENCORE TRANSFORME
		
				// prévoire une variable $transformation_pour_timer à envoyer dans l'ajax via le fichier JS
	
				$fichier=fopen("parties/timer/".$nom_partie.".txt", 'a+');
	
				fwrite($fichier,"\n{$timer_courant}");
				
				fclose ($fichier);	
		}
	
	// enregistrement terminé
}

$texte = '';
$i = 0;

while (!feof($f)) {
 		
 		$i++;
		
		$texte 					.= fgets($f,255);	
	
		if ($i == $num_ligne) {
				
				break;
		}
}

fclose($f);

// début de lecture du fichier FTIMER

$n = 0; // n est le nombre de demi-coups joués dans la partie ainsi que le nombre de getmtime dans le fichier timer

if (file_exists("parties/timer/".$nom_partie.".txt")) {
	
		$f2=@fopen("parties/timer/".$nom_partie.".txt","r");

		while (!feof($f2)) {
		 		
				$n++;		
				$ftimer[$n] 		 = fgets($f2,255);
		}

		fclose($f2);

} else {
	
	echo "rediriger";
	exit;
}

// fin de lecture


$timer_noir = retourner_timer_noir($n, $mat);
$timer_blanc = retourner_timer_blanc($n, $mat);

$texte_timer = <<<EOF
timer_noir = {$timer_noir};
timer_blanc = {$timer_blanc};
EOF;

if ($_GET['init'] == 3) { 
	
	$texte  = str_replace("A,","1,", $texte);
	$texte  = str_replace("B,","2,", $texte);
	$texte  = str_replace("C,","3,", $texte);
	$texte  = str_replace("D,","4,", $texte);
	$texte  = str_replace("E,","5,", $texte);
	$texte  = str_replace("F,","6,", $texte);
	$texte  = str_replace("G,","7,", $texte);
	$texte  = str_replace("H,","8,", $texte);
	
	$texte_coups  = str_replace("coup(","coup(0,", $texte);
}

// on prend les valeurs de la liste des coups :

include ('inc_liste_coups.php'); // => ça renvoit le contneu dans $info_coups

// CREATION DU TABLEAU INFO

if ($_GET['init'] != 3)  {
	
	$taille_info = 1;
	$tab_info[$taille_info] = $info_coups;

} else {
	
	$taille_info = 5;
	$tab_info[1] = $texte_coups;
	$tab_info[2] = $texte_timer;
	$tab_info[3] = $elo1;
	$tab_info[4] = $elo2;	
	$tab_info[5] = $info_coups;
} 

// CREATION DES VARIABLES POUR LE PARSAGE JASON DU JAVASCRIPT

$guillement = '"' ;
$i = 0;

$chaine = '';

while ($i < $taille_info) {
	
	$i++ ;

	$chaine .= $tab_info[$i] .= '**suite**';	
}

include "sans_accents.php";

echo $chaine;

?>

