Skocz do zawartości

Zablokowane Epizod 1 - Breakout


Uzjel

Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 133
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

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?

Odnośnik do komentarza
Udostępnij na innych stronach

@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łą)?

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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; }

}

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

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; }

}

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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

×
×
  • Dodaj nową pozycję...