Skocz do zawartości
  • Ogłoszenia

    • Uzjel

      Nowa wersja forum   05.08.2017

      Pewnie widać, że wprowadziliśmy nową wersję forum. Skok z wersji 2 do 4 był dosyć trudny i musimy tu trochę posprzątać. Dajcie nam trochę czasu ~Administracja
    • Uzjel

      GMClan wrócił!   12.08.2017

      GMClan.org już działa, więc jeżeli ktoś wchodził przez adres forum.gmclan.org to może już wrócić do starych zwyczajów. Jeżeli strona wam się nie wyświetla to wyczyście cache i ciasteczka.
Uzjel

Epizod 1 - Breakout

Rekomendowane odpowiedzi

Uzjel    11

Tu DOWNLOAD

 

Breakout

Klasyczna gra z 1976 będzie pierwszym sprawdzianem dla waszych umiejętności pisania botów. Każdy zna grę, w której gracz porusza paletką i odbija kulkę w stronę klocków. W Breakout jedynym zadaniem gracza jest zniszczenie wszystkich klocków, aby jednak nie zanudzić programistów, gra różni się od oryginału - zawiera niektóre bonusy wzorowane na grze DX-ball. Bonusy mogą być przydatne dla gracza/bota lub utrudniające mu grę.

 

Jak są liczone punkty?

W grze liczone są dwa parametry. Pierwszy to punkty - za każdy zbity klocek gracz otrzymuje 100 punktów. Drugim parametrem jest czas. Ostatecznym wynikiem, który zadecyduje o miejscu, które zajmie gracz jest jednak ilość punktów podzielona na czas - ilość punktów na sekundę. Więcej punktów - lepszy wynik.

 

Poziom trudności

Jest raczej niski. Sprawdźcie najprostszego bota

GML
x = obj_ball.x + random_range(-20,20)
który wykręca wyniki w okolicach 60 punktów. Dla bardziej zaawansowanych ciekawymi zadaniami mogą okazać się takie rzeczy jak odbijanie wielu piłek, unikanie złych a łapanie dobrych bonusów i precyzyjne ustawianie paletki.

 

Zasady gry

Gra kończy się, kiedy bot:

  • zbije wszystkie klocki lub
  • straci wszystkie życia lub
  • czas przekroczy cztery minuty
Paletka ma ograniczoną prędkość - nie będzie sytuacji w której przy kilku piłkach paletka będzie się teleportowała do najniższej lub unikała w ten sposób złych bonusów.

Średnia jest liczona jak gracz będzie miał więcej niż 1000 punktów.

Piłka po odbijaniu się od czegokolwiek minimalnie przyspiesza, ale jej prędkość jest ograniczona.

Utrata wszystkich piłek znajdujących się na mapie kończy się utratą życia i wstawieniu nowej piłki, która jest wolniejsza - znowu musi się rozpędzić.

Piłka jest odbijana od paletki w inny sposób niż w klasycznym breakoucie, przypomina bardziej współczesne odsłony.

Bonusy nie są pochowane w klockach, a pojawiają się co 6 zbitych bloków - unikamy w ten sposób sytuacji, gdy ktoś miał więcej szczęścia i trafił na ''szczęśliwy bloczek'' w którym był przydatny bonus.

Ustawienie klocków będzie inne w grze rankingowej.

Stracenie wszystkich żyć eliminuje gracza i jego wynik nie jest brany pod uwagę.

 

0001.png

 

Zasady pisania kodu

  • Cały kod umieszczajcie w skryptach bar_int i bar_ai, możecie tworzyć własne skrypty
  • Nie można tworzyć nowych instancji i wpływać na nie lub na istniejące.
  • Nie można modyfikować żadnych zmiennych wbudowanych dla żadnej instancji z wyjątkiem pozycji x obiektu obj_bar. Oczywiście wszystkie zmienne można odczytywać.
  • Jeżeli nastąpi próba zmiany zmiennej x obiektu obj_bar to zostanie ona obcięta do dozwolonej wartości, gra sama tego pilnuje. Uniemożliwia to przeskakiwanie paletki
  • Nie można wpływać na zmienne globalne, szczególnie na global.game_rank_score :P
  • Dopilnujcie, żeby kod nie powodował błędów i był wydajny. Jeżeli coś takiego się zdarzy to autor zostanie o tym poinformowany i będzie miał szansę na poprawkę.
  • Jeżeli autor użyje czegoś co zostanie przeze mnie uznane za nieuczciwe a nie zostało podane to w tym regulaminie, skontaktujemy się i dojdziemy do tego jak to naprawić - bądźcie wyrozumiali, jesteśmy tu po to aby się dobrze bawić :)

Jeżeli ktoś prześle pracę przed terminem, nie będzie miał możliwości dosłania ''lepszej wersji''. Ma to zapobiec codziennym aktualizacją. Zastanówcie się więc dwa razy zanim prześlecie pracę.

 

Bonusy

Bonusy są identyfikowane po image_index

  • 0 - +1000 punktów
  • 1 - -1000 punktów
  • 2 - Węższa paletka o 33%
  • 3 - Szersza paletka o 33%
  • 4 - Rozdwojenie każdej piłki

Wyniki

Każdy bot będzie miał trzy szanse, aby zdobyć jak najwyższy wynik. Boty innych graczy będą grały na tych samych seedach.

Przebieg zawodów będzie opublikowany na YouTubie.

Uczestnicy nie muszą (ale mogą) przesyłać całego projektu. Wystarczy kod z bar_int i bar_ai

 

Na prace czekam do 28 lutego

Przesyłajcie je na Prywatną Wiadomość.

(wyniki powinny pojawić się w ciągu tygodnia.)

 

Łatwe? Łatwe.

 

Tu DOWNLOAD

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Danielus    0

jak rozumiem seedami przy ocenianiu będą losowe, duże liczby, nie znane w tym momencie, tak że AI ma działać dobrze dla dowolnego ustawienia?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
hamtaren    0
Cały kod umieszczajcie w skryptach bar_int i bar_ai

Oznacza to, że nie mogę tworzyć sobie dodatkowych skryptów, które będą wykorzystywane tylko w bar_int i bar_ai, tak?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Uzjel    11

Jeżeli masz taką potrzebę, ale wtedy podeślij plik GMZ. Dobrze, że o tym wspomniałeś - już poprawiłem w regulaminie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Sutikku    0

Jaka jest maksymalna odległość jaką może pokonać paletka w ciągu jednego stepu?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Danielus    0

i są jakieś punkty za pozostałe życia czy można je poświęcać dla bonusów?

 

EDIT: Poważniejszy problem - co w przypadku gdy ktoś nabije szybko dużo punktów po czym specjalnie przegra? czas ma mały punktów dużo, wynik będzie duży. Może po -100 pkt za każdy klocek który nie zostanie zbity?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Amaterasu    0

@Sutikku: Maksymalna szybkość paletki jest równa szerokości paletki dzielonej na dwa.

 

Ja mam pytania: czy w losowo generowanych mapach podczas testu klocki będą miały te same wymiary, co w dostępnym projekcie? Czy te klocki mogą dochodzić do samego brzegu mapy? Czy klocki zawsze będą ułożone w pozycjach będącymi wielokrotnościami liczby większej od 1 (ewentualnie przesuniętych o pewną stałą)?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Uzjel    11
i są jakieś punkty za pozostałe życia czy można je poświęcać dla bonusów?

 

EDIT: Poważniejszy problem - co w przypadku gdy ktoś nabije szybko dużo punktów po czym specjalnie przegra? czas ma mały punktów dużo, wynik będzie duży. Może po -100 pkt za każdy klocek który nie zostanie zbity?

 

Stracenie wszystkich żyć eliminuje gracza i jego wynik nie jest brany pod uwagę. W sumie logiczne ale o tym nie napisałem. Dodane do regulaminu.

 

 

Ja mam pytania: czy w losowo generowanych mapach podczas testu klocki będą miały te same wymiary, co w dostępnym projekcie? Czy te klocki mogą dochodzić do samego brzegu mapy? Czy klocki zawsze będą ułożone w pozycjach będącymi wielokrotnościami liczby większej od 1 (ewentualnie przesuniętych o pewną stałą)?

 

Mapa nie będzie losowo generowana, tylko będzie trochę inna. Zasada będzie taka sama, żadnych udziwnień, innych wymiarów i kształtów.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dester    0

Jak na złość, znienawidzony breakout... I tak spróbuję, ale wynik będzie co najmniej głupi.

e: Czy taki efekt przeskakiwania paletki jak w domyślnym bocie(podobny) będzie uznany za błąd?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
I am Lord    2
e: Czy taki efekt przeskakiwania paletki jak w domyślnym bocie(podobny) będzie uznany za błąd?

Nie bo jest ograniczona odległość skoku.

 

W step paletki. Jak wyżej podali odległość skoku nie przekracza połowy długości paletki

GML
if point_distance(x,0,xprevious,0) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dester    0
Nie bo jest ograniczona odległość skoku.

 

W step paletki. Jak wyżej podali odległość skoku nie przekracza połowy długości paletki

GML
if point_distance(x,0,xprevious,0) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

Nie zrozumiałeś o co chodzi, ale to już nieważne :D

Czy podczas testów zmieni się wielkość planszy?

PS. Jak na razie nabijam score 9800 time 14400 rank 40

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Amaterasu    0

@bLaze: Jedynymi wartościami, które można zmieniać (poza dodanymi przez siebie w bar_int) jest pozycja X paetki. Możesz z tą wartością robić, co ci się żywnie podoba (w bar_ai), gra sama reguluje tę pozycję, aby była zgodna z zasadami.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dester    0

Najnowsza wersja mojego bota jest świetna, ale nie umie zbić ostatniego klocka. Ale jeszcze zobaczymy >:D

Widzimy się jutro, odmeldowuję się :D

PS. Z tych filmików na YT będzie masa nowych członków, mówię wam :)

PPS. Może niech każdy nazwie swojego bota? To by było ciekawe :D

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Threef    4

Rozumiem że nie można edytować żadnych zmiennych poza x paletki, ale można odczytywać wartości każdej innej zmiennej?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Threef    4

Zgłaszam bug:

Maksymalna prędkość piłki to 20

height paletki to 16

 

Poza tym:

GML
if point_distance(x,0,xprevious,0) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

GML
if abs(x-xprevious) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
I am vader    17
height paletki to 16

 

A nie width?

 

Poza tym:

GML
if point_distance(x,0,xprevious,0) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

GML
if abs(x-xprevious) > bar_width/2

{

if x > xprevious then {x = xprevious; x += bar_width/2} else { x = xprevious; x -= bar_width/2; }

}

 

Powalająca poprawa wydajności

 

 

A tak na poważnie, mam nadzieję że Uzjel nagra działanie każdego bota aby można było spojrzeć co poszło nie tak

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Threef    4

A może teraz tego bugu nie ma? Sprawdziłem edytując piłkę i jest ok. Wcześniej 2 razy zauważyłem że przy największej prędkości piłka lecąc pionowo przeleciała przez paletkę.

 

Edit: Rank 146

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Uzjel    11
A może teraz tego bugu nie ma? Sprawdziłem edytując piłkę i jest ok. Wcześniej 2 razy zauważyłem że przy największej prędkości piłka lecąc pionowo przeleciała przez paletkę.

 

Sprawdziłem. Nie ma takiej możliwości.

 

Jak collision line nie jest robione to tak to sie konczy.

 

Collision line warto używać jak prędkość obiektu jest ponad dwa razy większa od jego dłuższego boku.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×