Skocz do zawartości

Sztuczna intligencja w Pongu


frelo

Rekomendowane odpowiedzi

Nie dam Ci kodu, ale powiem jak do niego dojść. Wyobraź sobie, że to ty jesteś komputerowym przeciwnikiem i zobacz jakie akcje wykonujesz i pod jakimi warunkami. Z tego, ci wyjdzie mniej więcej schemat jak się zachowywać, a później tylko napisać w GML ;)

 

@Roki: Lol, tego nie można nazwać przeciwnikiem tylko nieprzepuszczalną barierą -_-

Odnośnik do komentarza
Udostępnij na innych stronach

W create tacki uruchom time lines(np. za pomocą klocka Set time line) i chodzenie z góry na dół.W time lini w stepie 30 daj kod:

 

GML
distance=distance_to_object(obj_pilka);

 

if distance=30

 

{

 

move_towards_point(pilka.x,pilka.y,5)

 

}

 

I klocek Set time line.

 

!UWAGA!

 

Im większą wartoś podasz w if i w move-towards_point tym trudniejsza gra będzie.

Odnośnik do komentarza
Udostępnij na innych stronach

tego w ogole ai nie można nazwać...

 

 

Jak nie umiesz napisać AI do ponga, to nie zrobisz multiplayer ;p

 

Multiplayer - wsytarczy znać funkcje do 39dll

AI - trzeba mocno myśleć logicznie, znać funkcje matematyczne z wyżej półki i być doświadczonym...

Odnośnik do komentarza
Udostępnij na innych stronach

Easeful, to zależy o jakim ai mówimy, bo do ponga funkcje matematyczne z wyższej półki raczej nie są potrzebne, mocne logiczne myślenie raczej też nie.

A ten temat jest właśnie o pongu, gdzie najprostsze ai ogranicza się do dwóch linii.

 

Więc ten ktoś kogo zacytowałeś miał rację.

Jak nie umiesz napisać AI do ponga, to nie zrobisz multiplayer ;p
Odnośnik do komentarza
Udostępnij na innych stronach

frelo, z tego, co zauważyłem, wolisz jeszcze klocki od kodu, więc pozwolę sobie przetłumaczyć AI kolegów z forum na klocki :) .

 

AI 1: Hardkorowy bot:

Zakłada move, sekcja jump, klocek z góry po lewej, dwa krzyżyki i strzałka, jak najedziesz myszką pisze "Jump to position".

Wkładasz go do step.

Jeśli przesuwasz się do góry/dołu:

x = odległość od lewego krańca okna, np 600, albo room_width-40

y = obj_pilka.y (obj_pilka to nazwa piłki)

Jeśli przesuwasz się na lewo/prawo:

x = obj_pilka.x (obj_pilka to nazwa piłki)

y = odległość od górnego krańca okna, np 420, albo room_height-40

 

AI 2: Bot z prędkością

Zakłada move, sekcja move, klocek z góry po środku,niebieskie strzałki we wszystkich kierunkach ,jak najedziesz myszką pisze "Move free".

Wkładasz go do step.

Jeśli przesuwasz się do góry/dołu:

direction = point_direction(x,y,x,obj_pilka.y)

Jeśli przesuwasz się na lewo/prawo:

direction = point_direction(x,y,obj_pilka.x,y)

speed = szybkość przesuwania bota, np 3, 5 w zależności od tego, jaki chcesz mieć poziom trudności

Odnośnik do komentarza
Udostępnij na innych stronach

Dawidds wspomniał, że to tak banalny temat, a tyle odpowiedzi :) . Chciałem tylko podać, że nikt nie podał prawdziwego rozwiązania. Zostały podane dwie sensowne opcje i obydwie mają ten sam błąd. Oczywiście chodzi mi o:

GML
if(x < pilka.x) x += /ileś tam/

if(x > pilka.x) x -= /ileś tam/

oraz

GML
direction=point_direction(x,y,x,pilka.y);

W czym tkwi problem? Obydwa przypadki mają wspólną cechę - piłka po dotarciu do celu w wielu wypadkach będzie miała nowy, albowiem gdy jej pozycja pionowa ma wynosić 230, a jest na 229 (zakładamy, że jej prędkość to 5), to nagle wynosi 234, znowuż nie jest na swym miejscu i dotrze ponownie do 229.

 

Rozwiązanie problemu dla obydwu przykładów:

GML
if ( y < pilka.y )

y = min( y + <szybkosc>, pilka.y );

else if ( y > pilka.y )

y = max( y - <szybkosc>, pilka.y );

Oraz drugi:

GML
if ( y != pilka.y )

{

if ( distance_to_point( x, y, x, pilka.y ) < <szybkosc> )

y = pilka.y

else

direction = point_direction( x, y, x, pilka.y);

}

 

Któż by pomyślał, że takie proste zagadnienie może wywołać tyle kontrowersji :P ...

Odnośnik do komentarza
Udostępnij na innych stronach

Odkryłem jeszcze inny sposób.W stepie dajesz:

 

GML
oy=obj_ball.y+random(10);

 

oy=oy-random(10)

 

move_towards_point(x,oy,3);

 

A teraz tłumaczę(bo jesteś początkujący):najpierw ustalamy że oy równa się pozycja y pilki + liczba z przedziału 0-10 ,a potem na odwrót:odejmujemy.W funkcji x to pozycja x jaką ma na mapie tacka;oy nasze wcześniejsze równania ,a 3 prędkość.Wadą jest to że kiepsko to wygląda w grze.(ale działa:raz przepuści raz nie)

Odnośnik do komentarza
Udostępnij na innych stronach

...

 

 

 

 

Dawidds ale mi chodzi o takie AI co ty w swoim pongu zrobiłeś, takie inteligentne co pod ukos idzie itd

robienie DOBREGO online to też nie jest jakaś wybitnie łatwa robota - widać, że nie próbowałeś.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...