Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00201 005935 13604002 na godz. na dobę w sumie
Raspberry Pi. Najlepsze projekty - ebook/pdf
Raspberry Pi. Najlepsze projekty - ebook/pdf
Autor: , Liczba stron: 432
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-9224-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> python - programowanie
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj ogromny potencjał miniaturowego komputera!

Raspberry Pi to prawdziwy komputer o rozmiarach lekko przerośniętej karty kredytowej. Posiada on ogromny potencjał, całkiem sporą moc obliczeniową, a do tego kosztuje naprawdę niewiele. Platforma ta była projektowana z myślą o nauce programowania dla dzieci. Jednak, jak to często bywa, historia potoczyła się zupełnie inaczej. Obecnie Raspberry Pi znajduje zastosowanie jako serwer WWW, odtwarzacz filmów lub sterownik urządzeń. Masz dobry pomysł, żeby wykorzystać Pi w projekcie? A może jeszcze nie wiesz, co chciałbyś zrobić z Raspberry Pi?

Ta książka rozwieje wszystkie Twoje wątpliwości i podsunie pomysły na atrakcyjne projekty. W trakcie lektury poznasz budowę Raspberry Pi oraz dowiesz się, jak go podłączyć i uruchomić system Linux. W kolejnych rozdziałach przygotujesz grę kółko i krzyżyk oraz stworzysz własny teleprompter. Jeżeli potrzebny Ci jest elektroniczny zegar do pomiaru czasu reakcji lub marzy Ci się twittująca zabawka, to trzymasz w ręku właściwą książkę! Jeżeli pragniesz zamieszkać w inteligentnym domu za rozsądne pieniądze — zainteresuje Cię rozdział poświęcony jego automatyzacji. Sprawdź, jakie to proste! Jest to obowiązkowa lektura dla wszystkich pasjonatów, chcących wycisnąć z Raspberry Pi siódme poty!

Sięgnij po tę książkę i:

Zbiór najlepszych projektów dla Pi!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Raspberry Pi Project Tłumaczenie: Tomasz Walczak ISBN: 978-83-246-9221-7 © 2014 John Wiley Sons, Ltd. All Rights Reserved. Authorised translation from the English language edition published by John Wiley Sons Limited. Responsibility for the accuracy of the translation rests solely with Helion S.A. and is not the responsibility of John Wiley Sons Limited. No part of this book may be reproduced in any form without the written permission of the original copyright holder, John Wiley Sons Limited. Translation copyright © 2014 by Helion S.A. Designations used by companies to distinguish their products are often claimed as trademarks. All brand names and product names used in this book are trade names, service marks, trademarks or registered trademarks of their respective owners. The publisher is not associated with any product or vendor mentioned in this book. is publication is designed to provide accurate and authoritative information in regard to the subject matter covered. It is sold on the understanding that the publisher is not engaged in rendering professional services. If professional advice or other expert assistance is required, the services of a competent professional should be sought. Wiley and the John Wiley Sons, Ltd. logo are trademarks or registered trademarks of John Wiley and Sons, Ltd. and/ or its affiliates in the United States and/or other countries, and may not be used without written permission. Raspberry Pi is a trademark of the Raspberry Pi Foundation. All other trademarks are the property of their respective owners. John Wiley Sons, Ltd. is not associated with any product or vendor mentioned in the book. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/raspnp Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci Wprowadzenie .......................................................................................... 13 Historia powstania ................................................................................................13 Informatyka u(cid:285)ytkowa ..........................................................................................14 Dlaczego wszyscy powinni uczy(cid:202) si(cid:218) informatyki? ..............................................14 Poznaj Raspberry Pi ...............................................................................................15 O tej ksi(cid:200)(cid:285)ce ...........................................................................................................16 Jak korzysta(cid:202) z tej ksi(cid:200)(cid:285)ki? ...................................................................................17 Przysz(cid:239)o(cid:258)(cid:202) ..............................................................................................................19 Cz(cid:218)(cid:258)(cid:202) I: Wprowadzenie do Raspberry Pi .................................. 21 ROZDZIA(cid:146) 1 Uruchamianie Raspberry Pi .................................................................... 23 System operacyjny .................................................................................................24 Pod(cid:239)(cid:200)czanie Raspberry Pi ......................................................................................30 Proces (cid:239)adowania ...................................................................................................38 Uruchamianie interfejsu graficznego ....................................................................39 Uruchamianie terminala w (cid:258)rodowisku X ............................................................39 Rozwi(cid:200)zywanie problemów ..................................................................................40 Pora rozpocz(cid:200)(cid:202) zabaw(cid:218)! ........................................................................................42 ROZDZIA(cid:146) 2 Wprowadzaj(cid:200)cy projekt oprogramowania — generator obelg ........... 43 Uruchamianie pierwszego programu w Pythonie ................................................44 Zapisywanie programu ..........................................................................................46 Generowanie obelg ................................................................................................48 Imienne obra(cid:285)anie znajomych ..............................................................................51 Tworzenie strumienia obelg ..................................................................................53 (cid:146)(cid:200)czenie wszystkich elementów ...........................................................................56 Cz(cid:218)(cid:258)(cid:202) II: Projekty oprogramowania .......................................... 59 ROZDZIA(cid:146) 3 Kó(cid:239)ko i krzy(cid:285)yk .......................................................................................... 61 B(cid:239)(cid:218)dy ......................................................................................................................62 Pocz(cid:200)tek .................................................................................................................63 Gra dla dwóch zawodników ..................................................................................67 Gra przeciw komputerowi .....................................................................................70 Twoja kolej .............................................................................................................79 ROZDZIA(cid:146) 4 Oto przegl(cid:200)d najnowszych wiadomo(cid:258)ci ................................................. 81 Pierwsze telepromptery ........................................................................................82 Pi Prompter ............................................................................................................83 Kup książkęPoleć książkę 8 RASPBERRY PI. NAJLEPSZE PROJEKTY Czego potrzebujesz? .............................................................................................. 83 Krok bli(cid:285)ej do u(cid:285)ytecznego programu .................................................................. 88 Gotowy kod programu Pi Prompter ..................................................................... 92 Fizyczna budowa telepromptera .......................................................................... 96 Twoja kolej ............................................................................................................ 99 ROZDZIA(cid:146) 5 Ping ........................................................................................................... 101 Wczesne produkty komercyjne .......................................................................... 102 Gra Ping ............................................................................................................... 103 Ulepszanie gry Ping ............................................................................................ 107 Gra dla jednej osoby ............................................................................................ 111 Wersja dla dwóch graczy .................................................................................... 117 Twoja kolej .......................................................................................................... 123 ROZDZIA(cid:146) 6 Pie Man .................................................................................................... 125 Pie Man ............................................................................................................... 126 Tworzenie zasobów ............................................................................................ 127 Przygotowywanie planszy .................................................................................. 131 Przebieg gry ........................................................................................................ 135 Wy(cid:258)wietlanie zawarto(cid:258)ci ekranu ....................................................................... 142 Ostatnia funkcja .................................................................................................. 144 Twoja kolej .......................................................................................................... 149 ROZDZIA(cid:146) 7 Generowanie labiryntów w Minecrafcie ............................................ 151 Instalowanie Minecrafta .................................................................................... 152 Uruchamianie Minecrafta .................................................................................. 153 Gra w Minecrafta ................................................................................................ 154 Przygotowania do u(cid:285)ycia Pythona ..................................................................... 156 U(cid:285)ywanie modu(cid:239)u Minecrafta ............................................................................ 156 Twoja kolej .......................................................................................................... 172 Cz(cid:218)(cid:258)(cid:202) III: Projekty sprz(cid:218)towe ................................................... 173 ROZDZIA(cid:146) 8 Kolorowa wersja gry Snap ..................................................................... 175 Implementowanie gry ......................................................................................... 176 Teoria .................................................................................................................. 176 Oprogramowanie do testowania gry .................................................................. 189 Oprogramowanie gry .......................................................................................... 192 Twoja kolej .......................................................................................................... 196 ROZDZIA(cid:146) 9 Sprawd(cid:283) swój czas reakcji .................................................................... 197 Witaj w (cid:258)wiecie systemów wbudowanych! ....................................................... 198 Pozyskiwanie komponentów .............................................................................. 199 Konfigurowanie karty PiFace Digital ................................................................. 200 Pod(cid:239)(cid:200)czanie karty PiFace Digital ........................................................................ 204 Kup książkęPoleć książkę SPIS TRE(cid:165)CI 9 U(cid:285)ywanie emulatora ...........................................................................................204 Komunikowanie si(cid:218) z Pythonem .........................................................................205 Stoper do pomiaru czasu reakcji .........................................................................208 Co pod(cid:239)(cid:200)czysz do komputera? .............................................................................218 ROZDZIA(cid:146) 10 Twittuj(cid:200)ca zabawka ............................................................................... 219 „Hakowanie” zabawki .........................................................................................220 Jak zmusi(cid:202) zabawk(cid:218) do mówienia? ....................................................................224 Poruszanie zabawk(cid:200) ............................................................................................227 (cid:146)(cid:200)czenie si(cid:218) z Twitterem ....................................................................................230 (cid:146)(cid:200)czenie wszystkich elementów .........................................................................235 Podsumowanie .....................................................................................................238 ROZDZIA(cid:146) 11 (cid:165)wiat(cid:239)a dyskotekowe ............................................................................. 241 Definiowanie sekwencji (cid:258)wiate(cid:239) .........................................................................242 Kod wykonuj(cid:200)cy inne operacje ............................................................................244 Troch(cid:218) teorii ........................................................................................................246 Projektowanie sekwensera ..................................................................................247 Implementowanie sekwensera ............................................................................248 O(cid:258)wietlenie ..........................................................................................................254 U(cid:285)ywanie d(cid:239)u(cid:285)szych ta(cid:258)m LED ...........................................................................256 Ruszaj(cid:200)ce si(cid:218) (cid:258)wiat(cid:239)a ...........................................................................................258 Uruchamianie obwodu ........................................................................................262 Twoja kolej ...........................................................................................................262 ROZDZIA(cid:146) 12 Zamek do drzwi ...................................................................................... 263 Ogólne omówienie systemu .................................................................................264 Systemy krytyczne ze wzgl(cid:218)du na bezpiecze(cid:241)stwo ...........................................265 Zamek do drzwi ...................................................................................................266 Wst(cid:218)pna wysokopoziomowa symulacja programowa ........................................267 Blok wyj(cid:258)ciowy ....................................................................................................268 Blok do pobierania danych wej(cid:258)ciowych ............................................................271 Blok uwierzytelniaj(cid:200)cy u(cid:285)ytkownika .................................................................271 Odblokowywanie drzwi bez ich dotykania .........................................................273 Testowanie programu i mocowanie zamka ........................................................278 (cid:146)(cid:200)czenie wielu drzwi w sieci ..............................................................................279 Twoja kolej ...........................................................................................................280 Sztuka programowania .......................................................................................281 ROZDZIA(cid:146) 13 Automatyzowanie domu ........................................................................ 283 IOT .......................................................................................................................284 Projekt 1. Jak zbudowa(cid:202) czujnik ruchu oraz wy(cid:239)(cid:200)cznik drzwiowy? .................284 Projekt 2. Monitorowanie domu za pomoc(cid:200) kamery internetowej ....................290 Projekt 3. Budowanie termometru ......................................................................296 Projekt 4. Wysy(cid:239)anie e-maili z powiadomieniami ..............................................300 Projekt 5. Wysy(cid:239)anie e-maili za pomoc(cid:200) pilota bezprzewodowego ...................306 Twoja kolej ...........................................................................................................311 Kup książkęPoleć książkę 10 RASPBERRY PI. NAJLEPSZE PROJEKTY ROZDZIA(cid:146) 14 Komputerowe sterowanie elektronik(cid:200) toru z samochodzikami ...... 313 Kupno toru z samochodzikami ........................................................................... 314 Pod(cid:239)(cid:200)czanie toru z samochodzikami .................................................................. 314 Testowanie po(cid:239)(cid:200)cze(cid:241) z torem ............................................................................. 316 Pobieranie danych od graczy .............................................................................. 316 Oprogramowanie ................................................................................................. 325 Kod gry ................................................................................................................ 327 Twoja kolej .......................................................................................................... 332 ROZDZIA(cid:146) 15 Generowanie grafiki i zamieszczanie jej na Facebooku .................... 333 Pomys(cid:239) ................................................................................................................. 334 Rodzaje enkoderów obrotowych ........................................................................ 334 Dane wyj(cid:258)ciowe z enkodera ............................................................................... 335 Przesy(cid:239)anie rysunków do Facebooka ................................................................. 342 Ostateczna wersja programu Roto-Sketch ......................................................... 346 Tworzenie symetrycznych wzorów ................................................................... 351 Twoja kolej .......................................................................................................... 355 ROZDZIA(cid:146) 16 Harmonograf ........................................................................................... 357 Pomys(cid:239) ................................................................................................................. 359 Efekt Halla .......................................................................................................... 359 Poznaj Arduino .................................................................................................... 361 (cid:146)(cid:200)czenie ró(cid:285)nych elementów ............................................................................. 362 Programowanie Arduino ..................................................................................... 372 Programowanie Raspberry Pi ............................................................................. 383 U(cid:285)ywanie programu Pendulum Pi ..................................................................... 388 Twoja kolej .......................................................................................................... 388 ROZDZIA(cid:146) 17 Zaawansowana budka dla ptaków — obserwowanie przyrody ....... 391 Budowanie niewidocznych czujników promieni ............................................... 393 Montowanie czujników ...................................................................................... 397 Zapisywanie aktywno(cid:258)ci ptaków w pliku .......................................................... 400 Przetwarzanie danych ........................................................................................ 410 Radzenie sobie z szumem z czujników .............................................................. 415 Rysowanie wykresu ............................................................................................ 420 W(cid:239)(cid:200)czanie budki ................................................................................................. 422 Twoja kolej .......................................................................................................... 423 Mo(cid:285)liwo(cid:258)ci s(cid:200) nieograniczone ............................................................................ 424 Skorowidz ................................................................................................ 425 Kup książkęPoleć książkę Rozdzia(cid:239) 7 Generowanie labiryntów w Minecrafcie Sean McManus W tym rozdziale: (cid:80) Instalowanie Minecrafta (cid:80) Poznawanie (cid:258)wiata Minecrafta (cid:80) Manipulowanie (cid:258)wiatem Minecrafta w Pythonie (cid:80) Generowanie losowego labiryntu Minecrafta za pomoc(cid:200) Pythona Kup książkęPoleć książkę 152 RASPBERRY PI. NAJLEPSZE PROJEKTY Minecraft jest popularny w(cid:258)ród fanów klocków Lego z ca(cid:239)ego (cid:258)wiata. Pozwala tworzy(cid:202) z bloków wci(cid:200)gaj(cid:200)ce trójwymiarowe (cid:258)wiaty i rozpala wyobra(cid:283)ni(cid:218) do tego stopnia, (cid:285)e zgodnie z szacunkami sprzedano oko(cid:239)o 20 milionów egzemplarzy tej gry na ró(cid:285)ne platformy (w tym na komputery PC i konsole Xbox). Dost(cid:218)pna jest tak(cid:285)e wersja alfa tej gry przeznaczona na Raspberry Pi. Dost(cid:218)pny jest w niej tylko tryb tworzenia, w którym mo(cid:285)na bezpiecznie budowa(cid:202) (cid:258)wiat bez za- gro(cid:285)enia g(cid:239)odem lub atakami potworów. Wersja ta ma te(cid:285) ciekaw(cid:200) cech(cid:218) — mo(cid:285)na j(cid:200) programowa(cid:202) za pomoc(cid:200) ró(cid:285)nych j(cid:218)zyków, w tym Pythona. Oznacza to, (cid:285)e da si(cid:218) zbudowa(cid:202) wielki pa(cid:239)ac bez konieczno(cid:258)ci r(cid:218)cznego dodawania wszystkich bloków. Mo(cid:285)na te(cid:285), co przedstawiam w tym rozdziale, pisa(cid:202) programy wymy(cid:258)laj(cid:200)ce orygi- nalne, nowe struktury, a nast(cid:218)pnie zwiedza(cid:202) i eksplorowa(cid:202) te obiekty. W tym projekcie utworzysz w Pythonie program generuj(cid:200)cy labirynty w Minecrafcie. Przy ka(cid:285)dym uruchomieniu program generuje nowy labirynt, a u(cid:285)ytkownik mo(cid:285)e kontrolowa(cid:202), jak du(cid:285)a ma by(cid:202) struktura i z jakich materia(cid:239)ów nale(cid:285)y j(cid:200) zbudowa(cid:202). W trakcie prac nad projektem zobaczysz, jak za pomoc(cid:200) Pythona dodawa(cid:202) i usu- wa(cid:202) bloki w Minecrafcie. Dzi(cid:218)ki temu zdob(cid:218)dziesz umiej(cid:218)tno(cid:258)ci, które pozwol(cid:200) Ci pisa(cid:202) w(cid:239)asne programy steruj(cid:200)ce budow(cid:200). W czasie gdy powstawa(cid:239)a ta ksi(cid:200)(cid:285)ka, gra Minecraft: Pi Edition by(cid:239)a dost(cid:218)pna w wer- sji alfa. Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana ni(cid:285) wersja beta). Jednak wykry(cid:239)em w niej tylko kilka problemów: okno i jego zawar- to(cid:258)(cid:202) by(cid:239)y (cid:283)le wyrównane przy rozdzielczo(cid:258)ci 1024×768 (dlatego prze(cid:239)(cid:200)czy(cid:239)em j(cid:200) na 1280×1024), a kursor dzia(cid:239)a(cid:239) nieprawid(cid:239)owo po zmaksymalizowaniu okna. Mimo to zach(cid:218)cam do tego, aby przy korzystaniu z oprogramowania w wersji alfa na wy- padek problemów zawsze archiwizowa(cid:202) wa(cid:285)ne dane z Raspberry Pi. WSKAZÓWKA Naj(cid:239)atwiejszy sposób archiwizowania plików z Raspberry Pi polega na pod(cid:239)(cid:200)czeniu urz(cid:200)dzenia pami(cid:218)ci masowej i wykorzystaniu do skopiowania danych mened(cid:285)era plików dost(cid:218)pnego w (cid:258)ro- dowisku okienkowym. Kod do tego rozdzia(cid:239)u mo(cid:285)na pobra(cid:202) z mojej witryny: http://www.sean.co.uk. Instalowanie Minecrafta Cho(cid:202) Minecraft na inne platformy jest oprogramowaniem komercyjnym, wersj(cid:218) alfa na Raspberry Pi mo(cid:285)na pobra(cid:202) bezp(cid:239)atnie. Aby móc uruchomi(cid:202) t(cid:218) wersj(cid:218), trzeba zainstalowa(cid:202) w Raspberry Pi dystrybucj(cid:218) Raspbian Wheezy Linuksa. Jest to wersja systemu zalecana przez fundacj(cid:218) Raspberry Pi. Mo(cid:285)na j(cid:200) zainstalowa(cid:202) za pomoc(cid:200) obrazu NOOBS dost(cid:218)pnego w sekcji z plikami do pobrania z witryny http://www. raspberrypi.org. Informacje na temat instalowania systemu operacyjnego znajdziesz w rozdziale 1., „Uruchamianie Raspberry Pi”. Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 153 Aby zainstalowa(cid:202) Minecrafta, wykonaj nast(cid:218)puj(cid:200)ce czynno(cid:258)ci: 1. Upewnij si(cid:218), (cid:285)e Raspberry Pi jest pod(cid:239)(cid:200)czony do internetu. Minecrafta pobie- rzesz przez po(cid:239)(cid:200)czenie internetowe. 2. Uruchom Raspberry Pi, wpisz polecenie startx i wci(cid:258)nij klawisz Enter, aby otworzy(cid:202) (cid:258)rodowisko okienkowe. 3. Kliknij dwukrotnie ikon(cid:218) Midori w (cid:258)rodowisku okienkowym lub u(cid:285)yj menu Programs w lewym dolnym rogu, aby uruchomi(cid:202) przegl(cid:200)dark(cid:218) internetow(cid:200). 4. Otwórz stron(cid:218) http://pi.minecraft.net i kliknij odno(cid:258)nik, aby pobra(cid:202) Minecrafta. W oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi. W prze- gl(cid:200)darce plików katalog ten powinien by(cid:202) wyró(cid:285)niony w widocznej po lewej stronie sekcji Places. Kliknij przycisk Save i zamknij przegl(cid:200)dark(cid:218) Midori (nie b(cid:218)dziesz ju(cid:285) jej potrzebowa(cid:239)). 5. Kliknij dwukrotnie ikon(cid:218) programu LXTerminal na pulpicie, aby uruchomi(cid:202) sesj(cid:218) terminala. 6. Wprowad(cid:283) instrukcj(cid:218) tar –zxvf minecraft-pi-0.1.1.tar.gz, aby wypakowa(cid:202) zawarto(cid:258)(cid:202) pobranego pliku. W Linuksie wielko(cid:258)(cid:202) znaków ma znaczenie, dlatego koniecznie u(cid:285)yj samych ma(cid:239)ych liter. Ostatni cz(cid:239)on polecenia to nazwa pobra- nego pliku. Mo(cid:285)e si(cid:218) ona zmieni(cid:202) (zw(cid:239)aszcza ko(cid:241)cowe numery), gdy pojawi(cid:200) si(cid:218) nowe wersje Minecrafta. Wystarczy wpisa(cid:202) kilka pierwszych liter nazwy i wcisn(cid:200)(cid:202) klawisz Tab, aby komputer automatycznie j(cid:200) uzupe(cid:239)ni(cid:239). W trakcie wypakowywania plików ich nazwy b(cid:218)d(cid:200) pojawia(cid:202) si(cid:218) na ekranie. W celu wy- (cid:258)wietlenia zawarto(cid:258)ci katalogu pi wpisz instrukcj(cid:218) ls. 7. Wprowad(cid:283) polecenie cd mcpi, aby przej(cid:258)(cid:202) do katalogu z wypakowanymi plikami Minecrafta. 8. Wpisz instrukcj(cid:218) ./minecraft-pi i wci(cid:258)nij klawisz Enter, aby uruchomi(cid:202) gr(cid:218). Je(cid:258)li wszystko przebieg(cid:239)o prawid(cid:239)owo, powiniene(cid:258) zobaczy(cid:202) ekran tytu(cid:239)owy Minecrafta. Uruchamianie Minecrafta Gdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi(cid:202), przejd(cid:283) do (cid:258)rodowiska okienkowego (krok 2. w instrukcjach instalacji w podrozdziale „Insta- lowanie Minecrafta”), rozpocznij sesj(cid:218) terminala (krok 5.) i wpisz polecenie cd mcpi, a nast(cid:218)pnie ./minecraft-pi. Nie mo(cid:285)na uruchomi(cid:202) Minecrafta z poziomu wiersza polece(cid:241) bez wcze(cid:258)niejszego otwarcia (cid:258)rodowiska okienkowego. Je(cid:258)li zamkniesz okno programu LXTerminal, natychmiast zako(cid:241)czysz sesj(cid:218) Minecrafta. Dlatego spróbuj ignorowa(cid:202) to okno, które na pozór nic nie robi — jest ono potrzebne. WSKAZÓWKA Kup książkęPoleć książkę 154 RASPBERRY PI. NAJLEPSZE PROJEKTY Gra w Minecrafta Gdy uruchomisz Minecrafta w Raspberry Pi, na ekranie powitalnym b(cid:218)dziesz móg(cid:239) wybra(cid:202) jedn(cid:200) z dwóch opcji: (cid:80) Start Game (rozpocz(cid:218)cie gry). Z tej opcji b(cid:218)dziesz korzysta(cid:239) w tym rozdziale do generowania w(cid:239)asnych (cid:258)wiatów, które mo(cid:285)na eksplorowa(cid:202). Za jej pomo- c(cid:200) mo(cid:285)esz te(cid:285) wybra(cid:202) wcze(cid:258)niej wygenerowany (cid:258)wiat, gdy ponownie uru- chomisz Minecrafta. Aby wybra(cid:202) jeden ze (cid:258)wiatów, kliknij je i przeci(cid:200)gnij, tak aby potrzebny (cid:258)wiat znalaz(cid:239) si(cid:218) po(cid:258)rodku. Nast(cid:218)pnie kliknij na nim, aby go otworzy(cid:202). (cid:80) Join Game (do(cid:239)(cid:200)czanie do gry). Ta opcja pozwala do(cid:239)(cid:200)czy(cid:202) do innych graczy w sieci lokalnej. Omawianie tego trybu wykracza poza zakres rozdzia(cid:239)u. Ta opcja umo(cid:285)liwia wspó(cid:239)prac(cid:218) lub rywalizacj(cid:218) w (cid:258)wiecie Minecrafta. Kliknij przycisk Start Game, a nast(cid:218)pnie wybierz opcj(cid:218) Create New. Minecraft wy- generuje wtedy nowy (cid:258)wiat z wyj(cid:200)tkowym uk(cid:239)adem gór, lasów i oceanów. Po zako(cid:241)- czeniu tego procesu zobaczysz (cid:258)wiat z perspektywy pierwszej osoby (rysunek 7.1). Rysunek 7.1. Microsoft w Raspberry Pi WSKAZÓWKA Mo(cid:285)esz zmieni(cid:202) perspektyw(cid:218) i zobaczy(cid:202) posta(cid:202) gracza. W tym celu wci(cid:258)nij klawisz Esc, aby otworzy(cid:202) menu gry, a nast(cid:218)pnie kliknij ikon(cid:218) obok ikony g(cid:239)o(cid:258)ników w lewym górnym rogu. Po zako(cid:241)czeniu gry mo(cid:285)esz j(cid:200) zamkn(cid:200)(cid:202) z poziomu menu gry (aby je wy(cid:258)wietli(cid:202), wci(cid:258)nij klawisz Esc). Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 155 Poruszanie si(cid:218) po (cid:258)wiecie Przy grze w Minecrafta najlepiej jest u(cid:285)ywa(cid:202) obu r(cid:200)k. Jedna powinna znajdowa(cid:202) si(cid:218) na myszy, a druga — na klawiaturze. Za pomoc(cid:200) myszy mo(cid:285)esz si(cid:218) rozgl(cid:200)da(cid:202) i zmie- nia(cid:202) kierunek. Przesuni(cid:218)cie myszy w lewo lub prawo pozwala si(cid:218) obróci(cid:202), a ruchy do przodu i do ty(cid:239)u powoduj(cid:200) spogl(cid:200)danie w dó(cid:239) i w gór(cid:218). Do poruszania si(cid:218) s(cid:239)u(cid:285)(cid:200) klawisze W (do przodu), S (do ty(cid:239)u), A (w lewo) i D (w prawo). S(cid:200) one zgrupowane w jednym miejscu na klawiaturze, dzi(cid:218)ki czemu pos(cid:239)ugiwanie si(cid:218) nimi jest (cid:239)atwe. Posta(cid:202) automatycznie skacze na ni(cid:285)ej po(cid:239)o(cid:285)one obszary, je(cid:258)li nad nie przejdziesz. Mo(cid:285)esz te(cid:285) celowo wykona(cid:202) skok (s(cid:239)u(cid:285)y do tego spacja). Aby uzyska(cid:202) najlepszy obraz (cid:258)wiata, kliknij dwukrotnie spacj(cid:218). Ujrzysz wtedy (cid:258)wiat z lotu ptaka. W tym trybie wci(cid:258)ni(cid:218)cie spacji pozwala wznie(cid:258)(cid:202) si(cid:218) wy(cid:285)ej, a lewy kla- wisz Shift s(cid:239)u(cid:285)y do obni(cid:285)ania pozycji. Ponowne dwukrotne klikni(cid:218)cie spacji umo(cid:285)- liwia powrót na ziemi(cid:218). W tej wersji Minecrafta nie ma (cid:285)y(cid:202) ani zagro(cid:285)e(cid:241), dlatego mo(cid:285)esz bezpiecznie skaka(cid:202) z dowolnej wysoko(cid:258)ci. Tworzenie i niszczenie obiektów Je(cid:258)li chcesz zniszczy(cid:202) blok, wska(cid:285) go mysz(cid:200), a nast(cid:218)pnie kliknij i przytrzymaj lewy przycisk myszy. Niektóre bloki s(cid:200) (cid:239)atwiejsze do usuni(cid:218)cia ni(cid:285) inne. Aby zniszczy(cid:202) obiekt, musisz by(cid:202) odpowiednio blisko. Dlatego je(cid:258)li przy próbie usuni(cid:218)cia bloku nie widzisz, jak si(cid:218) rozpada, sta(cid:241) bli(cid:285)ej niego. Panel w dolnej cz(cid:218)(cid:258)ci okna przedstawia bloki, które mo(cid:285)esz umie(cid:258)ci(cid:202) w (cid:258)wiecie (zobacz rysunek 7.1). Wybiera(cid:202) bloki mo(cid:285)na za pomoc(cid:200) kó(cid:239)ka przewijania myszy lub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra 1 itd.). Wci(cid:258)nij E, aby otworzy(cid:202) pe(cid:239)n(cid:200) list(cid:218) materia(cid:239)ów. Do poruszania si(cid:218) po niej s(cid:239)u(cid:285)(cid:200) klawisze steruj(cid:200)ce ruchem (W, A, S, D). Je(cid:258)li chcesz wybra(cid:202) dany blok, wci- (cid:258)nij klawisz Enter lub kliknij go mysz(cid:200). Aby umie(cid:258)ci(cid:202) blok w danym miejscu, kliknij docelow(cid:200) lokalizacj(cid:218) prawym przyci- skiem myszy. Blok mo(cid:285)esz umie(cid:258)ci(cid:202) na innym tylko wtedy, gdy widzisz górn(cid:200) cz(cid:218)(cid:258)(cid:202) tego ostatniego. Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrze(cid:202) na (cid:258)wiat z lotu ptaka. Mo(cid:285)esz budowa(cid:202) wie(cid:285)e i jednocze(cid:258)nie wspina(cid:202) si(cid:218) po nich. W tym celu nale(cid:285)y spogl(cid:200)da(cid:202) w dó(cid:239) i jednocze(cid:258)nie podskakiwa(cid:202) oraz dodawa(cid:202) bloki. WSKAZÓWKA Cho(cid:202) budowanie obiektów za pomoc(cid:200) Pythona jest znacznie (cid:239)atwiejsze, zach(cid:218)cam do zapoznania si(cid:218) z tym, jak gracze czuj(cid:200) si(cid:218) w (cid:258)wiecie Minecrafta. Warto zw(cid:239)asz- cza poeksperymentowa(cid:202) z interakcj(cid:200) mi(cid:218)dzy blokami. Bloki kamienne potrafi(cid:200) utrzyma(cid:202) si(cid:218) bez bezpo(cid:258)redniego podparcia w powietrzu, natomiast bloki z piasku spadaj(cid:200) na powierzchni(cid:218). Nie mo(cid:285)na sadzi(cid:202) kaktusów na trawie, mo(cid:285)na jednak Kup książkęPoleć książkę 156 RASPBERRY PI. NAJLEPSZE PROJEKTY umie(cid:258)ci(cid:202) je na piasku. Je(cid:258)li usuniesz blok na brzegu jeziora, opró(cid:285)nion(cid:200) przestrze(cid:241) zape(cid:239)ni woda. W grze nie mo(cid:285)na umieszcza(cid:202) (cid:283)róde(cid:239) wody ani lawy, cho(cid:202) mo(cid:285)na doda(cid:202) je programowo za pomoc(cid:200) Pythona. Woda i lawa sp(cid:239)ywaj(cid:200) kaskadami w dó(cid:239) i zape(cid:239)niaj(cid:200) du(cid:285)e obszary. Gdy te (cid:285)ywio(cid:239)y zetkn(cid:200) si(cid:218) ze sob(cid:200), woda sch(cid:239)adza law(cid:218) i zamienia j(cid:200) w kamie(cid:241). Przygotowania do u(cid:285)ycia Pythona Jedn(cid:200) z zaskakuj(cid:200)cych cech Minecrafta jest to, (cid:285)e gra przejmuje kontrol(cid:218) nad mysz(cid:200). Dlatego trzeba wcisn(cid:200)(cid:202) klawisz Tab, aby wróci(cid:202) do u(cid:285)ywania innych programów. Je(cid:258)li pó(cid:283)niej chcesz ponownie zacz(cid:200)(cid:202) u(cid:285)ywa(cid:202) myszy w Minecrafcie, kliknij okno gry. Wkrótce przyzwyczaisz si(cid:218) do wciskania klawisza Tab przed rozpocz(cid:218)ciem pro- gramowania. Teraz wci(cid:258)nij ten klawisz, aby wyj(cid:258)(cid:202) z Minecrafta, i przenie(cid:258) kursor na pulpit. Do tworzenia programów zwi(cid:200)zanych z Minecraftem pos(cid:239)u(cid:285)y (cid:258)rodowisko IDLE. Kliknij dwukrotnie jego ikon(cid:218) na pulpicie, aby je uruchomi(cid:202). Mo(cid:285)liwe, (cid:285)e najpierw b(cid:218)dziesz musia(cid:239) klikn(cid:200)(cid:202) górn(cid:200) kraw(cid:218)d(cid:283) okna Minecrafta i przeci(cid:200)gn(cid:200)(cid:202) je, (cid:285)eby zo- baczy(cid:202) potrzebn(cid:200) ikon(cid:218). Jedn(cid:200) z pierwszych rzeczy, jakie zauwa(cid:285)ysz, jest to, (cid:285)e Minecraft znajduje si(cid:218) nad innymi oknami, dlatego (cid:258)rodowisko IDLE mo(cid:285)e by(cid:202) niewidoczne. Niezb(cid:218)dna jest wi(cid:218)c odpowiednia reorganizacja pulpitu. Aby przenie(cid:258)(cid:202) okno, przeci(cid:200)gnij je za pasek tytu(cid:239)u. Zmienianie wielko(cid:258)ci okien odbywa si(cid:218) w wyniku przeci(cid:200)gania kraw(cid:218)dzi i rogów. Zach(cid:218)cam, aby tak uporz(cid:200)dkowa(cid:202) okna, aby wszystkie by(cid:239)y jednocze(cid:258)nie widoczne. Na monitorze o standardowych wymiarach, jakiego u(cid:285)ywam, umieszczam Minecrafta w lewym górnym rogu, ma(cid:239)e okno z pow(cid:239)ok(cid:200) Pythona w prawym górnym naro(cid:285)niku, a okno z kodem programu w dolnej cz(cid:218)(cid:258)ci ekranu. Nie nale(cid:285)y zmienia(cid:202) wielko(cid:258)ci okna Minecrafta. W wersji, z której korzystam, gra przestaje wtedy reagowa(cid:202) na ruchy mysz(cid:200). Okno programu LXTerminal mo(cid:285)esz zignorowa(cid:202) (ale go nie zamykaj). U(cid:285)ywanie modu(cid:239)u Minecrafta Teraz mo(cid:285)esz napisa(cid:202) swój pierwszy program w Pythonie powi(cid:200)zany ze (cid:258)wiatem Minecrafta. Program ten b(cid:218)dzie wysy(cid:239)a(cid:239) komunikaty do dost(cid:218)pnego w grze czata. W pow(cid:239)oce Pythona otwórz menu File i wybierz opcj(cid:218) New, aby otworzy(cid:202) nowe okno edytora. Wpisz w nim poni(cid:285)szy kod, a nast(cid:218)pnie zapisz plik w katalogu pi za pomoc(cid:200) menu File i wci(cid:258)nij klawisz F5, aby uruchomi(cid:202) nowy program. Do dzia(cid:239)a- nia wymaga on, aby uruchomiona by(cid:239)a sesja gry w Minecrafcie. import sys, random sys.path.append( ./mcpi/api/python/mcpi ) import minecraft mc = minecraft.Minecraft.create() mc.postToChat( Witamy w labiryntach Minecrafta! ) Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 157 Pierwszy wiersz importuje modu(cid:239)y sys i random. Modu(cid:239) random b(cid:218)dzie pó(cid:283)niej potrzebny do budowania losowych labiryntów. Modu(cid:239) sys jest u(cid:285)ywany od razu do poinformo- wania (cid:258)rodowiska IDLE, gdzie znajduje si(cid:218) modu(cid:239) Pythona zwi(cid:200)zany z Minecraftem (pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie). Po wska- zaniu (cid:258)rodowisku IDLE lokalizacji tego modu(cid:239)u nale(cid:285)y go zaimportowa(cid:202). W Pythonie do przesy(cid:239)ania instrukcji do Minecrafta s(cid:239)u(cid:285)y polecenie minecraft. Minecraft.create(), po którym nale(cid:285)y poda(cid:202) potrzebn(cid:200) instrukcj(cid:218). Na przyk(cid:239)ad aby wy(cid:258)wietli(cid:202) powitanie w oknie czata, zastosuj poni(cid:285)szy kod: minecraft.Minecraft.create().postToChat( Witamy w labiryntach Minecrafta! ) Przy d(cid:239)u(cid:285)szych instrukcjach taki kod jest nieczytelny, dlatego w przedstawionym programie utworzy(cid:239)em zmienn(cid:200) mc, któr(cid:200) mo(cid:285)na stosowa(cid:202) jako skrót polecenia minecraft.Minecraft.create(). Dzi(cid:218)ki temu mo(cid:285)na przesy(cid:239)a(cid:202) komunikaty za po- moc(cid:200) krótszych wierszy kodu, tak jak w przyk(cid:239)adowym programie. Je(cid:258)li kod nie dzia(cid:239)a, zwró(cid:202) uwag(cid:218) na wielko(cid:258)(cid:202) znaków. W Pythonie ma ona znaczenie, dlatego musisz stosowa(cid:202) ma(cid:239)e i wielkie litery dok(cid:239)adnie w taki sposób jak w przyk(cid:239)adowym kodzie. Zwró(cid:202) uwag(cid:218) na notacj(cid:218) wielb(cid:239)(cid:200)dzi(cid:200) w nazwie postToChat i wielk(cid:200) liter(cid:218) M w poleceniu minecraft.Minecraft.create(). WSKAZÓWKA Wspó(cid:239)rz(cid:218)dne w Minecrafcie Jak (cid:239)atwo si(cid:218) domy(cid:258)li(cid:202), ka(cid:285)dy punkt w (cid:258)wiecie Minecrafta ma wspó(cid:239)rz(cid:218)dne. Do okre- (cid:258)lenia pozycji punktu potrzebne s(cid:200) wspó(cid:239)rz(cid:218)dne w trzech wymiarach: (cid:80) O(cid:258) x. Jest równoleg(cid:239)a do powierzchni i przyjmuje warto(cid:258)ci od –127,7 do 127,7. (cid:80) O(cid:258) y. Jest ustawiona pionowo i okre(cid:258)la wysoko(cid:258)(cid:202). Mo(cid:285)esz wznie(cid:258)(cid:202) si(cid:218) a(cid:285) na wy- soko(cid:258)(cid:202) 500 jednostek, jednak ju(cid:285) przy wysoko(cid:258)ci 70 ziemia nie jest widoczna, dlatego dalsze wznoszenie si(cid:218) nie ma sensu. Poziom morza to 0. Mo(cid:285)esz roz- bija(cid:202) bloki, aby dr(cid:200)(cid:285)y(cid:202) tunele pod wod(cid:200). Mnie uda(cid:239)o si(cid:218) zej(cid:258)(cid:202) do poziomu –70 jednostek, zanim wypad(cid:239)em ze (cid:258)wiata i zgin(cid:200)(cid:239)em. Jest to jedyny mo(cid:285)liwy spo- sób zabicia postaci w Minecrafcie na Raspberry Pi, jaki uda(cid:239)o mi si(cid:218) znale(cid:283)(cid:202). (cid:80) O(cid:258) z. Tak(cid:285)e jest równoleg(cid:239)a do powierzchni i przyjmuje warto(cid:258)ci od –127,7 do 127,7. Celowo poda(cid:239)em wspó(cid:239)rz(cid:218)dne w tej w(cid:239)a(cid:258)nie kolejno(cid:258)ci, poniewa(cid:285) tak s(cid:200) podawane w Minecrafcie. Je(cid:258)li — podobnie jak ja — cz(cid:218)sto u(cid:285)ywasz wspó(cid:239)rz(cid:218)dnych x i y do okre(cid:258)lania pozycji w (cid:258)wiecie dwuwymiarowym (na przyk(cid:239)ad punktów na ekranie), b(cid:218)dziesz musia(cid:239) przyzwyczai(cid:202) si(cid:218) do tego, (cid:285)e y reprezentuje wysoko(cid:258)(cid:202). W tym roz- dziale zwykle u(cid:285)ywam wspó(cid:239)rz(cid:218)dnych x i z do okre(cid:258)lania pozycji (cid:258)cian (zmienia si(cid:218) ona w zale(cid:285)no(cid:258)ci od (cid:258)ciany), a wspó(cid:239)rz(cid:218)dnej y — do opisywania jej wysoko(cid:258)ci (jest ona niezale(cid:285)na od lokalizacji (cid:258)ciany). Kup książkęPoleć książkę 158 RASPBERRY PI. NAJLEPSZE PROJEKTY W trakcie poruszania si(cid:218) po planszy w lewym górnym rogu okna Minecrafta zmie- niaj(cid:200) si(cid:218) wspó(cid:239)rz(cid:218)dne gracza. Je(cid:258)li spróbujesz wyj(cid:258)(cid:202) poza (cid:258)wiat gry, natrafisz na niewidzialn(cid:200) (cid:258)cian(cid:218), której nie da si(cid:218) przebi(cid:202) — podobnie jak w filmie Truman Show, gdzie jednak bohater znalaz(cid:239) drzwi. Zmienianie pozycji gracza Za pomoc(cid:200) poni(cid:285)szego polecenia mo(cid:285)na przenie(cid:258)(cid:202) posta(cid:202) w dowolne miejsce w (cid:258)wie- cie Minecrafta: mc.player.setTilePos(x, y, z) Aby na przyk(cid:239)ad zrzuci(cid:202) posta(cid:202) z nieba w (cid:258)rodek (cid:258)wiata, u(cid:285)yj nast(cid:218)puj(cid:200)cego wy- wo(cid:239)ania: mc.player.setTilePos(0, 100, 0) WSKAZÓWKA Nie musisz umieszcza(cid:202) tego polecenia w aplikacji i uruchamia(cid:202) jej. Je(cid:258)li ju(cid:285) uruchomi(cid:239)e(cid:258) pro- gram w celu w(cid:239)(cid:200)czenia modu(cid:239)u Minecrafta, mo(cid:285)esz u(cid:285)ywa(cid:202) pow(cid:239)oki Pythona do wprowa- dzania instrukcji s(cid:239)u(cid:285)(cid:200)cych do przenoszenia postaci i dodawania bloków. Je(cid:258)li nie jest w(cid:239)(cid:200)czony tryb latania, posta(cid:202) spadnie z nieba w (cid:258)rodku (cid:258)wiata. Je(cid:285)eli tryb latania jest aktywny, kliknij okno Minecrafta i dwukrotnie wci(cid:258)nij spacj(cid:218), aby wy(cid:239)(cid:200)czy(cid:202) ten tryb i rozpocz(cid:200)(cid:202) opadanie. Posta(cid:202) mo(cid:285)na umie(cid:258)ci(cid:202) w dowolnym miejscu (cid:258)wiata gry. Czasem oznacza to, (cid:285)e po- sta(cid:202) pojawi si(cid:218) w (cid:258)rodku góry lub innej struktury, w której ruch jest niemo(cid:285)liwy. W takiej sytuacji zmie(cid:241) pozycj(cid:218) gracza za pomoc(cid:200) kodu. Dobrym rozwi(cid:200)zaniem jest zwykle umieszczenie postaci na du(cid:285)ej wysoko(cid:258)ci, poniewa(cid:285) mo(cid:285)na z niej spa(cid:258)(cid:202) na najwy(cid:285)ej po(cid:239)o(cid:285)ony punkt. Dodawanie bloków Aby doda(cid:202) blok do (cid:258)wiata, zastosuj poni(cid:285)sze polecenie: mc.setBlock(x, y, z, blockTypeId) Parametr blockTypeId to liczba reprezentuj(cid:200)ca materia(cid:239), z jakiego zbudowany jest dodawany blok. Pe(cid:239)n(cid:200) list(cid:218) materia(cid:239)ów znajdziesz na stronie http://www.minecraft (cid:180)wiki.net/wiki/Data_values_(Pocket_Edition). Wa(cid:285)ne s(cid:200) liczby z kolumny Dec z ta- beli z tej strony, poniewa(cid:285) potrzebujesz liczby dziesi(cid:218)tnej, a nie szesnastkowej. Poprawne s(cid:200) warto(cid:258)ci z przedzia(cid:239)u od 0 do 108, a tak(cid:285)e kilka wi(cid:218)kszych liczb. W tabeli 7.1 opisuj(cid:218) wybrane materia(cid:239)y, które prawdopodobnie oka(cid:285)(cid:200) si(cid:218) najbar- dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentów. Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 159 Tabela 7.1. Materia(cid:239)y z gry Minecraft: Pi Edition blockTypeId 0 1 2 3 5 8 10 12 20 24 41 45 47 53 57 64 81 Typ bloku Powietrze Kamie(cid:241) Trawa B(cid:239)oto Deska Woda Lawa Piasek Szklana ceg(cid:239)a Piaskowiec Z(cid:239)ota ceg(cid:239)a Ceg(cid:239)a Pó(cid:239)ka na ksi(cid:200)(cid:285)ki Drewniane schody Diamentowy blok Drewniane drzwi Kaktus Gdy u(cid:285)ywasz bloków wody lub lawy, mo(cid:285)esz wywo(cid:239)a(cid:202) powód(cid:283). Dlatego na potrzeby ekspe- rymentów utwórz nowy (cid:258)wiat. WSKAZÓWKA Dost(cid:218)pne jest te(cid:285) inne polecenie, które pozwala tworzy(cid:202) du(cid:285)e prostopad(cid:239)o(cid:258)ciany z bloków okre(cid:258)lonego typu. Aby zastosowa(cid:202) to polecenie, podaj wspó(cid:239)rz(cid:218)dne dwóch przeciwleg(cid:239)ych naro(cid:285)ników oraz materia(cid:239), z którego bry(cid:239)a ma by(cid:202) zbudowana: mc.setBlocks(x1, y1, z1, x2, y2, z2, blockTypeId) Aby szybko zbudowa(cid:202) ceglany schron, utwórz du(cid:285)y prostopad(cid:239)o(cid:258)cian z ceg(cid:239)y, a na- st(cid:218)pnie umie(cid:258)(cid:202) w nim prostopad(cid:239)o(cid:258)cian z powietrza. Powietrze zast(cid:218)puje dowolne inne bloki, co powoduje ich usuni(cid:218)cie ze (cid:258)wiata. Oto przyk(cid:239)ad: mc.setBlocks(0, 0, 0, 10, 5, 7, 45) # Ceg(cid:225)a mc.setBlocks(1, 0, 1, 9, 5, 6, 0) # Powietrze Ten kod w punkcie o wspó(cid:239)rz(cid:218)dnych (0, 0, 0) tworzy schron o powierzchni 10 × 7 bloków i wysoko(cid:258)ci 5 bloków. (cid:165)ciany maj(cid:200) grubo(cid:258)(cid:202) jednego bloku, poniewa(cid:285) obszar od pierwszego do dziewi(cid:200)tego bloku na osi x, od pierwszego do szóstego bloku na osi z i od zerowego do pi(cid:200)tego bloku na osi y s(cid:200) wype(cid:239)niane powietrzem. Po wszystkich stro- nach pozostaje wi(cid:218)c jedna (cid:258)ciana o grubo(cid:258)ci jednego bloku, a góra budowli jest odkryta. Kup książkęPoleć książkę 160 RASPBERRY PI. NAJLEPSZE PROJEKTY WSKAZÓWKA Pami(cid:218)taj, (cid:285)e symbol # reprezentuje komentarz dla programisty. Komputer ignoruje zawarto(cid:258)(cid:202) wiersza znajduj(cid:200)c(cid:200) si(cid:218) po tym symbolu. Cho(cid:202) przy okre(cid:258)laniu pozycji postaci mo(cid:285)na pos(cid:239)ugiwa(cid:202) si(cid:218) wspó(cid:239)rz(cid:218)dnymi z cz(cid:218)- (cid:258)ciami u(cid:239)amkowymi (na przyk(cid:239)ad 1,7), to przy dodawaniu bloków wspó(cid:239)rz(cid:218)dne s(cid:200) zaokr(cid:200)glane do najbli(cid:285)szej liczby ca(cid:239)kowitej. Uniemo(cid:285)liwianie graczom modyfikowania (cid:258)wiata Wiem, (cid:285)e nigdy by(cid:258) nie oszukiwa(cid:239) w grze, jednak szukanie drogi w labiryncie, w któ- rym mo(cid:285)na przypadkowo wyr(cid:200)ba(cid:202) sobie przej(cid:258)cie, nie by(cid:239)oby ciekawe, prawda? Aby uniemo(cid:285)liwi(cid:202) graczom usuwanie lub dodawanie bloków w (cid:258)wiecie, zastosuj nast(cid:218)- puj(cid:200)cy wiersz: mc.setting( world.immutable ,True) S(cid:239)owo immutable jest cz(cid:218)sto stosowane w kontek(cid:258)cie programowania i oznacza „niezmienny”. Ustawianie parametrów labiryntu Skoro wiesz ju(cid:285), jak dodawa(cid:202) bloki i u(cid:285)ywa(cid:202) bloków z powietrzem do opró(cid:285)niania przestrzeni, mo(cid:285)esz przyst(cid:200)pi(cid:202) do pisania programu generuj(cid:200)cego labirynty. W tym programie wykorzystasz zestaw sta(cid:239)ych przeznaczonych na wa(cid:285)ne informacje o labi- ryncie. Sta(cid:239)e to rodzaj zmiennych, których warto(cid:258)ci zdecydowa(cid:239)e(cid:258) si(cid:218) nie zmienia(cid:202) w trakcie dzia(cid:239)ania programu. Nazwy sta(cid:239)ych zwykle zapisuje si(cid:218) wielkimi literami, aby zasygnalizowa(cid:202) ich przeznaczenie dla osób czytaj(cid:200)cych kod programu i u(cid:239)atwi(cid:202) samemu sobie pami(cid:218)tanie o tym, (cid:285)e program nie powinien zmienia(cid:202) warto(cid:258)ci tych elementów. Zast(cid:200)pienie w programie liczb sta(cid:239)ymi pozwala w przysz(cid:239)o(cid:258)ci (cid:239)atwiej wprowadza(cid:202) zmiany, a tak(cid:285)e znacznie poprawia czytelno(cid:258)(cid:202) kodu i pomaga zro- zumie(cid:202), co reprezentuj(cid:200) poszczególne warto(cid:258)ci. WSKAZÓWKA W nazwach zmiennych wielko(cid:258)(cid:202) liter ma znaczenie, dlatego dla Pythona SIZE i size to dwie ró(cid:285)ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszym pomys(cid:239)em). Program najpierw ustawia sta(cid:239)e: SIZE = 10 HEIGHT = 2 MAZE_X = 0 GROUND = 0 MAZE_Z = 0 MAZE_MATERIAL = 1 # Kamie(cid:276) GROUND_MATERIAL = 2 # Trawa CEILING = False Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 161 Budowanie labiryntu zaczniesz od siatki (cid:258)cian z jednoblokowymi przestrzeniami (komórkami) mi(cid:218)dzy nimi. Efekt wygl(cid:200)dem przypomina gofry (rysunek 7.2). Ka(cid:285)da komórka ma pocz(cid:200)tkowo cztery (cid:258)ciany, a program usuwa je, dzi(cid:218)ki czemu powstaj(cid:200) (cid:258)cie(cid:285)ki mi(cid:218)dzy komórkami, a ostatecznie — labirynt. Tu jest on kwadratowy, a pa- rametr SIZE okre(cid:258)la jego wielko(cid:258)(cid:202) w komórkach. Labirynt z parametrem SIZE rów- nym 10 ma po 10 komórek w wymiarach x i z, jednak w (cid:258)wiecie Minecrafta zajmuje dwukrotnie wi(cid:218)cej miejsca (20 na 20 bloków), poniewa(cid:285) mi(cid:218)dzy komórkami znaj- duj(cid:200) si(cid:218) jednoblokowe (cid:258)ciany. Stanie si(cid:218) to zrozumia(cid:239)e, gdy zaczniesz budowa(cid:202) la- birynt. Próbowa(cid:239)em tworzy(cid:202) labirynty o parametrze SIZE równym 40, jednak ich bu- dowanie zajmuje wiele czasu, a eksploracja — ca(cid:239)e wieki. Na razie wystarczy warto(cid:258)(cid:202) 10. Je(cid:258)li w (cid:258)wiecie nie ma wystarczaj(cid:200)co du(cid:285)o miejsca na labirynt, program zako(cid:241)czy prac(cid:218) i zg(cid:239)osi b(cid:239)(cid:200)d. Rysunek 7.2. Pocz(cid:200)tkowa siatka Parametr HEIGHT okre(cid:258)la w blokach wysoko(cid:258)(cid:202) (cid:258)cian labiryntu. Wybra(cid:239)em warto(cid:258)(cid:202) 2, poniewa(cid:285) przy warto(cid:258)ci 1 mo(cid:285)na przeskakiwa(cid:202) (cid:258)ciany labiryntu (gracz automatycz- nie wchodzi na bloki o tej wysoko(cid:258)ci). Wy(cid:285)sze warto(cid:258)ci powoduj(cid:200), (cid:285)e nie mo(cid:285)na zobaczy(cid:202) widocznych w oddali gór, które s(cid:200) dla u(cid:285)ytkownika cenn(cid:200) wskazówk(cid:200) wizualn(cid:200). Kup książkęPoleć książkę 162 RASPBERRY PI. NAJLEPSZE PROJEKTY Sta(cid:239)e MAZE_X, GROUND i MAZE_Z okre(cid:258)laj(cid:200) wspó(cid:239)rz(cid:218)dne pocz(cid:200)tku labiryntu. Materia(cid:239), z którego zbudowany jest labirynt (MAZE_MATERIAL), to kamie(cid:241) (1), a materia(cid:239)em pod(cid:239)o- (cid:285)a (GROUND_MATERIAL) jest trawa (2). Dost(cid:218)pna jest te(cid:285) opcja, która pozwala doda(cid:202) sufit, co uniemo(cid:285)liwia graczowi wzniesienie si(cid:218) ponad labirynt. Na razie jednak opcja ta jest wy(cid:239)(cid:200)czona, co pozwala swobodnie eksplorowa(cid:202) labirynt w trakcie jego tworzenia. WSKAZÓWKA Doskonale wygl(cid:200)da labirynt z pó(cid:239)ek z ksi(cid:200)(cid:285)kami (MAZE_MATERIAL=47). Przygotowywanie pod(cid:239)o(cid:285)a Jedn(cid:200) z pierwszych rzeczy, jakie trzeba zrobi(cid:202), jest upewnienie si(cid:218), (cid:285)e labirynt znajduje si(cid:218) na równym sta(cid:239)ym l(cid:200)dzie. Poniewa(cid:285) (cid:258)wiat Minecrafta jest generowany dynamicznie, mo(cid:285)e si(cid:218) okaza(cid:202), (cid:285)e stawiasz budowl(cid:218) w (cid:258)rodku góry lub na morzu. Oprócz powierzchni przeznaczonej na labirynt nale(cid:285)y oczy(cid:258)ci(cid:202) obszar 10 bloków wokó(cid:239) budowli, aby gracz móg(cid:239) wygodnie si(cid:218) do niej zbli(cid:285)y(cid:202) i obej(cid:258)(cid:202) j(cid:200) dooko(cid:239)a. Najpierw opró(cid:285)nij obszar przez wype(cid:239)nienie go blokami powietrza. Spowoduje to usuni(cid:218)cie wszystkich innych obiektów z danego miejsca. Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE*2) i od MAZE_Z do MAZE_Z+(SIZE*2). Liczba bloków jest dwa razy wi(cid:218)ksza od liczby komórek (SIZE), poniewa(cid:285) na prawo i poni(cid:285)ej ka(cid:285)dej komórki znajduje si(cid:218) (cid:258)ciana. (cid:165)rodkowy punkt labiryntu w (cid:258)wiecie Minecrafta ma wspó(cid:239)rz(cid:218)dne MAZE_X+SIZE, MAZE_Z+SIZE. Trzeba te(cid:285) opró(cid:285)ni(cid:202) obszar 10 bloków w ka(cid:285)dym kierunku od labiryntu. Poni(cid:285)szy kod usuwa wszystkie bloki na wysoko(cid:258)(cid:202) 150 bloków od poziomu labiryntu. Dzi(cid:218)ki temu nie istnieje ryzyko, (cid:285)e nieusuni(cid:218)te bloki góry spadn(cid:200) z nieba do labiryntu i b(cid:218)d(cid:200) le(cid:285)e(cid:202) w korytarzach: mc.setBlocks(MAZE_X-10, GROUND, MAZE_Z-10, MAZE_X+(SIZE*2)+10, GROUND+150, (cid:180)MAZE_Z+(SIZE*2)+10, 0) mc.setBlocks(MAZE_X-10, GROUND, MAZE_Z-10, MAZE_X+(SIZE*2)+10, GROUND, (cid:180)MAZE_Z+(SIZE*2)+10, GROUND_MATERIAL) Zalecam, aby doda(cid:202) blok wyznaczaj(cid:200)cy pocz(cid:200)tkowy róg labiryntu (wspó(cid:239)rz(cid:218)dne MAZE_X, MAZE_Z). Jest to przydatne przy pisaniu i debugowaniu programu, poniewa(cid:285) pozwala okre(cid:258)li(cid:202) po(cid:239)o(cid:285)enie labiryntu przy obserwowaniu go z lotu ptaka. Blok mo(cid:285)na doda(cid:202) za pomoc(cid:200) poni(cid:285)szego kodu: mc.setBlock(MAZE_X, GROUND+HEIGHT+1, MAZE_Z, MAZE_MATERIAL) Umie(cid:258)(cid:202) posta(cid:202) nad (cid:258)rodkiem labiryntu, aby(cid:258) móg(cid:239) patrze(cid:202) w dó(cid:239) i obserwowa(cid:202) jego powstawanie. Je(cid:258)li nie masz w(cid:239)(cid:200)czonego trybu latania, spadniesz na (cid:258)cian(cid:218) labi- ryntu, jednak zawsze mo(cid:285)esz ponownie uruchomi(cid:202) ten tryb. mc.player.setTilePos(MAZE_X+SIZE, GROUND+25, MAZE_Z+SIZE) Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 163 Dodawanie (cid:258)cian labiryntu Aby utworzy(cid:202) przypominaj(cid:200)c(cid:200) gofra siatk(cid:218), zastosuj poni(cid:285)szy kod: for line in range(0, (SIZE+1)*2, 2): mc.setBlocks(MAZE_X+line, GROUND+1, MAZE_Z, MAZE_X+line, GROUND+HEIGHT, (cid:180)MAZE_Z+(SIZE*2), MAZE_MATERIAL) mc.setBlocks(MAZE_X, GROUND+1, MAZE_Z+line, MAZE_X+(SIZE*2), GROUND+HEIGHT, (cid:180)MAZE_Z+line, MAZE_MATERIAL) P(cid:218)tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE*2. Przed podwo- jeniem warto(cid:258)ci trzeba doda(cid:202) do SIZE liczb(cid:218) 1, poniewa(cid:285) funkcja range nie zwraca ostatniej warto(cid:258)ci w sekwencji (na przyk(cid:239)ad wywo(cid:239)anie range(1, 10) zwraca licz- by od 1 do 9). Liczba 2 na ko(cid:241)cu wywo(cid:239)ania range oznacza wielko(cid:258)(cid:202) kroku, tak wi(cid:218)c p(cid:218)tla w ka(cid:285)dym powtórzeniu przyjmuje kolejne warto(cid:258)ci parzyste. W efekcie mi(cid:218)- dzy (cid:258)cianami pozostaj(cid:200) puste miejsca (komórki). Przy ka(cid:285)dym powtórzeniu p(cid:218)tli u(cid:285)ywany jest prostopad(cid:239)o(cid:258)cian do narysowania dwóch (cid:258)cian, które biegn(cid:200) przez ca(cid:239)(cid:200) szeroko(cid:258)(cid:202) labiryntu wzd(cid:239)u(cid:285) osi x i z. To, (cid:285)e w miejscach przeci(cid:218)cia si(cid:218) (cid:258)cian blok jest dodawany dwukrotnie, nie ma znaczenia. (cid:165)ciana jest budowana od pozio- mu GROUND+1, dlatego gdy usuniesz (cid:258)ciany w celu utworzenia (cid:258)cie(cid:285)ek, nadal b(cid:218)dzie widoczna trawa. Nie zapomnij o dwukropku po instrukcji for. Ponadto dwa nast(cid:218)pne wiersze musz(cid:200) by(cid:202) wy- ró(cid:285)nione wci(cid:218)ciem (jest to dla Pythona informacja, (cid:285)e nale(cid:285)(cid:200) do p(cid:218)tli). WSKAZÓWKA Powiniene(cid:258) uzyska(cid:202) siatk(cid:218) wygl(cid:200)daj(cid:200)c(cid:200) tak, jak na rysunku 7.3. Rysunek 7.3. Siatka w Minecrafcie Kup książkęPoleć książkę 164 RASPBERRY PI. NAJLEPSZE PROJEKTY Algorytm generowania labiryntu Przed rozpocz(cid:218)ciem analizowania kodu, który przekszta(cid:239)ca gofra w labirynt, wyja(cid:258)niam, jak ten kod dzia(cid:239)a. Celem jest utworzenie labiryntu doskona(cid:239)ego (w sensie technicznym — nie s(cid:200) to moje przechwa(cid:239)ki). Oznacza to, (cid:285)e w labiryncie ma nie by(cid:202) (cid:285)adnych p(cid:218)tli ani niedost(cid:218)pnych miejsc. Mi(cid:218)dzy dowolnymi dwoma punktami istnieje tylko jedna (cid:258)cie(cid:285)ka. Program dzia(cid:239)a w nast(cid:218)puj(cid:200)cy sposób: 1. Punktem wyj(cid:258)cia jest utworzony gofr, w którym ka(cid:285)da komórka jest otoczona z czterech stron (cid:258)cianami. 2. Nale(cid:285)y losowo wybra(cid:202) pocz(cid:200)tkow(cid:200) komórk(cid:218) labiryntu. 3. Trzeba zbada(cid:202) wszystkie s(cid:200)siednie komórki i utworzy(cid:202) list(cid:218) tych, które maj(cid:200) wszystkie cztery (cid:258)ciany. S(cid:200) to komórki, które nie zosta(cid:239)y jeszcze odwiedzone. 4. Je(cid:258)li istniej(cid:200) nieodwiedzone s(cid:200)siednie komórki, nale(cid:285)y losowo wybra(cid:202) jedn(cid:200) z nich, usun(cid:200)(cid:202) (cid:258)cian(cid:218) mi(cid:218)dzy bie(cid:285)(cid:200)c(cid:200) i wybran(cid:200) komórk(cid:200), a nast(cid:218)pnie przej(cid:258)(cid:202) do tej ostatniej. W tym momencie to ona staje si(cid:218) bie(cid:285)(cid:200)c(cid:200) komórk(cid:200). 5. Je(cid:285)eli wszystkie komórki s(cid:200)siaduj(cid:200)ce z bie(cid:285)(cid:200)c(cid:200) zosta(cid:239)y ju(cid:285) odwiedzone, nale(cid:285)y cofn(cid:200)(cid:202) si(cid:218) o jedn(cid:200) komórk(cid:218) i ustawi(cid:202) j(cid:200) jako bie(cid:285)(cid:200)c(cid:200). 6. Trzeba powtarza(cid:202) kroki od 3. do 5. do momentu odwiedzenia wszystkich komórek. Konfigurowanie zmiennych i list Aby zaimplementowa(cid:202) ten algorytm, nale(cid:285)y zastosowa(cid:202) nast(cid:218)puj(cid:200)ce zmienne: (cid:80) Zmienna numberOfCells. Przechowuje (cid:239)(cid:200)czn(cid:200) liczb(cid:218) komórek labiryntu (czyli SIZE*SIZE). (cid:80) Zmienna numberOfVisitedCells. Przechowuje liczb(cid:218) komórek odwiedzonych do tej pory. Je(cid:258)li ta liczba jest identyczna z warto(cid:258)ci(cid:200) zmiennej numberOfCells, oznacza to, (cid:285)e algorytm odwiedzi(cid:239) ka(cid:285)d(cid:200) komórk(cid:218) i usun(cid:200)(cid:239) jedn(cid:200) z jej (cid:258)cian. Mo(cid:285)na wi(cid:218)c dotrze(cid:202) do ka(cid:285)dej komórki i labirynt jest uko(cid:241)czony. (cid:80) Zmienna xposition. Zapami(cid:218)tuje pozycj(cid:218) na wymiarze „x” w czasie poruszania si(cid:218) po labiryncie i generowania go. Pozycja jest mierzona w komórkach i po- cz(cid:200)tkowo przyjmuje losow(cid:200) warto(cid:258)(cid:202) z przedzia(cid:239)u od 1 do SIZE. (cid:80) Zmienna zposition. Zapami(cid:218)tuje pozycj(cid:218) na wymiarze „z” w czasie poruszania si(cid:218) po labiryncie i generowania go. Pozycja jest mierzona w komórkach i po- cz(cid:200)tkowo przyjmuje warto(cid:258)(cid:202) losow(cid:200). (cid:80) Lista cellsVisitedList[]. Przechowuje (cid:258)cie(cid:285)k(cid:218), dzi(cid:218)ki czemu program mo(cid:285)e si(cid:218) cofa(cid:202). Przy tworzeniu listy nale(cid:285)y zapisa(cid:202) w niej pocz(cid:200)tkow(cid:200) pozycj(cid:218) za pomoc(cid:200) metody append(). (cid:80) Zmienne playerx i playerz. S(cid:239)u(cid:285)(cid:200) do zapami(cid:218)tywania pocz(cid:200)tkowej pozycji, dzi(cid:218)ki czemu mo(cid:285)na umie(cid:258)ci(cid:202) w niej gracza po zbudowaniu labiryntu. Kup książkęPoleć książkę ROZDZIA(cid:146) 7. GENEROWANIE LABIRYNTÓW W MINECRAFCIE 165 W kodzie algorytmów tego rodzaju (jest to algorytm generowania labiryntów metod(cid:200) DSF) cz(cid:218)sto potrzebna jest lista lub podobna struktura danych do przecho- wywania lokalizacji (cid:258)cian. Tutaj jest to niepotrzebne, poniewa(cid:285) w Minecrafcie ist- niej(cid:200) widoczne (cid:258)ciany. Je(cid:258)li chcesz, mo(cid:285)esz zapisa(cid:202) labirynt w (cid:258)wiecie gry. Poni(cid:285)szy kod ustawia pocz(cid:200)tkowe warto(cid:258)ci zmiennych: numberOfCells = SIZE*SIZE numberOfVisitedCells = 1 cellsVisitedList = [] xposition = random.randint(1, SIZE) zposition = random.randint(1, SIZE) playerx = xposition playerz = zposition cellsVisitedList.append((xposition, zposition)) Tworzenie funkcji W programie potrzebnych jest kilka podstawowych funkcji. Oto one: (cid:80) Funkcje realx(x) i realz(z). Przekszta(cid:239)caj(cid:200) wspó(cid:239)rz(cid:218)dne labiryntu (podawane w komórkach) na wspó(cid:239)rz(cid:218)dne (cid:258)wiata Minecrafta (mierzone w blokach i prze- suni(cid:218)te wzgl(cid:218)dem pocz(cid:200)tkowej pozycji labiryntu). (cid:80) Funkcje showMaker(x,z) i hideMaker(x,z). Dodaj(cid:200) i ukrywaj(cid:200) z(cid:239)oty blok poka- zuj(cid:200)cy, do której komórki program doszed(cid:239) w trakcie budowania labiryntu. Ciekawe jest obserwowanie zmian tych komórek z lotu ptaka, a ponadto funk- cje te s(cid:200) przydatne w trakcie tworzenia i debugowania programu. (cid:80) Funkcja demolish(realx,realz). S(cid:239)u(cid:285)y do usuwania (cid:258)cian w labiryncie. Jako parametry przyjmuje rzeczywiste wspó(cid:239)rz(cid:218)dne ze (cid:258)wiata Minecrafta. (cid:80) Funkcja testAllWalls(cellx, cellz). Sprawdza, czy wszystkie cztery (cid:258)ciany ko- mórki pozosta(cid:239)y nietkni(cid:218)te. Je(cid:258)li tak jest, zwraca warto(cid:258)(cid:202) True (w przeciwnym razie zwraca False). W tej funkcji u(cid:285)ywane jest polecenie mc.getBlock(x, y, z), które okre(cid:258)la typ bloku (blockTypeId) stoj(cid:200)cego w danym miejscu. W standar- dowy sposób (za pomoc(cid:200) dwóch znaków równo(cid:258)ci) nale(cid:285)y sprawdzi(cid:202), czy ten typ jest taki sam jak typ materia(cid:239)u (cid:258)cian (MAZE_MATERIAL). Je(cid:258)li tak jest, oznacza to, (cid:285)e w danym miejscu stoi (cid:258)ciana. Dodaj poni(cid:285)sze definicje funkcji w pocz(cid:200)tkowej cz(cid:218)(cid:258)ci programu, po instrukcji usta- wiaj(cid:200)cej modu(cid:239) Minecrafta: def realx(x): return MAZE_X+(x*2)-1 def realz(z): return MAZE_Z+(z*2)-1 def showMaker(x, z): mc.setBlock(realx(x), GROUND+1, realz(z), 41) # 41=z(cid:225)oto Kup książkęPoleć książkę 166 RASPBERRY PI. NAJLEPSZE PROJEKTY def hideMaker(x, z): mc.setBlock(realx(x), GROUND+1, realz(z), 0) def demolish(realx, realz): mc.setBlocks(realx, GROUND+1, realz, realx, HEIGHT+GROUND, realz, 0) def testAllWalls(cellx, cellz): if mc.getBlock(realx(cellx)+1, GROUND+1, realz(cellz))==MAZE_MATERIAL (cid:180)and mc.getBlock(realx(cellx)-1, GROUND+1, realz(cellz))==MAZE_MATERIAL (cid:180)and mc.getBlock(realx(cellx), GROUND+1, realz(cellz)+1)==MAZE_MATERIAL (cid:180)and mc.getBlock(realx(cellx), GROUND+1, realz(cellz)-1)==MAZE_MATERIAL: return True else: return False WSKAZÓWKA Je(cid:258)li wyst(cid:200)pi(cid:239) b(cid:239)(cid:200)d, sprawd(cid:283), czy nie brakuje dwukropków po instrukcjach def i if. Tworzenie g(cid:239)ównej p(cid:218)tli Algorytm tworz(cid:200)cy labirynt dzia(cid:239)a do momentu odwiedzenia wszystkich komórek. Dlatego rozpoczyna si(cid:218) od poni(cid:285)szej instrukcji: while numberOfVisitedCells numberOfCells: Trzeba sprawdzi(cid:202), czy (cid:258)ciany w komórkach s(cid:200)siaduj(cid:200)cych z bie(cid:285)(cid:200)c(cid:200) pozostaj(cid:200) nietkni(cid:218)te. W tym celu nale(cid:285)y zbada(cid:202) po kolei ka(cid:285)dy kierunek za pomoc(cid:200) funkcji testAllWalls(x, z). Po znalezieniu komórki z wszystkimi (cid:258)cianami nale(cid:285)y za po- moc(cid:200) metody append() doda(cid:202) jej kierunek do listy possibleDirections[]. Tak wy- gl(cid:200)da implementacja trzeciego kroku algorytmu (pami(cid:218)taj, (cid:285)e ca(cid:239)y poni(cid:285)szy kod jest wci(cid:218)ty wzgl(cid:218)dem nadrz(cid:218)dnej instrukcji while): possibleDirections = [] if testAll
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Raspberry Pi. Najlepsze projekty
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: