Tulkaa joku pelaan nettiin nollaristiä? Tai tulkaa vaikka kaikki! Ohjelma tietysti vuorottelee sitä, kumman laittovuoro. Olen laittanut jo ristin. Tietty 5 peräkkäin voittaa ja voittajasta on itse pidettävä kirjaa - ohjelma ei sitä huomaa. Sivu päivittyy 5 sekunnin välein ja on sikäli huonosti toteutettu verkkopeli, mutta toimii.
https://www.petke.info/nollaristi/
Koodissa ristinolla pelin tilanne on talletettuna tiedostoon ristinolla.txt ja sen ensimmäinen merkki kertoo kumman laittovuoro on. En ala sen kummemmin koodeja selostamaan enkä laita kaikkia näkyville, ellei joku kysy ja ole kiinnostunut.
index.php:
<html>
<body>
<button onclick="aloitaUusiPeli()">Aloita uusi peli</button>
<script>
function aloitaUusiPeli() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'tiedosto.php?action=alustaUusiPeli', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var vastaus = xhr.responseText;
console.log(vastaus);
location.reload(); // Lataa sivu uudelleen pelin aloittamisen jälkeen
}
};
xhr.send();
}
function solunKlikkaus(rivi, sarake) {
// Kutsu PHP-ohjelmaa AJAX-pyynnöllä ja lähetä parametrit rivi ja sarake
var xhr = new XMLHttpRequest();
var url = 'php-ohjelma.php?rivi=' + rivi + '&sarake=' + sarake;
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// Tee jotain vastauksen kanssa, kuten päivitä sivu tai näytä vastauksen sisältö
var vastaus = xhr.responseText;
location.reload();
}
location.reload();
};
xhr.send();
}
setTimeout(function(){
window.location.reload();
}, 5000);
</script>
<?php
function tulosta($merkit) {
$tdstomerkit=file_get_contents('ristinolla.txt');
$siirtovuoro=substr($tdstomerkit,0,1);
echo $siirtovuoro . ":n laittovuoro";
echo ("<table border='1'>");
//echo $merkit;
$indeksi=1;
//tulostaa ristinollataulukon
for ($rivi=1; $rivi<=30; $rivi++) {
echo ('<tr>');
for ($sara=1; $sara<=30; $sara++) {
echo '<td>';
switch (substr($merkit,$indeksi,1)) {
case 't': //ruutu on tyhja
echo "<img src='tyhja.gif' onclick='solunKlikkaus($rivi, $sara)'>";
break;
case '0':
echo "<img src='0.jpg'>";
break;
case 'X':
echo "<img src='1.jpg'>";
break;
}
$indeksi=$indeksi+1;
echo '</td>';
}
echo ('</tr>');
}
echo ('</table>');
}
if (!file_exists("ristinolla.txt")) { //jos tiedostoa ei ole, niin tehdään se ...
$myfile = fopen("ristinolla.txt", "w");
$merkit='X'; //tiedosoton ensimmäinen merkki kertoo kumman laitto vuoro
for ($rivi=1; $rivi<=30; $rivi++) {
for ($sara=1; $sara<=30; $sara++) {
$merkit=$merkit . 't'; //... ja alustetaan 't' niinkuin tyhjä ruuduilla
}
}
file_put_contents("ristinolla.txt",$merkit);
} else {
$myfile = fopen("ristinolla.txt", "a");
}
$merkit = file_get_contents('ristinolla.txt');
tulosta($merkit);
?>
</body>
</html>php-ohjelma.php:
<?php if (isset($_GET['rivi']) && isset($_GET['sarake'])) { $rivi = $_GET['rivi']; $sarake = $_GET['sarake']; $tdstomerkit=file_get_contents('ristinolla.txt'); $siirtovuoro=substr($tdstomerkit,0,1); //echo $siirtovuoro; //echo $ind; // Tässä voit suorittaa haluamasi toimet parametrien perusteella $ind=($rivi-1)*30+$sarake; //viittaa merkkijonon indeksiin, mitä painettiin if ($siirtovuoro=='0') { $tdstomerkit="X" . substr($tdstomerkit,1,$ind-1) . "0" . substr($tdstomerkit,$ind+1); } else { $tdstomerkit="0" . substr($tdstomerkit,1,$ind-1) . "X" . substr($tdstomerkit,$ind+1); } file_put_contents("ristinolla.txt",$tdstomerkit); // Lähetä vastaus takaisin, esimerkiksi JSON-muodossa location.reload(); $vastaus = array('rivi' => $rivi, 'sarake' => $sarake, 'viesti' => 'Tämä on vastaus'); echo json_encode($vastaus); } else { // Käsittele virhetilanne, jos parametrit puuttuvat echo "Virhe: Parametrit puuttuvat"; } ?>
Toi ei oikein toimi. Ristejä ja palloja tulee vaikka 10 pituinen jono! Idea on kai, että jos on 5 jonossa, niin peli päättyy. Nyt se vaan jatkuu ..
Aihe on jo aika vanha, joten et voi enää vastata siihen.