• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaScript losowanie liczby jeszcze raz jeżeli nie spełni warunku.

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
518 wizyt
pytanie zadane 19 marca 2016 w JavaScript przez uRTLy Bywalec (2,420 p.)
edycja 19 marca 2016 przez uRTLy

 

function computerLogic(array) {

  function random() {

    var rand = Math.floor(Math.random() * 9);

    var result = (array[rand] === computerChoice) || (array[rand] === playerChoice) ?
      random(): (function() {
        array[rand] = computerChoice;
        grid.item(rand).innerHTML = computerChoice;
      })(rand);
  }

  random();


}

Moze i proste ale moja logika mnie zawodzi.  

To  gra w kółko i krzyżyk , computerLogic(array) jest wywoływana za każdym razem jak użytkownik kliknie i wtedy losowana jest liczba . Jak pod  indexem tablicy znajduje sie X albo O ( playerChoice) albo (userChoice) chce żeby wylosowało liczbe jeszcze raz. Do tej pory robiłem to jakby rekursywnie ale nie chce zeby za każdym razem wywoływało znowu funkcje random tylko poprostu znowu wylosowało..I jakoś wogóle nie mam pomysłu..

https://github.com/uRTLy/Tic-Tac-Toe tutaj kod aplikacji ale przed tym jak zmieniłem na ternary operator zamiast ifów.
 

edit
może też wracać do początku funkcji znowu albo poprostu niech znowu włączy rand ale niech ponownie sprawdzi czy nie wylosowało indexu z zajętym polem. Tylko niech nie wywołuje się jeszcze raz bo pod koniec w konsoli przeglądarki mam 10 randomów wywołanych i maximum call stack exceeded przy kółku i krzyżyku....

 

1 odpowiedź

+2 głosów
odpowiedź 19 marca 2016 przez Comandeer Guru (606,160 p.)

Osobiście nie szedłbym w rekurencję, a w pętlę do...while.

komentarz 19 marca 2016 przez uRTLy Bywalec (2,420 p.)
function computerLogic(array) {
var random;
var zero = 0;
while (array[random] === zero){
  random=(function (){
    var a= Math.floor(Math.random()*9);
    return a;
  })();
}
  console.log(random);

if(array[random] === zero ){
array[random]=computerChoice;
grid.item(random).innerHTML=computerChoice;
}
}

 

Ułatwiłem to sobie, jeżeli array[random] === 0 to znaczy że nie jest równy ani playerChoice ani computerChoice.

Tylko dalej jest coś nie tak, myślałem że to z porównaniem coś nie tak więc dalem 0 w zmienna. Hmm nie wiem co jest nie tak. Albo ta funkcja random jest zle zrobiona ale już próbowałem każdej.

komentarz 19 marca 2016 przez Comandeer Guru (606,160 p.)

Ehh… Przeczytaj jeszcze raz to:

Pętla ma się wykonywać tak długo, jak długo wylosowana liczba BĘDZIE zajęta przez gracza lub komputer.

A teraz pomyśl, co robi Twój kod ;) 

komentarz 20 marca 2016 przez uRTLy Bywalec (2,420 p.)
while (array[random] !== zero)

zapewne o to ci chodzi ale teraz while crashuje program,

komentarz 20 marca 2016 przez Comandeer Guru (606,160 p.)
Jak będę mieć chwilę wolnego, to obadam Twój projekt na GH.
komentarz 20 marca 2016 przez uRTLy Bywalec (2,420 p.)
Wiesz co zrobie od nowa całe kółko i krzyżyk całkiem inaczej bo mam teraz troche inny pomysł.

Podobne pytania

0 głosów
1 odpowiedź 1,295 wizyt
pytanie zadane 28 czerwca 2018 w JavaScript przez Tomasz Ozi Orzech Początkujący (300 p.)
0 głosów
2 odpowiedzi 2,234 wizyt
0 głosów
1 odpowiedź 153 wizyt
pytanie zadane 6 marca 2018 w JavaScript przez myku18 Nowicjusz (210 p.)

93,113 zapytań

142,093 odpowiedzi

321,656 komentarzy

62,453 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...