Table Of Contents

Previous topic

4. Sokoban

Next topic

6. Zagadnienia zaawansowane

This Page

Ostrzeżenie

Dokument jest ciągle modyfikowany. Część może byc nieprzetłumaczona z francuskiego, który jest podstawowy.

5. Tworzenie własnych światów

Możesz stworzyć własną kolekcję światów i uczynić ją dostępną wszystkim zainteresowanym. Najczęściej spotykanym sposobem udostępniania światów jest udostępnienie ich w Internecie (np. Github lub własna strona) z odpowiednio przygotowanym menu. Nim wyjaśnię jak to zrobić zobaczmy w jaki sposób można uruchomić świat.

5.1. Domyślne światy

../_images/select.png

Domyślne swiaty są pokazane na białym tle. Stworzone lokalnie i zapisane w przeglądarce mają kolorowe tło.

Świat Reeborg-a posiada kilka domyślnych światów. Poprzednio załączane światy służyły do nauki Python-a z tej strony. Obecnie załączane światy są wybierane by pokazać specyficzne właściwości, które są opisane gdzieś w tej dokumentacji lub na blogu.

Domyślne światy można wybrać z listy rozwijanej umieszczonej w górnej części strony.

5.2. Tworzenie światów

Note

Tworzenie i edycja światów jest opisana szczegółowo w innej części

Gdy tworzysz nowy świat (lub edytujesz istniejący) możesz wybrać opcję do automatycznego zapisu w magazynie danych twojej przeglądarki (ang. local storage) Po zapisaniu jest on dostępny na liście rozwijanej do wybierania świata. Domyślne światy są pokazane na liście na białym tle, zaś światy zapisane w przeglądarce mają kolorowe tło.

Możliwe jest także zapisanie światów do pliku w formacie json. Zapisany plik zawiera dodatkowe spacje aby poprawić czytelność i móc go edytować.

5.3. Odnośnik bezpośredni

Oprócz zapisywania konfiguracji świata jest możliwość zapisania zawartości edytora, bibliotek i użytego języka programowania. [Jest także możliwy zapis zmian interfejsu użytkownika Zmiana interfejsu użytkownika.] Wszystko to jest zakodowane w odnośniku bezpośrednim (ang. permalink), którego można później użyć jako URL w hiperłączu (ang. hyperlink)

Na przykład ten odnośnik bezpośredni załaduje świat i rozwiązanie.

Używanie odnośników bezpośrednich jako hiperłączy może być bardzo pomocne w pisaniu tutoriali. Należy jednak pamiętać, że:

  1. Świat Reeborg-a musi być wczytany za każdym razem, gdy takie hiperłącze jest użyte; pobierana jest większa ilość danych.
  2. Długie odnośniki bezpośrednie mogą spowodować, że serwer używany przez Świat Reeborg-a może poinformować o błędzie, np. tutaj

Note

Odnośniki bezpośrednie mogą być także używane w html-owym formularzu select. Zobacz przykład Gravel path (solution).

Możliwe jest ominięcie tych trudności kopiując odnośnik bezpośredni (w Windows zrobisz to klikając prawym przyciskiem na link i wybierając odpowiednie polecenie) a następnie używając menu zaawansowanego w Świecie Reeborg-a zamieniamy aktualny odnośnik bezpośredni przez skopiowany. Zobacz na przykładzie niżej jak to zrobiono.

update permalink

5.4. Użycie funkcji World()

Zamiast klikać na listę rozwijaną select i wybierać świat, można ładować świat używając funkcji World() w programie. Jest to wygodne w wielu sytuacjach, np. chcesz mieć jeden program z rozwiązanymi zadaniami w światach “Rain 1” i “Rain 2”. Wtedy dobrym zwyczajem jest umieszczenie na początku programu następujących dwóch linii:

#World("Rain 1")
#World("Rain 2")

Po usunięciu komentarza w jednej z linii przy wykonaniu programu nastąpi wybór tego świata (jeśli nie wybrano jeszcze świata). Ponowne wybieranie tego samego świata zostanie zignorowane.

Takie wybieranie świata działa również gdy używamy go z odnośnika bezpośredniego. Zmienia się wtedy zawartość edytora i biblioteki (jeśli zakodowano ją w odnośniku). Spróbuj prześledzić wykonanie programu:

World("Gravel path (solution)")

Zaobserwuj jak zmieniła się lista rozwijana z wyborem światów po uruchomieniu tego programu i jak edytor zawiera teraz rozwiązanie zadania. Metoda ta także działa gdy świat jest zapisany w przeglądarce - zakładając, ze nazwy stworzonych światów są inne od istniejących. Jeżeli użyto nazwy która jest taka sama jak istniejącego predefiniowanego, to mozna się do niego dostać pisząc user_world: przed nazwą nowego świata:

World("user_world:My World")

Po wykonaniu tego polecenia tylko świat zostanie wczytany (edytor i biblioteka nie wczytają się).

Jeszcze jeden sposób użycia funkcji World(); prawdopodobnie najbardziej użyteczny.

Załóżmy, że masz zapisany świat w pliku lub odnośniku bezpośrednim (w pliku) na publicznie dostępnej witrynie. Możesz go załadować używając:

World(pelna_sciezka)

Przykład, który można wypróbować:

World("http://personnel.usainteanne.ca/aroberge/reeborg/test_sokoban1")

Important

Ładowanie plików z zewnętrznych serwerów jest wykonywane przez pośredni serwer (cors-anywhere.herokuapp.com) który pozwala na Cross-origin resource sharing . Czasem mogą wystąpić sytuacje, gdy usługa nie jest dostępna przez kilka minut.

5.5. Tworzenie niestandardowego menu

Po przeczytaniu całego tekstu powyżej, wiadomo już co jest potrzebne do stworzenia niestandardowego menu w którym użytkownik może wybierać własne światy. Mianowicie w edytorze piszemy program, który używa funkcji MakeCustomMenu:

contents = [ [full_url_1, name_1],
             [full_url_2, name_2],
             [full_url_3, name_3],
             ... ]
MakeCustomMenu(contents)

Następnie tworzymy odnośnik bezpośredni i zapisujemy go w pliku. Załadowanie tego pliku wykorzystując World() umieści odpowiednią treść. Wykonując ten nowy program otrzymamy niestandardowe menu, które zamieni istniejącą listę rozwijaną na górze strony.

Spróbuj wykonać ten przykład:

World('http://personnel.usainteanne.ca/aroberge/reeborg/custom_menu')

W przykładzie tym są pobierane światy z dwóch witryn, w tym wykorzystując odnośniki bezpośrednie. Uruchomienie przykładu spowoduje zamianę listy rozwijanej tak, że tylko światy podane w przykładzie będą dostępne.