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

Kółko i Krzyżyk -> c++ algorytmy komputera

0 głosów
124 wizyt
pytanie zadane 13 stycznia w C i C++ przez pysiek Początkujący (280 p.)

Mam do zrobienia grę w kółko i krzyżyk, większość mam skończoną, jednak potrzebuję oprócz losowego wstawiania znaku przez komputer na planszy, dodać mu inne algorytmy, np. blokowanie ruchu. Czy mógłby mi ktoś pomóc napisać ze dwa dodatkowe algorytmy? Poniżej część kodu (wydaje mi się, że wystarczy jeśli wrzucę strukturę komputera, w której trzeba to zmienić)

struct computer
{
public:
    enum algorithm_type
    {
        ALGORITHM_0,
        ALGORITHM_1
    };
private:
    std::string name;
    char sign;
    char (*board)[MAX_SIZE][MAX_SIZE];
    algorithm_type choosen_algorithm;

    void do_algorithm_0_move(int& return_x, int& return_y)
    {
        int x = 0;
        int y = 0;
        while (true)
        {
            x = rand() % MAX_SIZE;
            y = rand() % MAX_SIZE;

            if ((*board)[y][x] == EMPTY_SIGN)
            {
                (*board)[y][x] = sign;
                return_x = x;
                return_y = y;
                std::cout << "Komputer wykonal ruch na x: " << x << ", y: " << y << std::endl;
                break;
            }
        }
    }

public:
    computer(char(*b)[MAX_SIZE][MAX_SIZE] = nullptr, char s = ' ', const algorithm_type algo_type = algorithm_type::ALGORITHM_0)
    {
        name = "computer";
        choosen_algorithm = algo_type;
        sign = s;
        board = b;
    }

    char get_sign() { return sign; }

    void make_move(int& return_x, int& return_y)
    {
        switch (choosen_algorithm)
        {
        case algorithm_type::ALGORITHM_0:
            {
                do_algorithm_0_move(return_x, return_y);
                break;
            }
        default:
        {
            std::cout << "Blad. Nie ma takiego algorytmu." << std::endl;
            exit(0);
        }
        }
    }
};

 

1 odpowiedź

0 głosów
odpowiedź 13 stycznia przez DragonCoder Pasjonat (21,150 p.)
Zablokowanie ruchu jest mozliwe dopiero gdy gracz wykonal 2 ruchy, bo dopiero wtedy widzisz, gdzie moze ustawic figury w jedej linii. Ale obejscie tak owego sprawdzenia jest proste. Wystarczy narysowac w dolnym lub gornym rogu, pozniej po przeciwnej stronie i na koncu wybrac jeden rog. Komputer wtedy narysuje przeciiwna figure, tak by przerwac jedno polaczenie, ale 2 zostanie mozliwe. Wiadomo, gdy ustawiasz fiury losowo, to moze sie zdarzyc ze zablokujesz ten ruch. Umieszczam tu link i przeczytaj:

https://medium.freecodecamp.org/how-to-make-your-tic-tac-toe-game-unbeatable-by-using-the-minimax-algorithm-9d690bad4b37

 

Tu jest wykorzystanie algorytmu maximin w ttt, oprocz tego link do wikipedii:

https://pl.wikipedia.org/wiki/Algorytm_min-max
komentarz 13 stycznia przez pysiek Początkujący (280 p.)
Generalnie plansza, na której sie poruszam jest nieskonczona, a 5 znakow pionowo/poziomo/na skos wygrywa. Myslalem wiec, by napisac cos, ze jak komputer zauwazy powiedzmy 3 znaki w ktorejs z tych sekwencji to blokuje, tylko nie wiem, jak to ugryzc.
komentarz 13 stycznia przez DragonCoder Pasjonat (21,150 p.)
Naajpierw napisalbym normalna wersje kolka i krzyzyk, a dopiero pozniej wieksza. Zreszta wykorzystujac algorytm maximin, wyjdzie na to samo , tylko ze wiecej elementow do sprawdzenia, kiedy user wygrywa. Skoro plansza jest nie skonczona, tp jest wektorem, ktory powieksza sie co chwile, gdy poda sie dany kord?
komentarz 13 stycznia przez pysiek Początkujący (280 p.)
Ja juz mam wersje kolka i krzyzyk napisana. Po prostu potrzebuje pomocy jak napisac do tego kodu algorytm, w ktorym po np. sekwencji 3 ruchow gracza (obok siebie), komputer bedzie blokowal, oraz jesli tego nie robi, to, ze uklada wlasna sekwencje do wygranej. Jak widzisz, jedyne co mam, to randomowe wykazywanie znaku przez komputer na planszy
komentarz 13 stycznia przez DragonCoder Pasjonat (21,150 p.)
Przy nie skończonej planszy, masz nieskonczenie wiele mozliwosci reakcji gracza, a wiec nieskonczenie wiele mozliwosci wygranych. Jezeli traktujesz plansze jako tablice, to przeszukaj ja w poszuliwaniu 3 takich samych elementow obok siebie i wtedy postaw figure przeciwna w miejscu gdzie teoretycznie powinna byc 4 figura. Czy przeczytales link, ktory wyslalem?

Podobne pytania

+1 głos
0 odpowiedzi 412 wizyt
0 głosów
0 odpowiedzi 217 wizyt
pytanie zadane 11 listopada 2016 w C i C++ przez Undisputed Bywalec (2,610 p.)
0 głosów
2 odpowiedzi 245 wizyt
pytanie zadane 10 września 2016 w C i C++ przez Antero00 Gaduła (3,430 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

65,633 zapytań

112,251 odpowiedzi

236,827 komentarzy

46,636 pasjonatów

Przeglądających: 231
Pasjonatów: 11 Gości: 220

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.

...