• 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.

Object Storage Arubacloud
0 głosów
363 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 (601,590 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 (601,590 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 (601,590 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,158 wizyt
pytanie zadane 28 czerwca 2018 w JavaScript przez Tomasz Ozi Orzech Początkujący (300 p.)
0 głosów
2 odpowiedzi 2,142 wizyt
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 6 marca 2018 w JavaScript przez myku18 Nowicjusz (210 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...