Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Tablica - działa tylko ostatni element
Forum PHP.pl > Forum > Przedszkole
Glarden
Joł, joł. Robię w JS grę w pokera. Skrypt wygląda na razie tak:
  1. karty = new Array();
  2. karty[0] = 'as_pik';
  3. karty[1] = 'as_trefl';
  4. karty[2] = 'as_karo';
  5. karty[3] = 'as_kier';
  6.  
  7. karty[4] = 'krol_pik';
  8. karty[5] = 'krol_trefl';
  9. karty[6] = 'krol_karo';
  10. karty[7] = 'krol_kier';
  11.  
  12. karty[8] = 'dama_pik';
  13. karty[9] = 'dama_trefl';
  14. karty[10] = 'dama_karo';
  15. karty[11] = 'dama_kier';
  16.  
  17. karty[12] = 'jop_pik';
  18. karty[13] = 'jop_trefl';
  19. karty[14] = 'jop_karo';
  20. karty[15] = 'jop_kier';
  21.  
  22. karty[16] = '10_pik';
  23. karty[17] = '10_trefl';
  24. karty[18] = '10_karo';
  25. karty[19] = '10_kier';
  26.  
  27. karty[20] = '9_pik';
  28. karty[21] = '9_trefl';
  29. karty[22] = '9_karo';
  30. karty[23] = '9_kier';
  31.  
  32. function rozdaj() {
  33. for (i=0;i<5;i++) {
  34. karta = Math.floor(Math.random() * 23) +1;
  35. karty_gracz = new Array();
  36. karty_gracz[i] = karty[karta];
  37. karty.splice(karta, 1);
  38. }
  39. pokaz_karty();
  40. }
  41. function pokaz_karty() {
  42. for (i=0;i<5;i++) {
  43. document.getElementById("karty").innerHTML += "<br>"+karty_gracz[i];
  44. }
  45. }
  46.  
  47. <body onLoad="rozdaj();">
  48.  
  49. <div id="licznik">
  50. Kasa: 1000
  51. </div>
  52. <a href="javascript:wchodze();">Wchodzę</a><br>
  53.  
  54. <div id="karty">
  55. </div>
  56.  
  57. </body>


Przy włączeniu strony, uruchamiana jest funkcja rozdająca karty użytkownikowi (rozdaj()winksmiley.jpg. I teraz problem jest taki, że kiedy wyświetla te karty (funkcją pokaz_karty()winksmiley.jpg zamiast pierwszych czterech kart pokazuje "undefined", natomiast piąta działa w 80% (tak na oko) przypadków, w pozostałych też jest "undefined". I zwracam się do Was z pytaniem: co się dzieje się?
lord_t
Kod
function rozdaj() {
karty_gracz = new Array();
for (i=0;i<5;i++) {
karta = Math.floor(Math.random() * karty.length-1) +1;alert(karta);
karty_gracz[i] = karty[karta];
karty.splice(karta, 1);
}
pokaz_karty();
}

Za każdym krokiem w pętli tworzyłeś nową tablicę (z jednym elementem) nadpisując poprzednią.

Drugi błąd: cały czas losowałeś z przedziału 0-23 a za każdym krokiem w pętli usuwałeś jeden element.
phpion
Moim zdaniem są tutaj 2 problemy.
1) Jak zauważył ~lord_t: za każdym razem zerowałeś tablicę karty_gracz. To jednak nie ma wpływu na Twój problem - wyszłoby później.
2) Musisz zdefiniować tablicę karty_gracz jako globalną czyli poza ciałem funkcji rozdaj. Dlaczego? Aktualnie tablica ta jest tylko lokalną tablicą dla tej funkcji i nie jest widoczna poza nią. Zadeklaruj karty_gracz poza funkcją.

Finalnie powinno to wyglądać tak:
  1. karty_gracz = new Array(); // <- pojawila sie deklaracja tablicy jako globalnej
  2.  
  3. karty = new Array();
  4. karty[0] = 'as_pik';
  5. karty[1] = 'as_trefl';
  6. karty[2] = 'as_karo';
  7. karty[3] = 'as_kier';
  8.  
  9. karty[4] = 'krol_pik';
  10. karty[5] = 'krol_trefl';
  11. karty[6] = 'krol_karo';
  12. karty[7] = 'krol_kier';
  13.  
  14. karty[8] = 'dama_pik';
  15. karty[9] = 'dama_trefl';
  16. karty[10] = 'dama_karo';
  17. karty[11] = 'dama_kier';
  18.  
  19. karty[12] = 'jop_pik';
  20. karty[13] = 'jop_trefl';
  21. karty[14] = 'jop_karo';
  22. karty[15] = 'jop_kier';
  23.  
  24. karty[16] = '10_pik';
  25. karty[17] = '10_trefl';
  26. karty[18] = '10_karo';
  27. karty[19] = '10_kier';
  28.  
  29. karty[20] = '9_pik';
  30. karty[21] = '9_trefl';
  31. karty[22] = '9_karo';
  32. karty[23] = '9_kier';
  33.  
  34. function rozdaj() {
  35. karty_gracz = new Array(); // <- pojawilo sie zerowanie tablicy
  36.  
  37. for (i=0;i<5;i++) {
  38. karta = Math.floor(Math.random() * 23) +1;
  39. // karty_gracz = new Array(); <- tego tu nie ma
  40. karty_gracz[i] = karty[karta];
  41. karty.splice(karta, 1);
  42. }
  43. pokaz_karty();
  44. }
  45. function pokaz_karty() {
  46. for (i=0;i<5;i++) {
  47. document.getElementById("karty").innerHTML += "<br>"+karty_gracz[i];
  48. }
  49. }
  50.  
  51. <body onLoad="rozdaj();">
  52.  
  53. <div id="licznik">
  54. Kasa: 1000
  55. </div>
  56. <a href="javascript:wchodze();">Wchodzę</a><br>
  57.  
  58. <div id="karty">
  59. </div>
  60.  
  61. </body>


PS: nie testowałem ale wydaje mi się, że powinno pomóc.
Glarden
Prawie działa, jeszcze tylko jeden problem. Wspomniałem wcześniej, że raz na jakiś czas nawet ta ostatnia karta, działająca już w moim skrypcie, czasem jest "undefined". Teraz jest tak z wszystkimi kartami - w większości przypadków działa fajnie, ale czasem jedna z kart jest niezdefiniowana...
lord_t
To przeczytaj mojego posta wyżej. :|
Glarden
O kurde, ale ja głupi jestem. Przepraszam i dziękuję za pomoc!
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.