..
<?php
// sources
// dire methode en apropos
// apropos sur attente
// faire arret reffraichissement
// detecter disparirion de adversaire
$method=""; // sera shadok, duo, secours, byemail
error_reporting(-1);
// $NS en apropos
echo "<html>";
echo '
<script language=javascript>
function myrefresh(){
document.getElementById("submitnow").click()
}
</script>';
// - - - - - - - - - C O N S T A N T E S (ou presque)
// diverses constantes plus ou moins variables!
$SHOWNUM=false; // mettre lettre à côté des cases
$PAUSE=0; // en fin d'execution du php pour avoir le temps de lire
$SAVENAVETTES=true; // pour conserver toutes les étapes dans dossier detail
$version="20201201-0812";
$SERVER="http://flavigny.hd.free.fr";
$ANTIGUIDE="http://antiguide.free.fr";
$ECHOPLATEAU=false; // aficher qques valeurs sur plateau
$ECHOPARAM=false;
// dosier pour les fichiers de travail
$WORK="../work";
$AWALEVBS="awale.vbs";
// autres inits
// appel direct impossible
$PERIODE=0;
$MEME=false ; // true su meme joueurs
// ---------------------
// recuperer le nom du fichier!
define('racine', $_SERVER['PHP_SELF'], true);
$AWALE=substr(racine,1,strlen(racine)-5);
// terrain pour page html et relance (exceptions forcées)
$TERRAIN="[N:0 A:4 B:4 C:4 D:4 E:4 F:4 1:4 2:4 3:4 4:4 5:4 6:4 S:0]";
//$TERRAIN="[N:24 5:2 6:1 S:21]";
// exemples de cas particuliers forgés
//$TERRAIN="[N:18 A:1 B:1 C:0 D:0 E:1 F:0 1:0 2:0 3:0 4:0 5:0 6:5 S:22]";
//$TERRAIN="[N:18 A:0 B:1 C:0 D:0 E:0 F:0 1:0 2:0 3:1 4:0 5:4 6:1 S:23]"; // impossible affamer
//$TERRAIN="[N:19 A:0 B:0 C:0 D:0 E:0 F:0 1:0 2:0 3:1 4:0 5:4 6:1 S:23]"; // faut nou
//// [N:20 A:1 B:0 C:0 D:0 E:0 F:0 1:0 2:2 3:1 4:0 5:0 6:0 S:24]"; // sud gagnantoar famine
// $TERRAIN="[N:12 A:0 B:2 C:0 D:14 E:0 F:0 1:0 2:0 3:3 4:1 5:0 6:0 S:16]";
// ------------------ f u n c t i o n s
// antirebond et chrono à inclure seulement si frappe attendue autrement di jeu=='='
function installantirebondetchrono(){
echo '
<script language=JavaScript>
// &nabdon en gagné!
// verifier graine(cmd) avnat de vbs
// encore une fois incohérence vide barré
// bulle pas votre tour
// GAFFE à double def en forgé (seconde ignorée)
// verifier parite avant jeu!
// manumilitari ?
// en shadok, remplacer l attente par un appel direct!
// faudrait detecter dessous disparu!
// vFestoir zoom caracteres
// fiabiliser detection dessous par count=8!
function invalider(qui){
// se joue au moment du click, avant submit!
// message pour remplacer "a vous de jouer..."
var message
//if (qui == "N") message=" j attends, patientez "
//if (qui == "S") message=" Mise à feu. "
message=" Mise à feu. "
var OUI="oui"
if (document.getElementById("bounce").value == OUI){
document.getElementById("shadok").value = 1
}
document.getElementById("bounce").value = OUI
// changer invite en merci! ne se voit pas sopuvent
document.getElementById("trafic").innerHTML = message
}
';
echo '
var startTime = 0
var start = 0
var end = 0
var diff = 0
var timerID = 0
function chrono(){
end = new Date()
diff = end - start
diff = new Date(diff)
var msec = diff.getMilliseconds()
var sec = diff.getSeconds()
var min = diff.getMinutes()
var hr = diff.getHours()-1
if (min < 10){
min = "0" + min
}
if (sec < 10){
sec = "0" + sec
}
if(msec < 10){
msec = "00" +msec
}
else if(msec < 100){
msec = "0" +msec
}
document.getElementById("chronotime").innerHTML = hr + ":" + min + ":" + sec
//document.getElementById("filetime").value=444
timerID = setTimeout("chrono()", 10)
}
function chronoStart(top){
document.chronoForm.startstop.value = "stop chrono!"
document.chronoForm.startstop.onclick = chronoStop
document.chronoForm.reset.onclick = chronoReset
start = new Date()
var etait=start.getMilliseconds()
start.setMilliseconds(etait-1000*top)
chrono()
}
function chronoContinue(){
document.chronoForm.startstop.value = "stop!"
document.chronoForm.startstop.onclick = chronoStop
document.chronoForm.reset.onclick = chronoReset
start = new Date()-diff
start = new Date(start)
chrono()
}
function chronoReset(){
document.getElementById("chronotime").innerHTML = "0:00:00:000"
start = new Date()
}
function chronoStopReset(){
document.getElementById("chronotime").innerHTML = "0:00:00:000"
document.chronoForm.startstop.onclick = chronoStart
}
function chronoStop(){
document.chronoForm.startstop.value = "reestart chrono!"
document.chronoForm.startstop.onclick = chronoContinue
document.chronoForm.reset.onclick = chronoStopReset
clearTimeout(timerID)
}
</script>';
}
function MYREFRESH(){
echo "<script language=javascript>myrefresh()</script>";
}
function boutabout(){
// construction d'une chaine de tous les parametres
$longparam="";
$v=array_values($_REQUEST);
$r=array_keys($_REQUEST);
for ($i=0;$i<count($v);$i=$i+1) {
$longparam=$longparam.$r[$i]."=".$v[$i]."&";
}
return $longparam;
}
function chgttime(){
global $navette;
$act=0;
if (file_exists($navette)) $act=filemtime($navette);
$old=0;
if (isset($_REQUEST['filetime'])) $old=$_REQUEST['filetime'];
$chgt=$act!=$old;
if ("$act"=="0") $chgt=true;
// echo "old=$old act:$act chgt: $chgt<br>";
return $chgt;
}
function ajout($x,$y){return $x."&$y=".$_REQUEST["$y"];}
function pause(){
global $PAUSE;
if ($PAUSE>0) {
echo "PAUSE($PAUSE)";
sleep($PAUSE);
echo " terminee";
}
}
function enigme(){
echo '
<!-- enigme pour page initiale -->
<script language="Javascript">
var pair=0
var nbp=13 // nombre de nombres premiers utilisés
var alea=[1,2,3,5,7,11,13,17,19,23,29,31,37]
var nb=[1,2,3,5,7,11,13,17,19,23,29,31,37]
function init(){
// tirer au hasard l ordre de presenttion des nombres
var inb=0
while (nbp>0){
var from=parseInt(nbp*Math.random()) // 0 à nbp-1
// ranger le nb tire
nb[nbp-1]=alea[from]
// deplacer les suvat (tirage sans remise!)
if (from<nbp-1){
for (inb=from;inb<nbp-1;inb=inb+1) {
alea[inb]=alea[inb+1]
}
}
nbp=nbp-1
} // while nbp>0
// tirer au hasard le nombre question
var n1=0
var n2=0
// eviter 2 serait utilisable seulement dans dans 4=2+2 mais pas addicitone a un premier impair
// chercher le premier nombre premier impair
do {
n1=nb[parseInt(13*Math.random())]
} while (n1==2)
// chercher le deuxieme nombre premier impair
do {
n2=nb[parseInt(13*Math.random())]
} while (n2==2)
document.moi.tot.value=n1+n2
document.moi.b1.value=nb[0]
document.moi.b2.value=nb[1]
document.moi.b3.value=nb[2]
document.moi.b4.value=nb[3]
document.moi.b5.value=nb[4]
document.moi.b6.value=nb[5]
document.moi.b7.value=nb[6]
document.moi.b8.value=nb[7]
document.moi.b9.value=nb[8]
document.moi.b10.value=nb[9]
document.moi.b11.value=nb[10]
document.moi.b13.value=nb[12]
document.moi.b12.value=nb[11]
}
function faire(n) {
if (pair>1 && document.moi.total.value==0) pair=0;
pair=pair+1
if (pair==1){
document.moi.gg.value=n
document.moi.retry.value="Choississez un second nombre"
}
if (pair==2) {
document.moi.dd.value=n
}
document.moi.total.value=parseInt(document.moi.gg.value)+parseInt(document.moi.dd.value)
if(pair==2 && (document.moi.total.value==parseInt(document.moi.pair.value))){
// alert("OK")
document.moi.retry.value="Bravo. "
document.getElementById("invite").innerHTML="Merci, renseignez les cadres ci dessous. "
// alert("OK")
// document.moi.choix.disabled=false
document.moi.retry.disabled=true
// document.moi.retry.enabled=false
document.getElementById("noms").innerHTML="Noms des joueurs (adresses courriel pour jouer à distance)"
document.getElementById("partie").innerHTML= "<br>Nom à donner à la partie: "
document.getElementById("moi").innerHTML= "<br>Moi: "
document.getElementById("lui").innerHTML= "<br>Lui: "
//fieldmeth
document.moi.fieldmeth.disabled=false
}
if(pair==2 && (document.moi.total.value!=parseInt(document.moi.pair.value)))
document.moi.retry.value=" Ooops, try again! "
}
</script>';
}
function resoudre(){
echo '
Trouvez deux nombres premiers dont la somme fait: <input disabled id=tot name=pair value="" size=3 style="background-color:white;color:green">
<br>
<input type=button id="b1" onclick="faire(nb[0])" style="height:30px;" >
<input type=button id="b2" onclick="faire(nb[1])" style="height:30px;">
<input type=button id="b3" onclick="faire(nb[2])" style="height:30px;">
<input type=button id="b4" onclick="faire(nb[3])" style="height:30px;">
<input type=button id="b5" onclick="faire(nb[4])" style="height:30px;">
<input type=button id="b6" onclick="faire(nb[5])" style="height:30px;">
<input type=button id="b7" onclick="faire(nb[6])" style="height:30px;">
<input type=button id="b8" onclick="faire(nb[7])" style="height:30px;">
<input type=button id="b9" onclick="faire(nb[8])" style="height:30px;">
<input type=button id="b10" onclick="faire(nb[9])" style="height:30px;">
<input type=button id="b11" onclick="faire(nb[10])" style="height:30px;">
<input type=button id="b12" onclick="faire(nb[11])" style="height:30px;">
<input type=button id="b13" onclick="faire(nb[12])" style="height:30px;">
';
echo '
<br> <input disabled name=g id="gg" value="0" size=3>
+
<input disabled name=d id="dd" value="0" size=3>
<input disabled name=d id="total" value="0" size=3>
<input type=button id="retry" value="Choississez un nombre dans la ligne ci-dessus "
onclick="document.moi.retry.value=';
echo "'Choississez un nombre dans la ligne ci-dessus';document.moi.gg.value=0;document.moi.dd.value=0;document.moi.total.value=0; \"
style='height:30px;'>";
}
function oppose($x){
if ("$x"=="N") return "S";
if ("$x"=="S") return "N";
// gaffe si x vide!
// peut se produire avant jeu en cours
// ALERT(1,"appel oppose de ni N ni S");
return "";
}
function stamped($seed){
global $WORK;
global $nomcsv;
if (strlen($seed)==0)return "";
$gagne=false;
//ALERT(2,"valider $seed");
while (!$gagne){
$radical="$seed-".date("YmdHis");
// ALERT(3,"radical: $radical");
if (!file_exists("$WORK/$radical")){
// ALERT(4,"$WORK/$radical n est pas la je je cree");
$cree=mkdir("$WORK/$radical");
if (!$cree){
ALERT(5,"echec creation $WORK/$radical");
return;
};
$nomcsv="$WORK/$radical/$radical.csv";
$gagne=true;
$f=fopen($nomcsv,"w");
if (!$f) ALERT(6,"erreur creation de $nomcsv");
fclose($f);
return $radical;
}
// atendre
sleep(1);
}
}
function serialgame(){
global $SERVER;
global $TERRAIN;
global $k;
global $NS;
global $AWALE;
global $by;
global $adv;
global $duo;
global $method;
// il n'est pas prévu d'inverser les rôle, soon!
if ("$NS"=="N")return;
$tt2=encoder("$TERRAIN");
// increment le token
if (!strpos($k,"_")) $nk=$k."_1";
else {
// supprimer au dela à la fin
$possouli=strpos($k,"_");
$nombre=substr($k,$possouli+1);
$nombre=$nombre+1;
$nk=substr($k,0,$possouli+1).$nombre;
}
//echo "<br>GAFFE: TRAVAUX EN COURS by:$by adv:$adv <br>";
// pour bis shadok
//echo "\n<br><input type=button style='background-color:white;color:red' value=\"$by lance une nouvelle partie contre $adv\" onclick='window.open(\"$SERVER/$AWALE.php?meme=1&duo=$duo&web=2&relance=1&by=$by&coups=1&nordsud=S&token=$nk&periode=1&t=$tt2&adversaire=$adv\",\"_self\")'>";
echo "\n<br><input type=button style='background-color:white;color:red' value=\"$by lance une nouvelle partie contre $adv\" onclick='window.open(\"$SERVER/$AWALE.php?meme=1&method=$method&web=2&relance=1&by=$by&coups=1&nordsud=S&token=$nk&periode=1&t=$tt2&adversaire=$adv\",\"_self\")'>";
}// serial game
// fin de serial ghame
function encoder($T){
$tt=substr($T,1,strlen($T)-2);
$tt2="%5b";
for ($i=0;$i<strlen($tt);$i=$i+1) {
$unc=substr($tt,$i,1);
if ("$unc" == " ") $unc="%20";
$tt2=$tt2.$unc;
}
$tt2=$tt2."%5d";
return $tt2;
}
function hhmmss($sec){
$s=$sec % 60;
$sec=$sec-$s;
$m=$sec/60;
$h=$sec-60*$m;
return "$h:$m:$s";
}
function num($long){
$deb=strpos($long,"#");
$L2=substr($long,$deb+1);
$fin=strpos($L2,"(");
return substr($L2,0,$fin);
}
function ALERT($n,$texte){ // GAFFE synonyme en javascript!, c'est piégeux
echo "<script language='Javascript'> {alert('#$n: $texte')}</script>\n";
}
//
function RECULER(){ // GAFFE synonyme en javascript!
echo "<script language='Javascript'> {window.history.back();Location.reload(true)}</script>\n";
}
function isnum($x){
for ($inum=0;$inum<strlen($x);$inum=$inum+1){
$unc=substr($x,$inum,1);
$oui=strpos("0123456789",$unc);
if (!$oui) return false;
}
return true;
}
function isemail($x){
$oui=strpos($x,"@");
if (!$oui) return false;
return true;
}
function trimcrlf($in){
$inin=$in;
if (strlen($in)>0){
while (strlen($inin)>0 && substr($inin,strlen($inin)-1)<=" ") $inin=substr($inin,0,strlen($inin)-1);
}
return $inin;
}
function createflag($nom){
echo "createflag $nom<br>";
$fl=fopen($nom,'a');
fclose($fl);
} // createflag
function RESTART($appel){
global $AWALE;
global $SERVER;
// relance
$k1=$_REQUEST['token'];
$m="";
if (isset($duo) ){
if ($duo)$m="&method=duo";
}
$n="restart=1&reset=1&web=2&nordsud=S$m&";
$n=ajout($n,'token');
$n=ajout($n,'coups');
$n=ajout($n,'by');
$n=ajout($n,'adversaire');
$n=ajout($n,'t');
$n=ajout($n,'periode');
raw(9,"coup perdu, relance\r\n");
ALERT(7,"Lancement perdu; sans doute frappe trop rapide (cas: $appel).");
// relancer la partie au coup précédent dans la meme fenetre
$todo="window.open(\"$SERVER/$AWALE.php?$n\",'_self')";
echo "\n<script language='javascript'>$todo</scripT>";
}
function showhisto(){
global $WORK;
global $longparam;
//ALERT(8,"debut");
$lold="";
$k7=$_REQUEST['token'];
if (!file_exists("$WORK/$k7/$k7.csv")){
// echo "pas de fichier $WORK/$k7/$k7.csv";
echo "aucun coup joué<br>";
return true;
}
$fp=fopen("$WORK/$k7/$k7.csv",'r');
if (!$fp)return true;
echo"partie: $k7<br>";
$clos=false;
while (!feof($fp)){
$ligne=fgets($fp);
echo $ligne;
if (strpos($ligne,"perd")>0)$clos=true;
if (strpos($ligne,"gagn")>0)$clos=true;
if (!feof($fp)) echo "<br>";
}
fclose($fp);
if (!$clos) echo $_REQUEST['ligne'].", ".$_REQUEST['last']." , <br>";
return true;
}
// ------------ fin de F u n c t u o n
$duo=false;
$secours=false;
$byemail=false;
$SOLO=false;
$longparam= boutabout();
if($ECHOPARAM)echo "<br><br><br><br>$longparam<br>";
if (isset($_REQUEST['method'])){
$method=$_REQUEST['method'];
if (isset($_REQUEST['by']))$by=$_REQUEST['by']; //"ShadokDuDessus";
if (isset($_REQUEST['adversaire']))$adv=$_REQUEST['adversaire']; //"ShadokDuDessus";
if("$method"=="shadok"){
$SOLO=true;
//alert("SOLO mis a true");
}
if ("$method"=="duo") {
$duo=true;
}
if ("$method"=="secours") {
$secours=true;
}
if ("$method"=="byemail"){
$byemail=true;
}
// faire aussi couriel
// si shadok ne rien faire, c'est le choix par defaut
}
$cmdline="";
// si cmd non vide initile afficher dans febug
// projet si cmd vide ne rien afficher!
// bnavette efface si hnage malgré param contraire
//$LARGEUR = "<script language='Javascript'> document.write(window.innerWidth); </script>"; //obtenir largeur fenetre
echo "\n<!--";
echo var_dump($_REQUEST)."<br>"; //1
echo "\n-->\n";
if (isset($_REQUEST['jeu'])){
if ($_REQUEST['jeu']=="=" && (!$SOLO || $_REQUEST['nordsud']=="S")) installantirebondetchrono();
}
// intercepter les "cas particuliers"
if (isset($_REQUEST['source'])){
if ($_REQUEST['source']){
echo "<html><body><form>";
ALERT(9,"ADIAMOO");
echo "$AWALE.php version:$version<br>";
$source=fopen("$AWALE.php","r");
while (!feof($source)) echo fgets($source)."<br>";
fclose($source);
echo "</form></body></html>";
// ALERT(10,"FINIO");
pause();
return;
}
}
if (isset($_REQUEST['apropos'])){
if ($_REQUEST['apropos']){
echo "<html><body><form>";
echo "$AWALE.php version:$version<br>";
if (isset($_REQUEST['token']))echo "partie: ".$_REQUEST['token']." <br>";
echo "Pour tout savoir, lisez: <a href=\"$ANTIGUIDE/wiki/wakka.php?wiki=AwaleInternet\">http://antiguide.free.fr/wiki/wakka.php?wiki=AwaleInternet</a><br>";
echo "</form></body></html>";
pause();
return;
}
} // apropos
// si demande affichage lien
if (isset($_REQUEST['lien'])){
if ($_REQUEST['lien']){
echo "<html><body><form>";
echo "$AWALE.php version:$version <br> LIEN POUR DISTANT: <br>";
$k=$_REQUEST['token'];
echo "partie: $k <br>";
$lien=fopen("../work/$k/$k.lien.txt","r");
echo fgets($lien);
fclose($lien);
pause();
return;
}
} // apropos
// si fichier lien existe afficher bouton
if (isset($_REQUEST['token'])){
$k=$_REQUEST['token'];
if (strlen($k)>0){
// alert ("tester le lien: ../work/$k/$k.lien.txt : ".file_exists("../work/$k/$k.lien.txt"));
// ci dessous plutiot web=-2 et S
if (file_exists("../work/$k/$k.lien.txt") && $_REQUEST['web']!="-1"){
echo "\n<br><input type=button title='montrer le lien pour adversaire' value='Lien à transmettre à votre adversaire' style='background-color:white;color:green'
onclick='window.open(\"$SERVER/$AWALE.php?lien=1&token=$k\",\"_blank\")' >";
}
}
}
$maj="";
// compteur de réexcution (pour comprtement spécial aux remier coups)
if (isset($_REQUEST['iteration'])) $iteration=$_REQUEST['iteration']+1;
else $iteration=0;
if (isset($_REQUEST['histo'])) {
if (showhisto()) {
return;;
}
}
if (isset($_REQUEST['by']) && !isset($by) ) {
if (strlen($_REQUEST['by'])>0) $by=$_REQUEST['by'];
}
if (isset($_REQUEST['adversaire']) && !isset($adv)) {
if (strlen($_REQUEST['adversaire'])>0)$adv=$_REQUEST['adversaire'];
}
// tester by
//echo "<!-- by mis a $by<br>-->";
//$by="Shadok_du_dessus";
$yaeubold=false;
$SOON=false;
// ne pas faire lu1 si len(cmd)>0
$RAF=1; // période raffraichissement préremplie sur page html générée
$verdict="";
$verdictbrut="";
$LU1=false;
$YAEUEXEC=false; // passe a vrai si
$elapsed=0;
if (isset($_REQUEST['elapsed'])) $elapsed=$_REQUEST['elapsed'];
/// que faire de [N:24 A:0 B:0 C:0 D:0 E:0 F:1 1:1 2:0 3:0 4:0 5:0 6:1 S:21]
$SHOWREFRESH=" hidden" ;
$MANUMILITARI=false ; // demande bouton continuer a chaque page
$DELTMP=false; // false ne pas supprimer les temporaires à la fin
$termine=false;
$terminex2=false;
if (isset($_REQUEST['termine'])) {
$terminex2=$_REQUEST['termine'];
}
$msg="";
$tlu=false;
$avous=false;
$liste="";
$stampstart=time();
$ignns1="";
$ignns="";
$k=""; //0
//$nomcsv="";
if (isset($_REQUEST['token'])) $k=trim($_REQUEST['token']); //2
$NS="unk";
// $submited=0;
if (isset($_REQUEST['nordsud'])) $NS=$_REQUEST['nordsud'];
// drapeau
//echo "tester abandon<br>";
if (isset($_REQUEST['abandon'])) {
if (strlen($_REQUEST['abandon'])>0) {
$by=$_REQUEST['by'];
$adv=$_REQUEST['adversaire'];
$PERIODE=$_REQUEST['periode'];
// pas possible en replay
// on pourrait faire periodems ici
$k=$_REQUEST['token']; //1
$NS=$_REQUEST['nordsud'];
echo "$AWALE<br>";
// offre recommence en incrementant le token
serialgame();
// place bouton
echo "\n<br><input type='button' title='playagain' value='Play again (rejouer énigme).' style='background-color:white;color:red'
onclick='window.open(\"$SERVER/$AWALE.php\",\"_self\")";
echo "\n<br><input title='fermer' value='fermer la fenêtre ' style='background-color:white;color:green'
onclick=\"window;close()' \" >";
echo "\n</html>";
pause();
return;
}
} //abandon
// echo "----------------a<br>";
// acces à la navette depuis dossier html
// noms navettes et flag 1
$navette="$WORK/$k/$NS/$k.txt";
$flag= "$WORK/$k/$NS/$k.lck";
$antinavette="$WORK/$k/".oppose($NS)."/$k.txt";
$antiflag= "$WORK/$k/".oppose($NS)."/$k.lck";
//------------------------
if (isset($_REQUEST['t'])) {
$trelu=$_REQUEST['t'];
//h echo "tparam: $trelu (sera remplace si navette lue)<br>";
}
$j="";
if (isset($_REQUEST['jeu']))$j=$_REQUEST['jeu'];
if ("$navette" != ".txt"){
$chgt=chgttime();
// essai
if (!$chgt) RECULER();
if (file_exists($flag) && file_exists($navette) ){
$fi=fopen($navette,'r'); //1
$LU1=true;
//b echo "lire navette: $navette<br>";
$trelu=trimcrlf(fgets($fi));
$t=$trelu;
$ignnb=trimcrlf(fgets($fi));
$liste=trimcrlf(fgets($fi));
$prochain=trimcrlf(fgets($fi));
$ignns=trimcrlf(fgets($fi));
$ignns1=substr($ignns,0,1);
$avous=$ignns1==$NS;
$bonnefin=trimcrlf(fgets($fi));
// $savefin=$bonnefin;
$nous="N";
$ouf=strpos($bonnefin,"Sud");
if ($ouf>0)$nous="S";
// echo "----------------C<br>";
// en réserve pour acheminer un message entre les joueurs, actuellement pas utilisé
$message=trimcrlf(fgets($fi));
// -----------------------------------
fclose($fi);
$tlu=true;
$actuelchiffre=false;
for ($i6=0;$i6<6;$i6=$i6+1){
if (strpos("!".$liste,substr("123456",$i6,1)))$actuelchiffre=true;
}
$actuellettre=false;
for ($i6=0;$i6<6;$i6=$i6+1){
if (strpos("!".$liste,substr("ABCDEF",$i6,1)))$actuellettre=true;
}
$actuel=(("NS"=="S" && $actuelchiffre ) || ("$NS"=="N" && $actuellettre));
//---------------------------
$premlettre=substr($bonnefin,0,1);
// traitement de gagannt par famine
if (("$premlettre"=="S" || "$premlettre"=="N") && strpos($bonnefin,"gagnant")>0) {
if (!$terminex2 && $NS==substr($bonnefin,0,1)) raw(2229,"$prochain, $t , $bonnefin\r\n");//prevcase: $prevcase ");
$termine=true;
if ("$premlettre"=="$NS") {
$verdict= '<span style="color: #00ff00"><b>gagné (par famine). </b><span style="color: #000000">';
$verdictbrut= 'gagné (par famine).';
}
else {
$verdictbrut= 'perdu (par famine) ';
$verdict= '<span style="color: #ff0000"><b>perdu (par famine). </b><span style="color: #000000"> ';
}
};
// traitement de gagne
if (("$premlettre"=="S" || "$premlettre"=="N") && strpos($bonnefin,"gagne")>0) {
$termine=true;
if (!$terminex2 && $NS==substr($bonnefin,0,1)) raw(2229,"$prochain, $t, $bonnefin\r\n");//prevcase: $prevcase ");
// ici dfin de partie S ou N a gagné
$termine=true;
if ("$premlettre"=="$NS") {
$verdict='<span style="color: #00ff00"><b>gagné </b><span style="color: #000000">';
$verdictbrut='gagné';
}
else
{
$verdict='<span style="color: #ff0000">perdu. </b><span style="color: #000000">';
$verdictbrut='perdu.';
}
};
// fini gagne
//---------------------------
}
}
// echo "----------------g<br>";
// ---------------------------
// startfime si yaeubold sans doute plus utile
// efacser navette si perdu (faudrait un délai! sinon risque de faire avant lu par gagné!)
$fi="not opened"; //sera le fichiernavette
$token="";
$stampprev="0";
if (isset($_REQUEST['stampstart']) ) {
$stampprev=$_REQUEST['stampstart'];
}
// echo "----------------L56br>";
global $k;
$nav=$k."_1.txt"; // le fichier navette recopié dans dossiers N ou S
if (file_exists($nav)) unlink($nav);
// echo "----------------L3<br>";
// echo "----------------L2<br>";
// redondant ?
// redondant ?
if (isset($_REQUEST['periode']) ) {
$PERIODE=$_REQUEST['periode'];
if (!isnum($PERIODE)){
ALERT(11,"periode doit etre numérique, vous avez donne: $PERIODE");
RECULER();
return;
}
// echo "param periodedemandee $PERIODEDEMANDEE <br>\n";
if ("$PERIODE"<="0") {
echo "impossible période <=0\"<br>\n";
return;
}
$periodems=1000*$PERIODE;
}
// echo "----------------l<br>";
// $avous reçu en parametre signifie que tour precedent deja a moi de jouer
$avouslu=$avous;
if (isset($_REQUEST['avous']) && strlen($trelu)==0) {
$avous=$_REQUEST['avous'];
if ("$avous"!="$avouslu") ALERT(12,"avous: lu: $avouslu param:$avous");
echo "<br>param avous:$avous<br>";
}
function raw($num,$msg){
global $WORK;
global $nomcsv; // hgaffe à l'effet de bord
global $NS; // pôur sion volait savoir qui cause, pas utilise
if (!isset($nomcsv) && isset($_REQUEST['token']) ){
$nomcsv="$WORK/".$_REQUEST['token']."/".$_REQUEST['token'].".csv";
}
if (isset($nomcsv) ){
if(strlen($nomcsv)>0 && strpos($nomcsv,"-")){
// ALERT(13,"nomcsv: $nomcsv");
$history=fopen($nomcsv,'a');
if (strlen($msg)==0) fwrite($history,"$msg\r\n");
fwrite($history,$msg);
fclose($history);
}
}
}
// tonton comme function
function tontong($terrain){
return "";
//tontong local
$ttg="";
$deupt=false;
for ($itg=0;$itg<strlen($terrain);$itg++){
$uncar=substr($terrain,$itg,1);
if ("$uncar"==" " && substr($ttg,strlen($ttg)-1)!="," )$ttg=$ttg.",";
if ("$uncar">="0" && "$uncar"<="9")$ttg=$ttg.$uncar;
if ("$uncar">="A" && "$uncar"<="Z")$ttg=$ttg.$uncar;
if ("$uncar"==":") $ttg=substr($ttg,0,strlen($ttg)-1);
}
return $ttg;
}
//message
/** selonn ?????
* Get current user IP Address.
* @return string
*/
function get_ip_address() {
if ( isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {
return $_SERVER['HTTP_X_REAL_IP'];
} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
// Proxy servers can send through this header like this: X-Forwarded-For: client1, proxy1, proxy2
// Make sure we always only send through the first IP in the list which should always be the client IP.
return (string) self::is_ip_address( trim( current( explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) );
} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
return $_SERVER['REMOTE_ADDR'];
}
return '';
}
function graines($ou){
global $t;
// remplacer ] de fin par un espace
// uitilie si demance compte de S:
// $tt=substr($t,0,strlen($t)-1)." ";
$ici=strpos($t,$ou.":")+2;
// si nom pas dans la liste
if (!$ici) return 0;
$suite=substr($t,$ici);
// chercher espâce qui suit
$longdunombre=strpos($suite," ");
if (!$longdunombre) $longdunombre=strlen($suite)-1;
$gr=substr($suite,0,$longdunombre);
return $gr;
}
function ligne($q){
$image="gt/l".graines($q).".jpg";
echo "\n<input disabled src='".$image."' style='width:100%;height:5% ;' size='4' type='image' >";
} // function ligne
function casejouee(){
global $prochain;
global $cases;
global $NS;
global $stampstart;
global $stampprev;
global $elapsed;
if (strlen($NS)==0) return "";
// fusionner les boutons pour avoir LA case à distribuer
$cmd="";
// rcherche clic sur une case image
for ($cases=1;$cases<=13;$cases++){
$nom="C".$cases;
if ($NS=="S") $lettre=substr("?ABCDEF123456",$cases,1);
if ($NS=="N") $lettre=substr("?654321FEDCBA",$cases,1);
$one="";
if (isset($_REQUEST[$nom."_x"]) ){
$one=$_REQUEST[$nom."_x"];
if (!isset($lettre))ALERT(14,"$cases NS:$NS");
$cmd=$lettre;
// des exec case jouee incremente $elapsed du compteur javascrupt
if ("$NS" != "S" || $prochain>1) $elapsed=$elapsed+$stampstart-$stampprev;
}
} // fin de for 1 a 12
// fin de for 1 a 12
return $cmd;
} // fin de case jouee
// fini cases jouee
function plateau($num){
global $NS;
global $SOON;
if ($SOON) {
//ALERT(15,"SOON plateau");
return;
}
// echo "plateau $num<br>";
if ("$NS"=="N") plateauU($num,"N","S","654321FEDCBA");;
if ("$NS"=="S") plateauU($num,"S","N","ABCDEF123456");
}
function plateauU($num,$bas,$haut,$ordre){
global $termine;
// global $SMARTPHONE;
global $LARGEUR;
global $periodems;
global$elapsed;
global $yaeubold;
global $avous;
global $j;
global $start;
global$pojoueur;
global $t ;
global $liste;
global $termine;
global $iteration;
global $NS;
global $prochain;
global $jeu;
global $SHOWNUM;
global $ECHOPLATEAU;
global $SOLO;
global $PERIODE;
global $actuelchiffre;
global $actuellettre;
global $actuel;
$faut=false;
$espoir=false;
$parmi=false;
// douteux avous!
if ("$NS"=="S")$avous=true;
// actuel sera vrai si un chiffre dans la liste
$actuelS=("$NS"=="S" && $actuelchiffre );
$actuelN=("$NS"=="N" && $actuellettre);
$actuel=$actuelN || $actuelS;
if ($ECHOPLATEAU) {
echo "$NS liste:$liste lettre:$actuellettre chiffre:$actuelchiffre actuel:$actuel<br>";
if ("$NS"=="S") {
echo "SOLO:$SOLO PERIODE:$PERIODE NS:$NS avous:$avous iteration:$iteration liste:$liste chiffre:$actuelchiffre actuel:$actuel<br>";
}
if ("$NS"=="N") {
echo "SOLO:$SOLO PERIODE:$PERIODE NS:$NS avous:$avous iteration:$iteration liste:$liste lettre:$actuellettre actuel:$actuel<br>";
}
echo "$t<br>";
}
ligne($haut);
echo "<br>\n";
$yaeubold=false;
$WIDTH="14%";
$HEIGT="30%";
$px="30px";
$STYLE="style='width:$WIDTH;height:$HEIGT;font-size:$px'";
for ($cases=1;$cases<=12;$cases++){
// test graines
$lacase=substr("x".$ordre,$cases,1);
$initiale=$lacase;
$parmi=strpos($ordre,$initiale);
$contenu=graines($lacase);
$cnord=$initiale ;// .":".$contenu;
$bin="";
$bout="";
$disabled=" disabled ";
//$px="20px";
$jouerlacase=""; // infobulle de la case
$pos=strpos("x".$liste,$initiale);
//echo "$pos";
// calculer si la case est autorisée ch sera vrai si case à montrer
$ch=($cases>=7 && $avous && ( $pos>0 || $contenu==0) && ( "$iteration"!="2" || "$NS"=="N"));
//echo "$ch";
if ($ch && $pos>0){
$disabled="";
$prevision=$contenu;
if ($prevision>"12")$prevision=$prevision+1;
if ($prevision>"24")$prevision=$prevision+1;
$prevision=$prevision+strpos($ordre,$initiale);
$finale=substr($ordre.$ordre.$ordre.$ordre,$prevision,1);
if ("$contenu"=="0")$jouerlacase="Rien à distribuer. ";
if ("$contenu"=="1") $jouerlacase="Distribuer cette graine. ";
if ("$contenu">"1") $jouerlacase="Distribuer $contenu graines.";
}
if ( $cases>6 && strlen($disabled)>0 && !$termine) $jouerlacase="Injouable.".$Z;
if ( $cases<=6 ) $jouerlacase="Pas toucher case de l'adversaire!";
// au coup 2 (avant de lancer dessous, ne rien autoriser
if ("$iteration"=="2") $disabled=" disabled ";
$nom="C$cases";
$Z=""; // pour accueillir faut nourrir
if ($cases>6 && $avous && strlen($disabled)>0 && "$contenu">"0") {
$Z=$Z." Faut nourrir l'adversaire";
}
// echo $contenu;
if ("$contenu"=="0" && strlen($disabled)>0) {
$Z="$Z (vide)";
// echo "!V";
}
$jouerlacase=$jouerlacase . $Z;
// choix de l'image
$image='gt/r'.$contenu.'.jpg'; // par defaut icone barrée
//echo "$ch.$contenu".strlen($disabled);
// si besoin ione jouable
//if ($ch&& strlen($disabled)==0 && "$iteration">="3" && !$termine ) {
if ($ch&& strlen($disabled)==0 && !$termine ) {
$image='gt/b'.$contenu.'.jpg'; // icone jouable
// echo"=";
$yaeubold=true;
}
// 0 jouable
if ($actuel && $cases>=7 && $ch&& strlen($disabled)>0 && $contenu==0 && !$termine ) {
$image='gt/b'.$contenu.'.jpg'; // icone jouable
// echo"_";
}
// echo "$SOLO";
if ($SOLO && "$NS"=="N")$image='gt/r'.$contenu.'.jpg'; // barre
if ($termine) $jouerlacase="C'est fini!).";
//
if ($SHOWNUM)echo substr("xABCDEF123456",$cases,1);
//if ($disabled) echo "D"; else echo"d";
echo "\n<input $STYLE type='image' onclick='invalider(\"$NS\")' src='$image' $disabled id='$nom' name='$nom' title='$jouerlacase' alt='$jouerlacase' value='' >";
if ("$cases"=="6" || "$cases"=="12") echo "<br>";
} // for cases
ligne($bas);
echo "<br>\n";
if ($termine) $yaeubold=false;
if ($yaeubold) $start=time(); // signe a moi de jouer, chrono on
} // -------------------- fin de plateau
// -------------------- fin de plateau
function jouerauhasard() {
global $liste;
// prendre au hasard dans la liste
// ne jouera que si SOLO sinon bouton pas la
$laquelle=rand(0,strlen($liste)-1);
$lettre=substr($liste,$laquelle,1);
$place=1+strpos("......FEDCBA",$lettre);
$idclic='C'.$place;
echo "\n<input hidden type=button id='autoplay' name=\"random\" style='background-color:green;color:black' value='Jouer au hasard' onclick=\"document.getElementById('".$idclic."').click()\" >";
}
function setbody(){
global $w;
global $NS;
global $termine;
global $iteration;
global $SOLO;
global $actuelchiffre;
global $actuellettre;
global $actuel;
global $flag;
global $longparam;
global $periodems;
echo "<!-- set body NS:$NS SOLO:$SOLO-->\n";
if ("$w"=="-1" )return;
if ($termine) {
echo "<body>";
return;
}
if (count($_REQUEST)==0) {
enigme();
echo "<body onload='init()'>";
return;
}
if ("$NS"=="N" && $SOLO ){
//11 echo "autoplay et timeout <br>";
if ("$iteration"=="2") echo "<body>";
else echo "\n<body onload=\"setTimeout(myrefresh,$periodems);document.getElementById('autoplay').click(); \">\n";
return;
}
// echo "<!-- \n ECRIT un deux C:$actuelchiffre L:$actuellettre $longparam-->\n";
// echo "<!-- \n ECRIT flag: $flag existe: ".file_exists($flag)."-->";
echo "<!-- pas solo NS:$NS ch:$actuelchiffre le:$actuellettre -->";
//CHANTIER EN COURS
if (("$NS"=="S" && $actuelchiffre) || ("$NS"=="N" && $actuellettre)){
echo "<body>";
return;
}
echo "\n<body onload=\"setTimeout(myrefresh,$periodems)\">\n";
} // function setbody
function notused(){
global $flag;
global $longparam;
global $periodems;
//if (isset($adv)) $wsolo="$adv"=="ShadockDuDessous";
if ("$iteration"=="2" && $SOLO && "$NS"=="N" ) {
echo "<!-- \n ECRIT TROIS BODY body onload=\"document.getElementById('autoplay').click()-->\n";
echo "<!-- SOUCI ne jpoue pas! : <body onload=\"document.getElementById('autre').click(); \">\n -->";
if ($termine) echo "<body>";
else {
if (false && "$iteration"=="2") echo "\n<body onload=\"document.getElementById('autre').click(); \">\n";
else {
if ("$NS"=="N") {
echo "\n<body onload=\"document.getElementById('autoplay').click(); \">\n";
ALERT(16,"TROIS");
}
if ("$NS"=="S") echo "\n<body >\n";
}
}
}
else{
if (isset($periodems)) {
$bf="";
if (isset($_REQUEST['bonnefin'])) $bf=$_REQUEST['bonnefin'];
echo "<!-- j:$j pas bonne idee bonnefin:$bf-->\n";
// raté!
echo "<!-- CINQ termine:$termine NS:$NS bf:$bf-->\n";
// bizarre ci dessous ???????? mis Nord
if ("$bf"=="en cours. (A Nord de jouer).") {
echo "\n<body onload='setTimeout(myrefresh,$periodems)' >\n";
// alert("SUQTRE");
}
else {
echo "<!-- SIX web:$w -->\n";
// alert("SIX w:$w iteration:$iteration" );
if ("$w"=="2")$SOON=true; // donc on continue iteration=2
if ($termine || "$w"=="2") echo "<body>";
else {
// GAFFE duo serai touromaique!
echo "<!-- SIXBIS termine:$termine NS:$NS bf:$bf-->\n";
// if ("$NS"=="N" && "$adv"=="ShadokDuDessous") {
if ("$NS"=="N" && $SOLO) {
echo "\n<body onload=\"document.getElementById('autoplay').click(); \">\n";
ALERT(17,"CINQ");
}
else {
echo "<!-- NS: $NS bf:$bf -->";
if ("$bf"=="en cours. (A Nord de jouer).")echo "\n<body onload='setTimeout(myrefresh,$periodems)' >\n";
else {
// echo "\n<body >\n";
echo "<!-- NS:$NS A SUD -->";
if ("$NS"=="S" && "$bf"=="en cours. (A Nord de jouer)."){
echo "<!-- SIXBIS UN -->";
echo "\n<body onload='setTimeout(myrefresh,$periodems)' >\n";
}
if ("$NS"=="N" && "$bf"=="en cours. (A Sud de jouer)."){
echo "<!-- SIXBIS DEZUX -->";
echo "\n<body onload='setTimeout(myrefresh,$periodems)' >\n";
}
}
}
}
}
}
}
}
// setbody
// ------ fin des functions debut de l'exécution