Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Funkcja rysująca elementy tabeli
Forum PHP.pl > Forum > Przedszkole
tzm
Znów coś pochrzaniłem, już chyba jaśniej nie potrafię napisać kodu sprawdzającego stan żywych i martwych komórek, wydaje mi się że kod jest o niebo czytelniejszy i lepszy od poprzedniej wersji którą męczyłem cały zeszły tydzień, lecz tutaj znów pojawia się problem...

Brakuje mi pomysłów jak rysować nowe elementy td dla komórek. Kod chyba nie wymaga komentarzy bo jest napisany po polsku specjalnie żeby ułatwić pomoc jeśli się znajdzie ktoś tak życzliwy i zerknie na te parę chwil...

Teoretycznie wykonuję w pętli funkcję ozywKomorke która niestety - ożywia mi tylko i wyłącznie jedną. Co źle robię? Serio już mam dość tego problemu ale poddawać się nie chce.

  1. <!DOCTYPE html>
  2.  
  3. <title>zycie</title>
  4. #game{
  5. background:red;
  6. min-width:100px;
  7. min-height:100px;
  8. }
  9. .zywa{background:white;width:8px;height:8px;border:1px solid black;}
  10. .martwa{background:grey;width:8px;height:8px;border:1px solid blue;}
  11. </style>
  12. function test() {
  13. game = new zycie(10, 5);
  14. }
  15.  
  16. function zycie(rows, columns) {
  17. var swiat = budujSwiat();
  18. function budujSwiat() {
  19. var swiat = [];
  20. for(var i = 0; i<rows; i++) {
  21. var innerArr = [];
  22. for(var j = 0; j<columns; j++) {
  23. innerArr.push(0);
  24. }
  25. swiat.push(innerArr);
  26. }
  27. return swiat;
  28. }
  29. function pokazSwiat(swiat) { // wyswietlanie swiata
  30. for (var x = 0; x < swiat.length; x++) {
  31. for (var y = 0; y < swiat.length; y++) {
  32. ozywKomorke(x, y, swiat[x][y]);
  33. }
  34. }
  35. }
  36.  
  37. function ozywKomorke(x, y, alive) {
  38. var swiat = document.getElementById('game');
  39. var komorka = "";
  40. alive : komorka += '<td class="zywa"></td>';
  41. swiat.innerHTML = komorka;
  42. }
  43. function losowaPopulacja(swiat) {
  44. for(var x = 0; x < swiat.length; x++) {
  45. for(y = 0; y < swiat[x].length; y++) {
  46. if(Math.log(Math.random()*1) < -0.6) {
  47. swiat[x][y]=1;
  48. }
  49. }
  50. }
  51. }
  52. function manual(swiat) {
  53. swiat[20][20] = 1;
  54. swiat[21][20] = 1;
  55. swiat[22][20] = 1;
  56. }
  57. function zyweC(swiat, x, y) {
  58. if(x > 0 && y > 0 && x < rows-1 && y < columns-1) {
  59. var wszystkieZywe = swiat[x-1][y-1]+swiat[x][y-1]+swiat[x+1][y-1]+ swiat[x-1][y]+swiat[x+1][y]+swiat[x-1][y+1]+ swiat[x][y+1]+swiat[x+1][y+1];
  60. console.log(wszystkieZywe);
  61. return wszystkieZywe;
  62. } else {
  63. return 0;
  64. }
  65. }
  66. function sprawdz(swiat) {
  67. var nowySwiat = budujSwiat();
  68. for(var x = 0; x < swiat.length; x++) {
  69. for(var y = 0; y < swiat[x].length; y++) {
  70. var komorka = swiat[x][y];
  71. var zywe = zyweC(swiat, x,y);
  72.  
  73. if(komorka == 1) {
  74. if(zywe < 2) {
  75. nowySwiat[x][y] = 0;
  76. } else if(zywe == 2 || zywe == 3) {
  77. nowySwiat[x][y] = 1;
  78. } else if(zywe > 3) {
  79. nowySwiat[x][y] = 0;
  80. }
  81. } else if(komorka == 0 && zywe == 3) {
  82. nowySwiat[x][y] = 1;
  83. }
  84. }
  85. }
  86. return nowySwiat;
  87. }
  88. losowaPopulacja(swiat);
  89. //manual(swiat);
  90. pokazSwiat(swiat);
  91.  
  92. setInterval(function() {
  93. var nowySwiat = sprawdz(swiat);
  94. pokazSwiat(nowySwiat);
  95. swiat = nowySwiat;
  96. }, 50);
  97. }
  98. </script>
  99. </head>
  100.  
  101. <body onload="test()">
  102. <table id="game">
  103.  
  104. </body>
  105.  
  106. </html>


Sugestie?
nospor
Ty tutaj nic nie "rysujesz" tylko tworzysz elementy tabeli
Ty tutaj nic nie ozywiasz, tylko znowu tworzysz elementy tabeli

Staraj się pisac po ludzku a nie dodajesz jakies fantastyczne opisy.... Chwilkę zajęło zanim dotarło o czym mówisz.


Kolejna sprawa:
Troche siedze w js, ale musze szczerze przyznac ze pierwszy raz widze taki kod:
alive : komorka
Co to niby według Ciebie ma robić?

Poza tym ozywKomorke tworzy ci tylko jedną komorke, bo tylko tam tworzysz jedną komorkę.

Jesli zas sadziles, ze ten kod:
swiat.innerHTML = komorka;
bedzie ci dodawal kolejne komorki, no to sorka, ale ty tutaj NADPISUJESZ a nie DOPISUJESZ. No powinienies już znac roznice miedzy tymi dwoma slowami.
trueblue
Gdzie są martwe komórki? Dlaczego ożywiając komórkę nadpisujesz innerHTML?

P.S. W linii 34 jest błąd w warunku.
P.P.S. Nawiązując do pytania 2, nie budujesz wierszy tabeli.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.