Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: JavaScript matopeli

Sivun loppuun

punppis [27.05.2009 03:15:33]

#

Olen aina halunnut tehdä matopelin, mutta en ole osannut tai jaksanut. Nyt jaksoin ja tässä on lopputulos. Peli on täysin JavaScriptillä tehty.

Risuja, ruusuja ja muutosehdotuksia otetaan vastaan (sen takia tänne kirjoitinkin).

jo123 [27.05.2009 09:03:12]

#

Ihan kiva :). Perus toteutus ja toimiva, jos jotain haluaa lisätä niin aina silloin tällöin tulevat erikoissyömäpalat, joista saa enemmän pisteitä. Niiden pitäisi myös poistua kentältä esim. 10sek päästä.

ankzilla [27.05.2009 13:39:08]

#

Eka odotin perus ASCIImättöä, mutta tämä yllätti, hyvin tehty. :D

Taustalle kehittelet jonku matoaiheisen kuvion niin olé.

punppis [27.05.2009 13:45:40]

#

Pienensin vielä tuota kenttää ja nopeutin matoa hieman, tosin kuka vaan tehdä tämän sillä ovat vain muuttujan takana.

ankzilla [27.05.2009 14:05:40]

#

punppis kirjoitti:

Pienensin vielä tuota kenttää ja nopeutin matoa hieman, tosin kuka vaan tehdä tämän sillä ovat vain muuttujan takana.

Mut harvapa jaksaa/osaa alkaa tota säätään ^^

punppis [27.05.2009 16:09:11]

#

Noh, siellä on asetukset ihan sitä säätöä varten. Jos joku haluaa vaikka omille sivuilleen laadukkaan matopelin =D

Olli [27.05.2009 17:03:32]

#

Käsitinkö oikein siis tätäkö saa kopioida omille sivuilleen kunhan ei väitä omakseen?

edit: toimii FF 3.5 Beta 4, IE 8 ja Chrome-selaimilla ainakin. Operaa en jasksanu testata.

punppis [28.05.2009 00:40:33]

#

Olli kirjoitti:

Käsitinkö oikein siis tätäkö saa kopioida omille sivuilleen kunhan ei väitä omakseen?

edit: toimii FF 3.5 Beta 4, IE 8 ja Chrome-selaimilla ainakin. Operaa en jasksanu testata.

Juu siitä vaan.

Sisuaski [28.05.2009 06:44:26]

#

Ihan tyylikäs matopeli on :).

Onnistuin kuitenkin joutumaan pelissä tilanteeseen, jossa kentällä ei näkynyt ruokaa ollenkaan.
Pikaisen koodin katselemisen perusteella luulisin tämän koodinpätkän olevan syyllinen:

if(ruoka_ok) {
	syoRuoka();
}
else {
//...
}

taynna(x, y);
paa(x, y); // väritetään pää

Uusi ruoka generoidaan ennen uuden pään sijainnin täyttämistä, joten ruoka tulee ylikirjoitetuksi, jos se satutaan generoimaan samaan ruutuun, kuin mihin ollaan juuri siirtymässä.

punppis [28.05.2009 10:44:44]

#

Nyt ruoka generoidaan vasta tuon madon liikkumisen jälkeen. Sisuaskin kannattaa laittaa lotto vetämään.

Olli [31.05.2009 16:31:56]

#

punppis kirjoitti:

Sisuaskin kannattaa laittaa lotto vetämään.

Jaaha :D Tuohon tilanteeseen ei kovin suurta mahdollisuutta siis ei ole päästä?

Metabolix [31.05.2009 20:28:30]

#

Olli kirjoitti:

Jaaha :D Tuohon tilanteeseen ei kovin suurta mahdollisuutta siis ei ole päästä?

1 / (25 * 35) = 0,00114, kun jätetään täydet ruudut huomiotta. Oikeasti siis hieman suurempi.

Ihan siisti peli. Itse generoisin tuon pelilaudankin JS:llä, sen verran monta ruutua on. Samalla säästyisi getElementById:n käytöltä.

Antti Laaksonen [31.05.2009 21:04:30]

#

Metabolix kirjoitti:

1 / (25 * 35) = 0,00114, kun jätetään täydet ruudut huomiotta. Oikeasti siis hieman suurempi.

Siis syönti epäonnistuu yli todennäköisyydellä 0,11429 % eli onnistuu alle todennäköisyydellä 99,88571 %. Edelleen 10 syönnin sarja onnistuu alle todennäköisyydellä 98,86300 %, 100 syönnin sarja onnistuu alle todennäköisyydellä 89,19448 % ja 1000 syönnin sarja onnistuu alle todennäköisyydellä 31,86982 %. Eli jos syö pelissä 1000 kertaa, luultavasti virhe tapahtuu ainakin kerran – ellei punppis olisi korjannut sitä.

punppis [31.05.2009 22:31:58]

#

Metabolix kirjoitti:

Ihan siisti peli. Itse generoisin tuon pelilaudankin JS:llä, sen verran monta ruutua on. Samalla säästyisi getElementById:n käytöltä.

Miten tuon pelikentän saisi toteutettua JavaScriptillä, tai siis tehdäänhän table nytkin js:llä, mutta onko tähän joku järkevämpikin tapa? Miksi pitää säästyä getElementById:n käytöltä, onko tuo jotenkin hidasta?

Olen ihan noviisi tämän JS:n kanssa, joten neuvoja kaivataan!

Metabolix [31.05.2009 22:55:40]

#

Fx:n lähdekoodinkatselu johdatti harhaan ja näytti tuon JS:n tulostaman koodinkin HTML:nä, enkä huomannut, että se oli luotu document.writellä. Toinen tapa on käyttää DOMia. Tällöin pelikenttä pitää luoda vasta, kun sivu on ladattu kokonaan.

var taulu = [];
function getId(x, y) {
  return taulu[y][x];
}
function luo() {
  // Sivulle voi valmiiksi tulostaa vaikka tyhjän divin pelikenttää varten,
  // jotta se on helppo luoda jälkikäteen oikeaan paikkaan.
  var div = document.getElementById("pelikentta");

  var table = document.createElement("table");
  div.appendChild(table);
  var tbody = document.createElement("tbody");
  table.appendChild(tbody);
  for (var y = 0; y < 25; ++y) {
    var tr = document.createElement("tr");
    tbody.appendChild(tr);
    taulu[y] = [];
    for (var x = 0; x < 35; ++x) {
      var td = document.createElement("td");
      tr.appendChild(td);
      td.className = "tyhja";
      taulu[y][x] = td;
    }
  }
}
window.onload = luo;

Sivun alkuun

Vastaus

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

Tietoa sivustosta