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

[JS] Tic Tac Toe AI - api do kółko i krzyżyk oparte na algorytmie minimax

+4 głosów
797 wizyt
pytanie zadane 23 września 2016 w Nasze projekty przez pietrzakacper Mądrala (7,470 p.)
edycja 23 września 2016 przez pietrzakacper

Cześć!

Chciałbym prosić o ocenę kodu oraz wydajności mojego ostatniego projektu.

Na pomysł na ten projekt wpadłem, gdy męczyłem się z implementacją 'komputera' w kółko i krzyżyk.

Pomyślałem, że dużo łatwiej będzie mi to zrobić jeśli rozdzielę całą abstrakcję tego algorytmu i zamknę w oddzielnym module. Uznałem, że to co mi wyszło może być dla kogoś użyteczne dlatego opakowałem to w ładne API i mini-dokumentację w pliku README.

Tutaj można przetestować jak sprawuje się AI w mojej implementacji TicTacToe: link

A tutaj link do repozytorium tic-tac-toe-ai na GitHubie: link

Pozdrawiam i z góry dzięki za odpowiedź!

komentarz 23 września 2016 przez niezalogowany
Mam dziwnego laga przez chwilę gdy wybiorę kółko na początku. Taka drobna wada. Nie znam się na js, więc nie mogę więcej powiedzieć :) No może jeszcze, że ładnie schludnie wygląda.
komentarz 23 września 2016 przez pietrzakacper Mądrala (7,470 p.)
Tak, też to zauważyłem, żeby pozbyć się tego efektu muszę, napierw ładować planszę a potem liczyć ruch AI

3 odpowiedzi

+1 głos
odpowiedź 24 września 2016 przez Magicone Nałogowiec (44,960 p.)

Dlaczego zrezygnowałeś z ES6? Kod do ES5 możesz zrzucać, minifikować i przy okazji używać składni modułów ES6 przy użyciu narzędzia, jakim jest rollup. Tutaj masz książkowy przykład, jak to działa w praktyce. :P

komentarz 24 września 2016 przez pietrzakacper Mądrala (7,470 p.)

Głównie dlatego, że potrzebowałem moduł (AI) rozdzielić na parę plików z mniejszymi modułami (miniMax, Validation... )i udostępniać tylko wybrane metody. A z tego co wiem to moduły ES6 nie działają w przeglądarce. Dlatego skorzystałem z tego IMO brzydkiego pattern-a : 

var AI = (function(module){ 
  module.newProperty = ... 

  return module; 
})(AI || {});

Gdybyś zaproponował lepsze rozwiązanie byłbym bardziej niż wdzięczny ;)

komentarz 24 września 2016 przez Magicone Nałogowiec (44,960 p.)
Modularyzacja jest jak najbardziej ok, napisałem, że rollup zrzuca moduły do jednego pliku i w dodatku przy użyciu presetów/pluginów możesz mieć czysty, zminifikowany kod pod przeglądarkę (es5).
komentarz 24 września 2016 przez pietrzakacper Mądrala (7,470 p.)
Ok, nie wiedziałem co robi rollup. Dzięki, poczytam i na dniach przejdę na es6 :)
+1 głos
odpowiedź 24 września 2016 przez Mlody89 Mądrala (6,940 p.)

Jak się szybko klika to AI nie ma szans :D

komentarz 24 września 2016 przez pietrzakacper Mądrala (7,470 p.)
xD Dzieje się tak, bo event kliknięcia  mimo tego, że zostaje przechwycony w trakcie "procesu myślowego" AI to jest obsłużony dopiero gdy AI skończy liczyć.

Zwykła flaga wskazująca czyja kolei teraz jest powinna rozwiązać sprawę :)
–1 głos
odpowiedź 24 września 2016 przez pietrzakacper Mądrala (7,470 p.)
Podbijam

Podobne pytania

+1 głos
0 odpowiedzi 902 wizyt
+1 głos
1 odpowiedź 1,191 wizyt
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez Gracjan Pasik Obywatel (1,810 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

67,091 zapytań

114,027 odpowiedzi

241,646 komentarzy

47,017 pasjonatów

Przeglądających: 91
Pasjonatów: 0 Gości: 91

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...