Wpis z mikrobloga

Siemano programistyczne świry, mam poważny problem. W ramach swojej przygody z #unity3d piszę prostą grę logiczną. Gra nazywa się Order and Chaos. Gra ta jest wariacją na temat kółka i krzyżyk. Oboje graczy ma do dyspozycji dwa rodzaje pionków, wyróżnia ich natomiast warunek zwycięstwa. Gracz Order ma za zadanie ustawić 5 pionków tego samego rodzaju z rzędu, natomiast gracz Chaos ma mu w tym przeszkodzić. Jeżeli chciałbyś zobaczyć jak gra wygląda w praktyce to zapraszam na kanał Toma Scotta. Dotychczas udało mi się przygotować wersję gry dla dwóch graczy, chciałbym jednak również zrobić wersję dla jednego gracza. Spróbowałem wykorzystać nieco przerobiony algorytm MiniMax, pisząc go na podstawie tego materiału, jednocześnie go modyfikując (zmieniając przypadki podstawowe w zależności od strony). Niestety, moja wersja algorytmu za każdym razem zwraca trzy zera ( ͡° ʖ̯ ͡°) Siedzę na tym od wczoraj i nie mogę znaleźć błędu. Może któryś z was, drogie mireczki, znajdzie buga w tym szambie. Po mój kod zapraszam tutaj. Nie programuję zbyt długo (nieco ponad 4 miesiące), więc jeżeli macie jakieś uwagi do formy kodu to piszcie, przyjmę to na klatę.
Jeżeli interesuje cię aktualna wersja gry to napisz na priv, podeślę to co mam ()

#naukaprogramowania #csharp #gamedev
  • 7
@b0b3kpl: a minimax to nie jest brute-force? przy kółku i krzyżyk jeszcze zadziała bo plansza jest mała (3x3) i liczba możliwości też jest mała (około 9!, odejmując gry które kończą się w mniej niż 9 ruchów będzie troche mniej), u ciebie plansza ma 6x6, więc możliwości jest o wiele więcej (około 10^40). IMO musisz napisać mądrzejszy algorytm, nie brute-force

a co do znajdywania błędu polecam debugger
@b0b3kpl: To nie java, to się nazwy metod z Wielkiej pisze :)

Po za tym enum przerzuciłbym do oddzielnego pliku, oraz pytanie czy w "//check diagonal left to right" zastosował bym else if jeśli już, a najlepiej to machnąć wszystko jednym ifem - i tak wszystkie warunki zwracają true :)

Sprawdzałeś wydajność algorytmu? Wg mnie duże plansze będą praktycznie niegrywalne z uwagi na ilość forów. Po za tym coś mało OOP
@razornfs: Wielkie dzięki za wskazówkę, wygląda na to że algorytm się sypie ze względu na złożoność obliczeniową. Mam nadzieję że wykorzystanie algorytmu Alfa-Beta przyniesie jakiś pozytywny rezultat. Korzystałem z debuggera, niestety dotarcie do pierwszej pętli w metodzie getBestMove wyrzuca mnie z trybu debuggowania ( ͡° ʖ̯ ͡°).
@Nartenlener: Myślałem że wielkie litery są zarezerowane dla nazw klas, no ale jak już wspomniałem dopiero się uczę. W
@b0b3kpl: Masz klase Program a w niej metode Main wygenerowaną przez kompilator napisaną z wielkiej litery. Tak po prostu się przyjęło, że w C# metody, nazwy klas oraz property piszemy z wielkiej litery.

Masz jednego enuma to nie widzisz dlaczego miałbyś go przenieść do oddzielnego pliku. Jeśli pracujesz z solucją złożoną z kilkunastu projektów to każdy porządek i przewidywalność jest wskazana. Dokładnie wiesz, że enumy są w takim a takim katalogu