Powrót do scenariuszy
Szkoła podstawowa
Klasa: 7-8
Szkoła ponadpodstawowa
Klasa: 1-4
test
Autor:

Mateusz Chmielewski

Programowanie Photona w Pythonie #10 Losowe kody

informatyka • programowanie
Czas:
45 min.
Roboty:
x1
Akcesoria:
Accessory
Interfejsy:
Python (Photon Magic Bridge)
alt
Powrót do scenariuszy
Scenario Image

Odniesienie do podstawy programowej

Szkoła ponadpodstawowa, Informatyka II./2., I./2.
Szkoła podstawowa, Informatyka II./1, 2.

Cele zajęć

Uczeń/uczennica:
  • utrwala znajomość metod w zakresie programowania Photona
  • uczy się stosować w algorytmach parametry losowe
  • poznaje różne sposoby importowania bibliotek i zapoznaje się z dokumentacją rozszerzeń Pythona

Metody pracy

  • ćwiczenie
  • eksperymentowanie
  • metoda poszukująca

Formy pracy

  • praca grupowa

Materiały

  • komputer na grupę

Załączniki

losowe.py
Pobierz

Przebieg zajęć

W ramach tego warsztatu uczniowie poznają często używane w Pythonie rozszerzenie random pozwalające na dodanie do kodu elementów losowych. Zainspirowani grami komputerowymi uczynimy robota Photon bohaterem niezależnym i "oskryptujemy go", aby sprawiał wrażenie, że żyje własnym życiem.

1. Wprowadzenie w temat

Czy grywacie w jakieś gry komputerowe? Czy poza postacią gracza pojawiają się w nich inne postacie? Jak się zachowują, realistycznie?
20 lat temu w grach komputerowych bohaterowie niegrywalni (NPC) przeważnie stali w miejscu lub chodzili po linii z jednego miejsca w drugie. Dziś bohaterowie niezależni "żyją własnym życiem", a przynajmniej sprawiają takie wrażenie. W najnowszych grach niektóre elementy działania NPCów wynikają z decyzji podejmowanych w oparciu o sztuczną inteligencję, ale zupełnie powszechnie ich działaniem kierują sparametryzowane skrypty z elementami losowymi. Warto jednak zwrócić uwagę, że maszyny nie podejmują wyborów w sposób prawdziwie losowy. Np. w Minecrafcie losując mapę i wybierając dwukrotnie identyczne parametry "losowo" wygenerowana zostanie identyczna mapa.

2. Czynnik losowy

Metody związane z losowaniem znajdziemy w rozszerzeniu random. W scenariuszu #6 wyjaśniliśmy różnice pomiędzy formą import nazwa_biblioteki i from nazwa biblioteki import *. Tym razem warto, abyśmy nie importowali biblioteki w całości. Warto otworzyć uczniom dokumentację biblioteki random. Zawiera się w niej 28 metod, z których my prawdopodobnie użyjemy tylko jednej. Wśród developerów oprogramowania rzadko miarą sukcesu jest to "czy działa", ale właściwa optymalizacja i szybkość działania programu. Poświęcanie pamięci obliczeniowej na dane, których nie potrzebujemy jest drobnym marnotrawstwem i dobrze jest wyrabiać w sobie dobre nawyki w optymalizowaniu projektu.
Zaimportujemy from random import randint 

  • randint () to skrót od random integer, czyli losowa liczba całkowita. W nawiasie podajemy dwie liczby stanowiące zakres, z którego losowana jest liczba.
  • Np. zamiast Photon.go_forward(50), możemy zapisać Photon.go_forward(randint(20,70)). Photon przejedzie do przodu o odległość losową pomiędzy 20, a 70 cm.

3. Sekretne życie Photona

Każda z grup samodzielnie tworzy program, który po uruchomieniu sprawi, że jej Photon będzie "żył własnym życiem". Importujemy threading i time. Naszym zadaniem jest utworzyć funkcje główną, w której działać będą 3 wątki:

  • poruszanie się Photona po klasie w dość losowy sposób - a to robot pojedzie, a to przystanie na jakiś czas lub obróci się w innym kierunku
  • losowe zmiany kolorów świateł co jakiś czas
  • Co jakiś czas wydawanie odgłosów

Chcemy, aby Photon zachowywał się w sposób mało przewidywalny, ale sensowny - wpadanie na ściany jest wykluczone ;-) Na tym etapie rozmawiamy z uczniami o tym, czy zatrzymywanie Photona przed przeszkodą powinno być osobnym wątkiem. Oczywiście nie, bo zarówno ruch jak i zatrzymywanie to sterowanie silnikami robota, a wątki nie mogą wchodzić w konflikt. Fragment kodu odpowiedzialny za niewpadanie na przeszkody musi być częścią pierwszego wątku.

Każda z grup próbuje wykonać zadanie samodzielnie. W razie potrzeby pomagamy, szczególnie przypominamy składnię wątków omówioną w scenariuszu #9.

Przykładowy program można zobaczyć poniżej:

Funkcję ruchu szczególnie można rozwiązać inaczej. W przykładowym kodzie stale sprawdzane są dwie sytuacje:

  • Jeżeli robot jest dalej od przeszkody niż 20 cm, wówczas jedzie naprzód w zakresie od 0 cm, do odległości dzielącej go od przeszkody, przystaje i obraca się w prawo o losowy kont z losową prędkością.
  • Zawsze jeżeli robot zbliży się do przeszkody na bliżej niż 20 cm, obraca się o około 180 stopni (+/- 45).

4. Prezentacja i podsumowanie

Każda grupa prezentuje swój kod i działanie Photona. Podsumowujemy realizację zadania. Jeśli realizowaliśmy cały cykl 10 zajęć, warto, abyśmy podsumowali całą naukę Pythona. Czy czujemy się pewnie używając go? Co sprawia nam jeszcze trudność? Czy macie inne pomysły na ciekawe programy dla Photona?

 

Współautorem scenariusza jest Michał Nowak.

 

Ciekawostki/Pytania otwierające

O zastosowaniach AI w grach komputerowych można przeczytać artykuł na stronie Komisji Europejskiej.

Dyskusja (brak komentarzy)

Zaloguj się, aby rozpocząć dyskusję