Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kaksinpeli netissä

Sivun loppuun

MIB [05.09.2009 21:06:54]

#

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...?

Grez [05.09.2009 21:17:44]

#

Eihän sille PHP:n kannalta ole mitään väliä missä päin maailmaan ne sivuston käyttäjien koneet sijaitsee.

MIB [05.09.2009 21:18:33]

#

Ei, mutta miten voisin tehdä sen helpommin, vai voinko?

Grez [05.09.2009 21:32:18]

#

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.

MIB [05.09.2009 21:33:52]

#

No, teempä sen tietokannalla. Muuten, miten ympyrään (imageellipse()) asetetaan taustaväri?

Edit. Keksin imagefilledellipse();

Grez [05.09.2009 21:38:11]

#

Taustaväri? Piirrät sen taustan haluamallasi värillä ennen ellipsin/ympyrän piirtämistä: imagefilledrectangle

MIB [05.09.2009 22:17:41]

#

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

Grez [05.09.2009 22:22:08]

#

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

MIB [05.09.2009 22:29:51]

#

Edit. Kiitos tuosta For-silmukasta! :D

Grez [05.09.2009 22:40:16]

#

Niin ja tässä esimerkki eri väreistä. (Eli ympyrä, valkoinen taustaväri, punainen täyttöväri ja musta ääriviiva)

http://grez.info/putka/MIB/varit.php (lähdekoodi)

MIB [05.09.2009 22:44:23]

#

Joo, koodasinkin jo pelinappulat aikaisemmin. Kysyisin vielä, että miten saa läpinäkyvän taustan kuvaan?

Grez [05.09.2009 22:53:01]

#

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ä.

MIB [05.09.2009 23:13:16]

#

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.

MIB [06.09.2009 11:01:16]

#

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.

Niko [06.09.2009 11:21:29]

#

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.php?tunnus=ajax

Grez [06.09.2009 14:55:52]

#

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)

MIB [06.09.2009 15:00:08]

#

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?

Grez [06.09.2009 15:47:48]

#

No sen ekan painalluksen, eli ruutujen joissa on oma nappula osaltahan se on toimiva vaihtoehto, mutta lailliset kohderuudut vaihtelee valitun nappulan mukaan.

MIB [07.09.2009 08:16:43]

#

Kaiken muun uskon onnistuvan, mutta se siirtojen mahdollisuuksien laskeminen on vaikein kohta.

Metabolix [07.09.2009 09:19:14]

#

Jouduthan joka tapauksessa tarkistamaan, että siirto on laillinen. Tarkista etukäteen kaikille mahdollisille siirroille, ovatko ne laillisia, niin voit näyttää vain ne.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta