Terve
Tuli veljeltä idea toteuttaa tammi kaksinpelinä, mutta ongelma on, että miten onnistuu netinvälityksellä PHP-pelin pelaaminen vastakkain? Siis, on kone a ja b, jotka pelaavat netinvälityksellä sitä tammea... Tarvitseeko tämä jotain erikoiskieltä tai muuta? Tietokannoilla tämän voisi kyllä toteuttaa, mutta jos olisi kätevämpikin tapa olemassa...?
Eihän sille PHP:n kannalta ole mitään väliä missä päin maailmaan ne sivuston käyttäjien koneet sijaitsee.
Ei, mutta miten voisin tehdä sen helpommin, vai voinko?
No siis jos hieman avaisit mitkä on ongelmana.
lainaus:
Tietokannoilla tämän voisi kyllä toteuttaa, mutta jos olisi kätevämpikin tapa olemassa...?
Ilmeisesti tarkoitat siis että kun pelitilanne palvelimen päässä pitää tallentaa johonkin, niin onko "kätevämpiä" tapoja kuin tietokanta?
No, kätevyys on aika subjektiivinen käsite. Muita vaihtoehtoja on esimerkiksi tiedosto tai jaettu muisti (shmop_.. -funktiot)
Sitten netistä löytyy valmiita kirjastoja, jotka tarjoavat sovellusmuuttujia (kuten istuntomuuttuja $_SESSIONissa, mutta kaikille käyttäjille yhteiset). Ne tietysti käyttävät taustalla tiedostoa tai jaettua muistia, mutta piilottavat niihin liittyvän vaivan koodarilta.
No, teempä sen tietokannalla. Muuten, miten ympyrään (imageellipse()) asetetaan taustaväri?
Edit. Keksin imagefilledellipse();
Taustaväri? Piirrät sen taustan haluamallasi värillä ennen ellipsin/ympyrän piirtämistä: imagefilledrectangle
Juups, hoksasin sen kun käytin hakua.. :D
Vielä yksi kysymys:
Jos minulla on piirretty taulukko:
<?php //Luodaan kuva $kuva = imagecreatetruecolor(400, 400); //Taustaväri, ja asetetaan se taustaksi $bg = imagecolorallocate($kuva, 255, 255, 255); imagefill($kuva, 0, 0, $bg); //Alustetaan värejä $musta = imagecolorallocate($kuva, 0, 0, 0); $valkoinen = imagecolorallocate($kuva, 255, 255, 255); $punainen = imagecolorallocate($kuva, 255, 25, 0); //Kehikko imagerectangle($kuva, 0, 0, 399, 399, $musta); //Eka rivi imagerectangle($kuva, 0, 0, 50, 50, $musta); imagerectangle($kuva, 50, 0, 100, 50, $musta); imagerectangle($kuva, 50, 0, 150, 50, $musta); imagerectangle($kuva, 50, 0, 200, 50, $musta); imagerectangle($kuva, 50, 0, 250, 50, $musta); imagerectangle($kuva, 50, 0, 300, 50, $musta); imagerectangle($kuva, 50, 0, 350, 50, $musta); imagerectangle($kuva, 50, 0, 400, 50, $musta); //Tokarivi imagerectangle($kuva, 0, 100, 50, 50, $musta); imagerectangle($kuva, 50, 100, 50, 50, $musta); imagerectangle($kuva, 100, 100, 50, 50, $musta); imagerectangle($kuva, 150, 100, 50, 50, $musta); imagerectangle($kuva, 200, 100, 50, 50, $musta); imagerectangle($kuva, 250, 100, 50, 50, $musta); imagerectangle($kuva, 300, 100, 50, 50, $musta); imagerectangle($kuva, 350, 100, 50, 50, $musta); imagerectangle($kuva, 400, 100, 50, 50, $musta); //Kolmas rivi imagerectangle($kuva, 0, 150, 50, 50, $musta); imagerectangle($kuva, 100, 150, 50, 50, $musta); imagerectangle($kuva, 150, 150, 50, 50, $musta); imagerectangle($kuva, 200, 150, 50, 50, $musta); imagerectangle($kuva, 250, 150, 50, 50, $musta); imagerectangle($kuva, 300, 150, 50, 50, $musta); imagerectangle($kuva, 350, 150, 50, 50, $musta); imagerectangle($kuva, 400, 150, 50, 50, $musta); //Neljäs rivi imagerectangle($kuva, 0, 200, 50, 50, $musta); imagerectangle($kuva, 100, 200, 50, 50, $musta); imagerectangle($kuva, 150, 200, 50, 50, $musta); imagerectangle($kuva, 200, 200, 50, 50, $musta); imagerectangle($kuva, 250, 200, 50, 50, $musta); imagerectangle($kuva, 300, 200, 50, 50, $musta); imagerectangle($kuva, 350, 200, 50, 50, $musta); imagerectangle($kuva, 400, 200, 50, 50, $musta); //Viides rivi imagerectangle($kuva, 0, 250, 50, 50, $musta); imagerectangle($kuva, 100, 250, 50, 50, $musta); imagerectangle($kuva, 150, 250, 50, 50, $musta); imagerectangle($kuva, 200, 250, 50, 50, $musta); imagerectangle($kuva, 250, 250, 50, 50, $musta); imagerectangle($kuva, 300, 250, 50, 50, $musta); imagerectangle($kuva, 350, 250, 50, 50, $musta); imagerectangle($kuva, 400, 250, 50, 50, $musta); //Kuudes rivi imagerectangle($kuva, 0, 300, 50, 50, $musta); imagerectangle($kuva, 100, 300, 50, 50, $musta); imagerectangle($kuva, 150, 300, 50, 50, $musta); imagerectangle($kuva, 200, 300, 50, 50, $musta); imagerectangle($kuva, 250, 300, 50, 50, $musta); imagerectangle($kuva, 300, 300, 50, 50, $musta); imagerectangle($kuva, 350, 300, 50, 50, $musta); imagerectangle($kuva, 400, 300, 50, 50, $musta); //Seitsemäs rivi imagerectangle($kuva, 0, 350, 50, 50, $musta); imagerectangle($kuva, 100, 350, 50, 50, $musta); imagerectangle($kuva, 150, 350, 50, 50, $musta); imagerectangle($kuva, 200, 350, 50, 50, $musta); imagerectangle($kuva, 250, 350, 50, 50, $musta); imagerectangle($kuva, 300, 350, 50, 50, $musta); imagerectangle($kuva, 350, 350, 50, 50, $musta); imagerectangle($kuva, 400, 350, 50, 50, $musta); //Kahdeksas rivi imagerectangle($kuva, 0, 400, 50, 50, $musta); imagerectangle($kuva, 100, 400, 50, 50, $musta); imagerectangle($kuva, 150, 400, 50, 50, $musta); imagerectangle($kuva, 200, 400, 50, 50, $musta); imagerectangle($kuva, 250, 400, 50, 50, $musta); imagerectangle($kuva, 300, 400, 50, 50, $musta); imagerectangle($kuva, 350, 400, 50, 50, $musta); imagerectangle($kuva, 400, 400, 50, 50, $musta); //Lähetetään selaimelle tieto header("Content-type: image/png"); imagepng($kuva); ?>
(Joo voi tehdä for-silmukalla ja vähän helpommin) Niin, jos laitan joka toiselle taustavärin, niin kaikki siinä välissä menee myös sellaseks :S
Ootkohan nyt ihan varma, ettet sekoita käsitteitä taustaväri ja täyttöväri?
Anyways, luulisin että yrität jotain tämän tyylistä:
http://grez.info/putka/MIB/kuva.php
Lähdekoodi: http://grez.info/putka/MIB/kuva.phps
Edit. Kiitos tuosta For-silmukasta! :D
Niin ja tässä esimerkki eri väreistä. (Eli ympyrä, valkoinen taustaväri, punainen täyttöväri ja musta ääriviiva)
Joo, koodasinkin jo pelinappulat aikaisemmin. Kysyisin vielä, että miten saa läpinäkyvän taustan kuvaan?
Läpinäkyvyyttä voi tehdä kahdella tavalla. Avainvärillä (jos on paletillinen kuva) tai alpha-kanavalla (täysvärikuvat)
Tuossa sinun tapauksessa suosittelisin kyllä tekemään kuvan paletillisena (imagecreate) ja käyttämään imagecolortransparent määrittämään yhden värin läpinäkyväksi.
Jos välttämättä haluat tehdä täysvärikuvan (imagecreatetruecolor) niin määritä sille läpinäkyvyys imagealphablending ja sitten tee läpinäkyviä värejä (imagecolorallocatealpha).
Ja sitten se PHP:n dokumentaation lukeminen ei oikeesti oo niin hirveän vaikeeta. Itsekään en ole koskaan käyttänyt PHP:n image-funktioita, ja nyt vaan tässä sua neuvoakseni oon aina lueskellut sieltä ohjeista mitä pitää tehdä.
Heh, selvä. :D
Tämä on aika monimutkikkainen juttu toteuttaa. Mitenköhän teen tämän 8 x 8 taulukon ja miten asettelen nappulat? Tässä pohdittavaa yöksi, katsotaan jos aamulla jaksaisi.
Kysympä vielä tässä lisää. Jos valitsee nappulan jota siirää (klikkaa siihen), niin miten se kannattaisi tehdä? Minusta ei ole järkevää, että se olisi linkki mihinkään, koska se lataa silloin sen kokonaan uusiksi.
MIB kirjoitti:
Kysympä vielä tässä lisää. Jos valitsee nappulan jota siirää (klikkaa siihen), niin miten se kannattaisi tehdä? Minusta ei ole järkevää, että se olisi linkki mihinkään, koska se lataa silloin sen kokonaan uusiksi.
AJAX
https://www.ohjelmointiputka.net/oppaat/opas.
Jos tekee tuolla logiikalla, että palvelinpää piirtää kuvaa, niin Ajaxista ei IMO ole paljoakaan hyötyä, paitsi kenties sen pollaamiseen, milloin vastustaja on valmis.
Mutta se siirtovalinta kannattaa kyllä pistää javascriptillä talteen ja lähettää siirtopyyntö palvelimelle vasta kun käyttäjä on valinnut sekä lähderuudun että kohderuudun. Javascriptillä voisi vieläpä varmentaa, että siirto on laillinen, niin ei tarvitsisi turhaan ladata "ei sallittu" tietoa palvelimelta. (Toki palvelin tarkistaa myös siirron laillisuuden)
Tuon sen talteen ottaminen on helpohko toteuttaa JavaScriptillä, kun tässä vähän miettii. Tuon tarkistaminen on kyllä vähän hankalahko. Ajattelin, että laitan PHP:llä linkiksi vaan ne ruudut, jotka ovat "laillisia". Onko tämä ok-homma?
No sen ekan painalluksen, eli ruutujen joissa on oma nappula osaltahan se on toimiva vaihtoehto, mutta lailliset kohderuudut vaihtelee valitun nappulan mukaan.
Kaiken muun uskon onnistuvan, mutta se siirtojen mahdollisuuksien laskeminen on vaikein kohta.
Jouduthan joka tapauksessa tarkistamaan, että siirto on laillinen. Tarkista etukäteen kaikille mahdollisille siirroille, ovatko ne laillisia, niin voit näyttää vain ne.
Aihe on jo aika vanha, joten et voi enää vastata siihen.