Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript]Funkcja rysująca elementy tabeli
tzm
post
Post #1





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:31