Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty...

36

Transcript of Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty...

Page 1: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

Tytuł oryginału Raspberry Pi Project

Tłumaczenie Tomasz Walczak

ISBN 978-83-246-9221-7

copy 2014 John Wiley amp Sons Ltd

All Rights Reserved Authorised translation from the English language edition published by John Wiley amp Sons Limited Responsibility for the accuracy of the translation rests solely with Helion SA and is not the responsibility of John Wiley amp Sons Limited

No part of this book may be reproduced in any form without the written permission of the original copyright holder John Wiley amp Sons Limited

Translation copyright copy 2014 by Helion SA

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 amp Sons Ltd logo are trademarks or registered trademarks of John Wiley and Sons Ltd and or its affiliates in the United States andor 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 amp 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ą roacutewnież żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce

Wydawnictwo HELIONul Kościuszki 1c 44-100 GLIWICEtel 32 231 22 19 32 230 98 63e-mail helionhelionplWWW httphelionpl (księgarnia internetowa katalog książek)

Drogi CzytelnikuJeżeli chcesz ocenić tę książkę zajrzyj pod adres httphelionpluseropinieraspnpMożesz tam wpisać swoje uwagi spostrzeżenia recenzję

Printed in Poland

bull Kup książkębull Poleć książkę bull Oceń książkę

bull Księgarnia internetowabull Lubię to raquo Nasza społeczność

Spis tre ci

Wprowadzenie 13Historia powstania 13Informatyka u ytkowa 14Dlaczego wszyscy powinni uczy si informatyki 14Poznaj Raspberry Pi 15O tej ksi ce 16Jak korzysta z tej ksi ki 17Przysz o 19

Cz I Wprowadzenie do Raspberry Pi 21

ROZDZIA 1Uruchamianie Raspberry Pi 23

System operacyjny 24Pod czanie Raspberry Pi 30Proces adowania 38Uruchamianie interfejsu graficznego 39Uruchamianie terminala w rodowisku X 39Rozwi zywanie problemoacutew 40Pora rozpocz zabaw 42

ROZDZIA 2Wprowadzaj cy projekt oprogramowania mdash generator obelg 43

Uruchamianie pierwszego programu w Pythonie 44Zapisywanie programu 46Generowanie obelg 48Imienne obra anie znajomych 51Tworzenie strumienia obelg 53

czenie wszystkich elementoacutew 56

Cz II Projekty oprogramowania 59

ROZDZIA 3Koacute ko i krzy yk 61

B dy 62Pocz tek 63Gra dla dwoacutech zawodnikoacutew 67Gra przeciw komputerowi 70Twoja kolej 79

ROZDZIA 4Oto przegl d najnowszych wiadomo ci 81

Pierwsze telepromptery 82Pi Prompter 83

Kup książkę Poleć książkę

8 RASPBERRY PI NAJLEPSZE PROJEKTY

Czego potrzebujesz 83Krok bli ej do u ytecznego programu 88Gotowy kod programu Pi Prompter 92Fizyczna budowa telepromptera 96Twoja kolej 99

ROZDZIA 5Ping 101

Wczesne produkty komercyjne 102Gra Ping 103Ulepszanie gry Ping 107Gra dla jednej osoby 111Wersja dla dwoacutech graczy 117Twoja kolej 123

ROZDZIA 6Pie Man 125

Pie Man 126Tworzenie zasoboacutew 127Przygotowywanie planszy 131Przebieg gry 135Wy wietlanie zawarto ci ekranu 142Ostatnia funkcja 144Twoja kolej 149

ROZDZIA 7Generowanie labiryntoacutew w Minecrafcie 151

Instalowanie Minecrafta 152Uruchamianie Minecrafta 153Gra w Minecrafta 154Przygotowania do u ycia Pythona 156U ywanie modu u Minecrafta 156Twoja kolej 172

Cz III Projekty sprz towe 173

ROZDZIA 8Kolorowa wersja gry Snap 175

Implementowanie gry 176Teoria 176Oprogramowanie do testowania gry 189Oprogramowanie gry 192Twoja kolej 196

ROZDZIA 9Sprawd swoacutej czas reakcji 197

Witaj w wiecie systemoacutew wbudowanych 198Pozyskiwanie komponentoacutew 199Konfigurowanie karty PiFace Digital 200Pod czanie karty PiFace Digital 204

Kup książkę Poleć książkę

SPIS TRE CI 9

U ywanie emulatora 204Komunikowanie si z Pythonem 205Stoper do pomiaru czasu reakcji 208Co pod czysz do komputera 218

ROZDZIA 10Twittuj ca zabawka 219

bdquoHakowanierdquo zabawki 220Jak zmusi zabawk do moacutewienia 224Poruszanie zabawk 227

czenie si z Twitterem 230czenie wszystkich elementoacutew 235

Podsumowanie 238

ROZDZIA 11wiat a dyskotekowe 241Definiowanie sekwencji wiate 242Kod wykonuj cy inne operacje 244Troch teorii 246Projektowanie sekwensera 247Implementowanie sekwensera 248O wietlenie 254U ywanie d u szych ta m LED 256Ruszaj ce si wiat a 258Uruchamianie obwodu 262Twoja kolej 262

ROZDZIA 12Zamek do drzwi 263

Ogoacutelne omoacutewienie systemu 264Systemy krytyczne ze wzgl du na bezpiecze stwo 265Zamek do drzwi 266Wst pna wysokopoziomowa symulacja programowa 267Blok wyj ciowy 268Blok do pobierania danych wej ciowych 271Blok uwierzytelniaj cy u ytkownika 271Odblokowywanie drzwi bez ich dotykania 273Testowanie programu i mocowanie zamka 278

czenie wielu drzwi w sieci 279Twoja kolej 280Sztuka programowania 281

ROZDZIA 13Automatyzowanie domu 283

IOT 284Projekt 1 Jak zbudowa czujnik ruchu oraz wy cznik drzwiowy 284Projekt 2 Monitorowanie domu za pomoc kamery internetowej 290Projekt 3 Budowanie termometru 296Projekt 4 Wysy anie e-maili z powiadomieniami 300Projekt 5 Wysy anie e-maili za pomoc pilota bezprzewodowego 306Twoja kolej 311

Kup książkę Poleć książkę

10 RASPBERRY PI NAJLEPSZE PROJEKTY

ROZDZIA 14Komputerowe sterowanie elektronik toru z samochodzikami 313

Kupno toru z samochodzikami 314Pod czanie toru z samochodzikami 314Testowanie po cze z torem 316Pobieranie danych od graczy 316Oprogramowanie 325Kod gry 327Twoja kolej 332

ROZDZIA 15Generowanie grafiki i zamieszczanie jej na Facebooku 333

Pomys 334Rodzaje enkoderoacutew obrotowych 334Dane wyj ciowe z enkodera 335Przesy anie rysunkoacutew do Facebooka 342Ostateczna wersja programu Roto-Sketch 346Tworzenie symetrycznych wzoroacutew 351Twoja kolej 355

ROZDZIA 16Harmonograf 357

Pomys 359Efekt Halla 359Poznaj Arduino 361

czenie roacute nych elementoacutew 362Programowanie Arduino 372Programowanie Raspberry Pi 383U ywanie programu Pendulum Pi 388Twoja kolej 388

ROZDZIA 17Zaawansowana budka dla ptakoacutew mdash obserwowanie przyrody 391

Budowanie niewidocznych czujnikoacutew promieni 393Montowanie czujnikoacutew 397Zapisywanie aktywno ci ptakoacutew w pliku 400Przetwarzanie danych 410Radzenie sobie z szumem z czujnikoacutew 415Rysowanie wykresu 420W czanie budki 422Twoja kolej 423Mo liwo ci s nieograniczone 424

Skorowidz 425

Kup książkę Poleć książkę

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 2: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

Spis tre ci

Wprowadzenie 13Historia powstania 13Informatyka u ytkowa 14Dlaczego wszyscy powinni uczy si informatyki 14Poznaj Raspberry Pi 15O tej ksi ce 16Jak korzysta z tej ksi ki 17Przysz o 19

Cz I Wprowadzenie do Raspberry Pi 21

ROZDZIA 1Uruchamianie Raspberry Pi 23

System operacyjny 24Pod czanie Raspberry Pi 30Proces adowania 38Uruchamianie interfejsu graficznego 39Uruchamianie terminala w rodowisku X 39Rozwi zywanie problemoacutew 40Pora rozpocz zabaw 42

ROZDZIA 2Wprowadzaj cy projekt oprogramowania mdash generator obelg 43

Uruchamianie pierwszego programu w Pythonie 44Zapisywanie programu 46Generowanie obelg 48Imienne obra anie znajomych 51Tworzenie strumienia obelg 53

czenie wszystkich elementoacutew 56

Cz II Projekty oprogramowania 59

ROZDZIA 3Koacute ko i krzy yk 61

B dy 62Pocz tek 63Gra dla dwoacutech zawodnikoacutew 67Gra przeciw komputerowi 70Twoja kolej 79

ROZDZIA 4Oto przegl d najnowszych wiadomo ci 81

Pierwsze telepromptery 82Pi Prompter 83

Kup książkę Poleć książkę

8 RASPBERRY PI NAJLEPSZE PROJEKTY

Czego potrzebujesz 83Krok bli ej do u ytecznego programu 88Gotowy kod programu Pi Prompter 92Fizyczna budowa telepromptera 96Twoja kolej 99

ROZDZIA 5Ping 101

Wczesne produkty komercyjne 102Gra Ping 103Ulepszanie gry Ping 107Gra dla jednej osoby 111Wersja dla dwoacutech graczy 117Twoja kolej 123

ROZDZIA 6Pie Man 125

Pie Man 126Tworzenie zasoboacutew 127Przygotowywanie planszy 131Przebieg gry 135Wy wietlanie zawarto ci ekranu 142Ostatnia funkcja 144Twoja kolej 149

ROZDZIA 7Generowanie labiryntoacutew w Minecrafcie 151

Instalowanie Minecrafta 152Uruchamianie Minecrafta 153Gra w Minecrafta 154Przygotowania do u ycia Pythona 156U ywanie modu u Minecrafta 156Twoja kolej 172

Cz III Projekty sprz towe 173

ROZDZIA 8Kolorowa wersja gry Snap 175

Implementowanie gry 176Teoria 176Oprogramowanie do testowania gry 189Oprogramowanie gry 192Twoja kolej 196

ROZDZIA 9Sprawd swoacutej czas reakcji 197

Witaj w wiecie systemoacutew wbudowanych 198Pozyskiwanie komponentoacutew 199Konfigurowanie karty PiFace Digital 200Pod czanie karty PiFace Digital 204

Kup książkę Poleć książkę

SPIS TRE CI 9

U ywanie emulatora 204Komunikowanie si z Pythonem 205Stoper do pomiaru czasu reakcji 208Co pod czysz do komputera 218

ROZDZIA 10Twittuj ca zabawka 219

bdquoHakowanierdquo zabawki 220Jak zmusi zabawk do moacutewienia 224Poruszanie zabawk 227

czenie si z Twitterem 230czenie wszystkich elementoacutew 235

Podsumowanie 238

ROZDZIA 11wiat a dyskotekowe 241Definiowanie sekwencji wiate 242Kod wykonuj cy inne operacje 244Troch teorii 246Projektowanie sekwensera 247Implementowanie sekwensera 248O wietlenie 254U ywanie d u szych ta m LED 256Ruszaj ce si wiat a 258Uruchamianie obwodu 262Twoja kolej 262

ROZDZIA 12Zamek do drzwi 263

Ogoacutelne omoacutewienie systemu 264Systemy krytyczne ze wzgl du na bezpiecze stwo 265Zamek do drzwi 266Wst pna wysokopoziomowa symulacja programowa 267Blok wyj ciowy 268Blok do pobierania danych wej ciowych 271Blok uwierzytelniaj cy u ytkownika 271Odblokowywanie drzwi bez ich dotykania 273Testowanie programu i mocowanie zamka 278

czenie wielu drzwi w sieci 279Twoja kolej 280Sztuka programowania 281

ROZDZIA 13Automatyzowanie domu 283

IOT 284Projekt 1 Jak zbudowa czujnik ruchu oraz wy cznik drzwiowy 284Projekt 2 Monitorowanie domu za pomoc kamery internetowej 290Projekt 3 Budowanie termometru 296Projekt 4 Wysy anie e-maili z powiadomieniami 300Projekt 5 Wysy anie e-maili za pomoc pilota bezprzewodowego 306Twoja kolej 311

Kup książkę Poleć książkę

10 RASPBERRY PI NAJLEPSZE PROJEKTY

ROZDZIA 14Komputerowe sterowanie elektronik toru z samochodzikami 313

Kupno toru z samochodzikami 314Pod czanie toru z samochodzikami 314Testowanie po cze z torem 316Pobieranie danych od graczy 316Oprogramowanie 325Kod gry 327Twoja kolej 332

ROZDZIA 15Generowanie grafiki i zamieszczanie jej na Facebooku 333

Pomys 334Rodzaje enkoderoacutew obrotowych 334Dane wyj ciowe z enkodera 335Przesy anie rysunkoacutew do Facebooka 342Ostateczna wersja programu Roto-Sketch 346Tworzenie symetrycznych wzoroacutew 351Twoja kolej 355

ROZDZIA 16Harmonograf 357

Pomys 359Efekt Halla 359Poznaj Arduino 361

czenie roacute nych elementoacutew 362Programowanie Arduino 372Programowanie Raspberry Pi 383U ywanie programu Pendulum Pi 388Twoja kolej 388

ROZDZIA 17Zaawansowana budka dla ptakoacutew mdash obserwowanie przyrody 391

Budowanie niewidocznych czujnikoacutew promieni 393Montowanie czujnikoacutew 397Zapisywanie aktywno ci ptakoacutew w pliku 400Przetwarzanie danych 410Radzenie sobie z szumem z czujnikoacutew 415Rysowanie wykresu 420W czanie budki 422Twoja kolej 423Mo liwo ci s nieograniczone 424

Skorowidz 425

Kup książkę Poleć książkę

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 3: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

8 RASPBERRY PI NAJLEPSZE PROJEKTY

Czego potrzebujesz 83Krok bli ej do u ytecznego programu 88Gotowy kod programu Pi Prompter 92Fizyczna budowa telepromptera 96Twoja kolej 99

ROZDZIA 5Ping 101

Wczesne produkty komercyjne 102Gra Ping 103Ulepszanie gry Ping 107Gra dla jednej osoby 111Wersja dla dwoacutech graczy 117Twoja kolej 123

ROZDZIA 6Pie Man 125

Pie Man 126Tworzenie zasoboacutew 127Przygotowywanie planszy 131Przebieg gry 135Wy wietlanie zawarto ci ekranu 142Ostatnia funkcja 144Twoja kolej 149

ROZDZIA 7Generowanie labiryntoacutew w Minecrafcie 151

Instalowanie Minecrafta 152Uruchamianie Minecrafta 153Gra w Minecrafta 154Przygotowania do u ycia Pythona 156U ywanie modu u Minecrafta 156Twoja kolej 172

Cz III Projekty sprz towe 173

ROZDZIA 8Kolorowa wersja gry Snap 175

Implementowanie gry 176Teoria 176Oprogramowanie do testowania gry 189Oprogramowanie gry 192Twoja kolej 196

ROZDZIA 9Sprawd swoacutej czas reakcji 197

Witaj w wiecie systemoacutew wbudowanych 198Pozyskiwanie komponentoacutew 199Konfigurowanie karty PiFace Digital 200Pod czanie karty PiFace Digital 204

Kup książkę Poleć książkę

SPIS TRE CI 9

U ywanie emulatora 204Komunikowanie si z Pythonem 205Stoper do pomiaru czasu reakcji 208Co pod czysz do komputera 218

ROZDZIA 10Twittuj ca zabawka 219

bdquoHakowanierdquo zabawki 220Jak zmusi zabawk do moacutewienia 224Poruszanie zabawk 227

czenie si z Twitterem 230czenie wszystkich elementoacutew 235

Podsumowanie 238

ROZDZIA 11wiat a dyskotekowe 241Definiowanie sekwencji wiate 242Kod wykonuj cy inne operacje 244Troch teorii 246Projektowanie sekwensera 247Implementowanie sekwensera 248O wietlenie 254U ywanie d u szych ta m LED 256Ruszaj ce si wiat a 258Uruchamianie obwodu 262Twoja kolej 262

ROZDZIA 12Zamek do drzwi 263

Ogoacutelne omoacutewienie systemu 264Systemy krytyczne ze wzgl du na bezpiecze stwo 265Zamek do drzwi 266Wst pna wysokopoziomowa symulacja programowa 267Blok wyj ciowy 268Blok do pobierania danych wej ciowych 271Blok uwierzytelniaj cy u ytkownika 271Odblokowywanie drzwi bez ich dotykania 273Testowanie programu i mocowanie zamka 278

czenie wielu drzwi w sieci 279Twoja kolej 280Sztuka programowania 281

ROZDZIA 13Automatyzowanie domu 283

IOT 284Projekt 1 Jak zbudowa czujnik ruchu oraz wy cznik drzwiowy 284Projekt 2 Monitorowanie domu za pomoc kamery internetowej 290Projekt 3 Budowanie termometru 296Projekt 4 Wysy anie e-maili z powiadomieniami 300Projekt 5 Wysy anie e-maili za pomoc pilota bezprzewodowego 306Twoja kolej 311

Kup książkę Poleć książkę

10 RASPBERRY PI NAJLEPSZE PROJEKTY

ROZDZIA 14Komputerowe sterowanie elektronik toru z samochodzikami 313

Kupno toru z samochodzikami 314Pod czanie toru z samochodzikami 314Testowanie po cze z torem 316Pobieranie danych od graczy 316Oprogramowanie 325Kod gry 327Twoja kolej 332

ROZDZIA 15Generowanie grafiki i zamieszczanie jej na Facebooku 333

Pomys 334Rodzaje enkoderoacutew obrotowych 334Dane wyj ciowe z enkodera 335Przesy anie rysunkoacutew do Facebooka 342Ostateczna wersja programu Roto-Sketch 346Tworzenie symetrycznych wzoroacutew 351Twoja kolej 355

ROZDZIA 16Harmonograf 357

Pomys 359Efekt Halla 359Poznaj Arduino 361

czenie roacute nych elementoacutew 362Programowanie Arduino 372Programowanie Raspberry Pi 383U ywanie programu Pendulum Pi 388Twoja kolej 388

ROZDZIA 17Zaawansowana budka dla ptakoacutew mdash obserwowanie przyrody 391

Budowanie niewidocznych czujnikoacutew promieni 393Montowanie czujnikoacutew 397Zapisywanie aktywno ci ptakoacutew w pliku 400Przetwarzanie danych 410Radzenie sobie z szumem z czujnikoacutew 415Rysowanie wykresu 420W czanie budki 422Twoja kolej 423Mo liwo ci s nieograniczone 424

Skorowidz 425

Kup książkę Poleć książkę

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 4: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

SPIS TRE CI 9

U ywanie emulatora 204Komunikowanie si z Pythonem 205Stoper do pomiaru czasu reakcji 208Co pod czysz do komputera 218

ROZDZIA 10Twittuj ca zabawka 219

bdquoHakowanierdquo zabawki 220Jak zmusi zabawk do moacutewienia 224Poruszanie zabawk 227

czenie si z Twitterem 230czenie wszystkich elementoacutew 235

Podsumowanie 238

ROZDZIA 11wiat a dyskotekowe 241Definiowanie sekwencji wiate 242Kod wykonuj cy inne operacje 244Troch teorii 246Projektowanie sekwensera 247Implementowanie sekwensera 248O wietlenie 254U ywanie d u szych ta m LED 256Ruszaj ce si wiat a 258Uruchamianie obwodu 262Twoja kolej 262

ROZDZIA 12Zamek do drzwi 263

Ogoacutelne omoacutewienie systemu 264Systemy krytyczne ze wzgl du na bezpiecze stwo 265Zamek do drzwi 266Wst pna wysokopoziomowa symulacja programowa 267Blok wyj ciowy 268Blok do pobierania danych wej ciowych 271Blok uwierzytelniaj cy u ytkownika 271Odblokowywanie drzwi bez ich dotykania 273Testowanie programu i mocowanie zamka 278

czenie wielu drzwi w sieci 279Twoja kolej 280Sztuka programowania 281

ROZDZIA 13Automatyzowanie domu 283

IOT 284Projekt 1 Jak zbudowa czujnik ruchu oraz wy cznik drzwiowy 284Projekt 2 Monitorowanie domu za pomoc kamery internetowej 290Projekt 3 Budowanie termometru 296Projekt 4 Wysy anie e-maili z powiadomieniami 300Projekt 5 Wysy anie e-maili za pomoc pilota bezprzewodowego 306Twoja kolej 311

Kup książkę Poleć książkę

10 RASPBERRY PI NAJLEPSZE PROJEKTY

ROZDZIA 14Komputerowe sterowanie elektronik toru z samochodzikami 313

Kupno toru z samochodzikami 314Pod czanie toru z samochodzikami 314Testowanie po cze z torem 316Pobieranie danych od graczy 316Oprogramowanie 325Kod gry 327Twoja kolej 332

ROZDZIA 15Generowanie grafiki i zamieszczanie jej na Facebooku 333

Pomys 334Rodzaje enkoderoacutew obrotowych 334Dane wyj ciowe z enkodera 335Przesy anie rysunkoacutew do Facebooka 342Ostateczna wersja programu Roto-Sketch 346Tworzenie symetrycznych wzoroacutew 351Twoja kolej 355

ROZDZIA 16Harmonograf 357

Pomys 359Efekt Halla 359Poznaj Arduino 361

czenie roacute nych elementoacutew 362Programowanie Arduino 372Programowanie Raspberry Pi 383U ywanie programu Pendulum Pi 388Twoja kolej 388

ROZDZIA 17Zaawansowana budka dla ptakoacutew mdash obserwowanie przyrody 391

Budowanie niewidocznych czujnikoacutew promieni 393Montowanie czujnikoacutew 397Zapisywanie aktywno ci ptakoacutew w pliku 400Przetwarzanie danych 410Radzenie sobie z szumem z czujnikoacutew 415Rysowanie wykresu 420W czanie budki 422Twoja kolej 423Mo liwo ci s nieograniczone 424

Skorowidz 425

Kup książkę Poleć książkę

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 5: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

10 RASPBERRY PI NAJLEPSZE PROJEKTY

ROZDZIA 14Komputerowe sterowanie elektronik toru z samochodzikami 313

Kupno toru z samochodzikami 314Pod czanie toru z samochodzikami 314Testowanie po cze z torem 316Pobieranie danych od graczy 316Oprogramowanie 325Kod gry 327Twoja kolej 332

ROZDZIA 15Generowanie grafiki i zamieszczanie jej na Facebooku 333

Pomys 334Rodzaje enkoderoacutew obrotowych 334Dane wyj ciowe z enkodera 335Przesy anie rysunkoacutew do Facebooka 342Ostateczna wersja programu Roto-Sketch 346Tworzenie symetrycznych wzoroacutew 351Twoja kolej 355

ROZDZIA 16Harmonograf 357

Pomys 359Efekt Halla 359Poznaj Arduino 361

czenie roacute nych elementoacutew 362Programowanie Arduino 372Programowanie Raspberry Pi 383U ywanie programu Pendulum Pi 388Twoja kolej 388

ROZDZIA 17Zaawansowana budka dla ptakoacutew mdash obserwowanie przyrody 391

Budowanie niewidocznych czujnikoacutew promieni 393Montowanie czujnikoacutew 397Zapisywanie aktywno ci ptakoacutew w pliku 400Przetwarzanie danych 410Radzenie sobie z szumem z czujnikoacutew 415Rysowanie wykresu 420W czanie budki 422Twoja kolej 423Mo liwo ci s nieograniczone 424

Skorowidz 425

Kup książkę Poleć książkę

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 6: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

Rozdzia 7Generowanie labiryntoacuteww Minecrafcie

Sean McManus

W tym rozdziale

Instalowanie Minecrafta

Poznawanie wiata Minecrafta

Manipulowanie wiatem Minecrafta w Pythonie

Generowanie losowego labiryntu Minecrafta za pomoc Pythona

Kup książkę Poleć książkę

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 7: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

152 RASPBERRY PI NAJLEPSZE PROJEKTY

Minecraft jest popularny w roacuted fanoacutew klockoacutew Lego z ca ego wiata Pozwalatworzy z blokoacutew wci gaj ce troacutejwymiarowe wiaty i rozpala wyobra ni do tegostopnia e zgodnie z szacunkami sprzedano oko o 20 milionoacutew egzemplarzy tej gryna roacute ne platformy (w tym na komputery PC i konsole Xbox)

Dost pna jest tak e wersja alfa tej gry przeznaczona na Raspberry Pi Dost pny jestw niej tylko tryb tworzenia w ktoacuterym mo na bezpiecznie budowa wiat bez za-gro enia g odem lub atakami potworoacutew Wersja ta ma te ciekaw cech mdash mo naj programowa za pomoc roacute nych j zykoacutew w tym Pythona Oznacza to e da sizbudowa wielki pa ac bez konieczno ci r cznego dodawania wszystkich blokoacutewMo na te co przedstawiam w tym rozdziale pisa programy wymy laj ce orygi-nalne nowe struktury a nast pnie zwiedza i eksplorowa te obiekty

W tym projekcie utworzysz w Pythonie program generuj cy labirynty w MinecrafciePrzy ka dym uruchomieniu program generuje nowy labirynt a u ytkownik mo ekontrolowa jak du a ma by struktura i z jakich materia oacutew nale y j zbudowa W trakcie prac nad projektem zobaczysz jak za pomoc Pythona dodawa i usu-wa bloki w Minecrafcie Dzi ki temu zdob dziesz umiej tno ci ktoacutere pozwol Cipisa w asne programy steruj ce budow

W czasie gdy powstawa a ta ksi ka gra Minecraft Pi Edition by a dost pna w wer-sji alfa Jest to bardzo wczesna wersja testowa (jeszcze mniej zaawansowana niwersja beta) Jednak wykry em w niej tylko kilka problemoacutew okno i jego zawar-to by y le wyroacutewnane przy rozdzielczo ci 1024times768 (dlatego prze czy em j na1280times1024) a kursor dzia a nieprawid owo po zmaksymalizowaniu okna Mimoto zach cam do tego aby przy korzystaniu z oprogramowania w wersji alfa na wy-padek problemoacutew zawsze archiwizowa wa ne dane z Raspberry Pi

WSKAZOacuteWKA Naj atwiejszy sposoacuteb archiwizowania plikoacutew z Raspberry Pi polega na pod czeniu urz dzeniapami ci masowej i wykorzystaniu do skopiowania danych mened era plikoacutew dost pnego w ro-dowisku okienkowym

Kod do tego rozdzia u mo na pobra z mojej witryny httpwwwseancouk

Instalowanie MinecraftaCho Minecraft na inne platformy jest oprogramowaniem komercyjnym wersj alfana Raspberry Pi mo na pobra bezp atnie Aby moacutec uruchomi t wersj trzebazainstalowa w Raspberry Pi dystrybucj Raspbian Wheezy Linuksa Jest to wersjasystemu zalecana przez fundacj Raspberry Pi Mo na j zainstalowa za pomocobrazu NOOBS dost pnego w sekcji z plikami do pobrania z witryny httpwwwraspberrypiorg Informacje na temat instalowania systemu operacyjnego znajdzieszw rozdziale 1 bdquoUruchamianie Raspberry Pirdquo

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 8: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 153

Aby zainstalowa Minecrafta wykonaj nast puj ce czynno ci

1 Upewnij si e Raspberry Pi jest pod czony do internetu Minecrafta pobie-rzesz przez po czenie internetowe

2 Uruchom Raspberry Pi wpisz polecenie startx i wci nij klawisz Enter abyotworzy rodowisko okienkowe

3 Kliknij dwukrotnie ikon Midori w rodowisku okienkowym lub u yj menuPrograms w lewym dolnym rogu aby uruchomi przegl dark internetow

4 Otwoacuterz stron httppiminecraftnet i kliknij odno nik aby pobra MinecraftaW oknie dialogowym kliknij przycisk Save As i zapisz plik w katalogu pi W prze-gl darce plikoacutew katalog ten powinien by wyroacute niony w widocznej po lewejstronie sekcji Places Kliknij przycisk Save i zamknij przegl dark Midori (nieb dziesz ju jej potrzebowa )

5 Kliknij dwukrotnie ikon programu LXTerminal na pulpicie aby uruchomisesj terminala

6 Wprowad instrukcj tar ndashzxvf minecraft-pi-011targz aby wypakowazawarto pobranego pliku W Linuksie wielko znakoacutew ma znaczenie dlategokoniecznie u yj samych ma ych liter Ostatni cz on polecenia to nazwa pobra-nego pliku Mo e si ona zmieni (zw aszcza ko cowe numery) gdy pojawisi nowe wersje Minecrafta Wystarczy wpisa kilka pierwszych liter nazwyi wcisn klawisz Tab aby komputer automatycznie j uzupe ni W trakciewypakowywania plikoacutew ich nazwy b d pojawia si na ekranie W celu wy-wietlenia zawarto ci katalogu pi wpisz instrukcj ls

7 Wprowad polecenie cd mcpi aby przej do katalogu z wypakowanymi plikamiMinecrafta

8 Wpisz instrukcj minecraft-pi i wci nij klawisz Enter aby uruchomi gr

Je li wszystko przebieg o prawid owo powiniene zobaczy ekran tytu owyMinecrafta

Uruchamianie MinecraftaGdy po zainstalowaniu Minecrafta zechcesz ponownie go uruchomi przejd dorodowiska okienkowego (krok 2 w instrukcjach instalacji w podrozdziale bdquoInsta-

lowanie Minecraftardquo) rozpocznij sesj terminala (krok 5) i wpisz polecenie cd mcpia nast pnie minecraft-pi Nie mo na uruchomi Minecrafta z poziomu wierszapolece bez wcze niejszego otwarcia rodowiska okienkowego

WSKAZOacuteWKAJe li zamkniesz okno programu LXTerminal natychmiast zako czysz sesj Minecrafta Dlategosproacutebuj ignorowa to okno ktoacutere na pozoacuter nic nie robi mdash jest ono potrzebne

Kup książkę Poleć książkę

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 9: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

154 RASPBERRY PI NAJLEPSZE PROJEKTY

Gra w MinecraftaGdy uruchomisz Minecrafta w Raspberry Pi na ekranie powitalnym b dziesz moacutegwybra jedn z dwoacutech opcji

Start Game (rozpocz cie gry) Z tej opcji b dziesz korzysta w tym rozdzialedo generowania w asnych wiatoacutew ktoacutere mo na eksplorowa Za jej pomo-c mo esz te wybra wcze niej wygenerowany wiat gdy ponownie uru-chomisz Minecrafta Aby wybra jeden ze wiatoacutew kliknij je i przeci gnijtak aby potrzebny wiat znalaz si po rodku Nast pnie kliknij na nim abygo otworzy

Join Game (do czanie do gry) Ta opcja pozwala do czy do innych graczyw sieci lokalnej Omawianie tego trybu wykracza poza zakres rozdzia u Taopcja umo liwia wspoacute prac lub rywalizacj w wiecie Minecrafta

Kliknij przycisk Start Game a nast pnie wybierz opcj Create New Minecraft wy-generuje wtedy nowy wiat z wyj tkowym uk adem goacuter lasoacutew i oceanoacutew Po zako -czeniu tego procesu zobaczysz wiat z perspektywy pierwszej osoby (rysunek 71)

Rysunek 71Microsoft

w Raspberry Pi

WSKAZOacuteWKA Mo esz zmieni perspektyw i zobaczy posta gracza W tym celu wci nij klawisz Esc abyotworzy menu gry a nast pnie kliknij ikon obok ikony g o nikoacutew w lewym goacuternym rogu

Po zako czeniu gry mo esz j zamkn z poziomu menu gry (aby je wy wietli wci nij klawisz Esc)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 10: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 155

Poruszanie si po wieciePrzy grze w Minecrafta najlepiej jest u ywa obu r k Jedna powinna znajdowa sina myszy a druga mdash na klawiaturze Za pomoc myszy mo esz si rozgl da i zmie-nia kierunek Przesuni cie myszy w lewo lub prawo pozwala si obroacuteci a ruchydo przodu i do ty u powoduj spogl danie w doacute i w goacuter Do poruszania si s uklawisze W (do przodu) S (do ty u) A (w lewo) i D (w prawo) S one zgrupowanew jednym miejscu na klawiaturze dzi ki czemu pos ugiwanie si nimi jest atwe

Posta automatycznie skacze na ni ej po o one obszary je li nad nie przejdzieszMo esz te celowo wykona skok (s u y do tego spacja)

Aby uzyska najlepszy obraz wiata kliknij dwukrotnie spacj Ujrzysz wtedy wiatz lotu ptaka W tym trybie wci ni cie spacji pozwala wznie si wy ej a lewy kla-wisz Shift s u y do obni ania pozycji Ponowne dwukrotne klikni cie spacji umo -liwia powroacutet na ziemi W tej wersji Minecrafta nie ma y ani zagro e dlategomo esz bezpiecznie skaka z dowolnej wysoko ci

Tworzenie i niszczenie obiektoacutewJe li chcesz zniszczy blok wska go mysz a nast pnie kliknij i przytrzymaj lewyprzycisk myszy Niektoacutere bloki s atwiejsze do usuni cia ni inne Aby zniszczyobiekt musisz by odpowiednio blisko Dlatego je li przy proacutebie usuni cia blokunie widzisz jak si rozpada sta bli ej niego

Panel w dolnej cz ci okna przedstawia bloki ktoacutere mo esz umie ci w wiecie(zobacz rysunek 71) Wybiera bloki mo na za pomoc koacute ka przewijania myszylub klawiszy z cyframi od 1 do 8 (blokowi pierwszemu od lewej odpowiada cyfra1 itd) Wci nij E aby otworzy pe n list materia oacutew Do poruszania si po niejs u klawisze steruj ce ruchem (W A S D) Je li chcesz wybra dany blok wci-nij klawisz Enter lub kliknij go mysz

Aby umie ci blok w danym miejscu kliknij docelow lokalizacj prawym przyci-skiem myszy Blok mo esz umie ci na innym tylko wtedy gdy widzisz goacutern cztego ostatniego Dlatego przy tworzeniu wysokich budowli czasem trzeba spojrzena wiat z lotu ptaka

WSKAZOacuteWKAMo esz budowa wie e i jednocze nie wspina si po nich W tym celu nale y spogl daw doacute i jednocze nie podskakiwa oraz dodawa bloki

Cho budowanie obiektoacutew za pomoc Pythona jest znacznie atwiejsze zach camdo zapoznania si z tym jak gracze czuj si w wiecie Minecrafta Warto zw asz-cza poeksperymentowa z interakcj mi dzy blokami Bloki kamienne potrafiutrzyma si bez bezpo redniego podparcia w powietrzu natomiast bloki z piaskuspadaj na powierzchni Nie mo na sadzi kaktusoacutew na trawie mo na jednak

Kup książkę Poleć książkę

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 11: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

156 RASPBERRY PI NAJLEPSZE PROJEKTY

umie ci je na piasku Je li usuniesz blok na brzegu jeziora oproacute nion przestrzezape ni woda W grze nie mo na umieszcza roacutede wody ani lawy cho mo nadoda je programowo za pomoc Pythona Woda i lawa sp ywaj kaskadami w doacutei zape niaj du e obszary Gdy te ywio y zetkn si ze sob woda sch adza lawi zamienia j w kamie

Przygotowania do u ycia PythonaJedn z zaskakuj cych cech Minecrafta jest to e gra przejmuje kontrol nad mysz Dlatego trzeba wcisn klawisz Tab aby wroacuteci do u ywania innych programoacutewJe li poacute niej chcesz ponownie zacz u ywa myszy w Minecrafcie kliknij okno gryWkroacutetce przyzwyczaisz si do wciskania klawisza Tab przed rozpocz ciem pro-gramowania Teraz wci nij ten klawisz aby wyj z Minecrafta i przenie kursorna pulpit

Do tworzenia programoacutew zwi zanych z Minecraftem pos u y rodowisko IDLEKliknij dwukrotnie jego ikon na pulpicie aby je uruchomi Mo liwe e najpierwb dziesz musia klikn goacutern kraw d okna Minecrafta i przeci gn je eby zo-baczy potrzebn ikon

Jedn z pierwszych rzeczy jakie zauwa ysz jest to e Minecraft znajduje si nadinnymi oknami dlatego rodowisko IDLE mo e by niewidoczne Niezb dna jestwi c odpowiednia reorganizacja pulpitu Aby przenie okno przeci gnij je za pasektytu u Zmienianie wielko ci okien odbywa si w wyniku przeci gania kraw dzii rogoacutew Zach cam aby tak uporz dkowa okna aby wszystkie by y jednocze niewidoczne Na monitorze o standardowych wymiarach jakiego u ywam umieszczamMinecrafta w lewym goacuternym rogu ma e okno z pow ok Pythona w prawym goacuternymnaro niku a okno z kodem programu w dolnej cz ci ekranu Nie nale y zmieniawielko ci okna Minecrafta W wersji z ktoacuterej korzystam gra przestaje wtedy reagowana ruchy mysz Okno programu LXTerminal mo esz zignorowa (ale go nie zamykaj)

U ywanie modu u MinecraftaTeraz mo esz napisa swoacutej pierwszy program w Pythonie powi zany ze wiatemMinecrafta Program ten b dzie wysy a komunikaty do dost pnego w grze czata

W pow oce Pythona otwoacuterz menu File i wybierz opcj New aby otworzy noweokno edytora Wpisz w nim poni szy kod a nast pnie zapisz plik w katalogu pi zapomoc menu File i wci nij klawisz F5 aby uruchomi nowy program Do dzia a-nia wymaga on aby uruchomiona by a sesja gry w Minecrafcie

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()mcpostToChat(Witamy w labiryntach Minecrafta)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 12: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 157

Pierwszy wiersz importuje modu y sys i random Modu random b dzie poacute niej potrzebnydo budowania losowych labiryntoacutew Modu sys jest u ywany od razu do poinformo-wania rodowiska IDLE gdzie znajduje si modu Pythona zwi zany z Minecraftem(pozwala on na przekazywanie instrukcji wykonywanych w Minecrafcie) Po wska-zaniu rodowisku IDLE lokalizacji tego modu u nale y go zaimportowa

W Pythonie do przesy ania instrukcji do Minecrafta s u y polecenie minecraftMinecraftcreate() po ktoacuterym nale y poda potrzebn instrukcj Na przyk ad abywy wietli powitanie w oknie czata zastosuj poni szy kod

minecraftMinecraftcreate()postToChat(Witamy w labiryntach Minecrafta)

Przy d u szych instrukcjach taki kod jest nieczytelny dlatego w przedstawionymprogramie utworzy em zmienn mc ktoacuter mo na stosowa jako skroacutet poleceniaminecraftMinecraftcreate() Dzi ki temu mo na przesy a komunikaty za po-moc kroacutetszych wierszy kodu tak jak w przyk adowym programie

WSKAZOacuteWKAJe li kod nie dzia a zwroacute uwag na wielko znakoacutew W Pythonie ma ona znaczenie dlategomusisz stosowa ma e i wielkie litery dok adnie w taki sposoacuteb jak w przyk adowym kodzieZwroacute uwag na notacj wielb dzi w nazwie postToChat i wielk liter M w poleceniuminecraftMinecraftcreate()

Wspoacute rz dne w MinecrafcieJak atwo si domy li ka dy punkt w wiecie Minecrafta ma wspoacute rz dne Do okre-lenia pozycji punktu potrzebne s wspoacute rz dne w trzech wymiarach

O x Jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do 1277

O y Jest ustawiona pionowo i okre la wysoko Mo esz wznie si a na wy-soko 500 jednostek jednak ju przy wysoko ci 70 ziemia nie jest widocznadlatego dalsze wznoszenie si nie ma sensu Poziom morza to 0 Mo esz roz-bija bloki aby dr y tunele pod wod Mnie uda o si zej do poziomu ndash70jednostek zanim wypad em ze wiata i zgin em Jest to jedyny mo liwy spo-soacuteb zabicia postaci w Minecrafcie na Raspberry Pi jaki uda o mi si znale

O z Tak e jest roacutewnoleg a do powierzchni i przyjmuje warto ci od ndash1277 do1277

Celowo poda em wspoacute rz dne w tej w a nie kolejno ci poniewa tak s podawanew Minecrafcie Je li mdash podobnie jak ja mdash cz sto u ywasz wspoacute rz dnych x i y dookre lania pozycji w wiecie dwuwymiarowym (na przyk ad punktoacutew na ekranie)b dziesz musia przyzwyczai si do tego e y reprezentuje wysoko W tym roz-dziale zwykle u ywam wspoacute rz dnych x i z do okre lania pozycji cian (zmienia siona w zale no ci od ciany) a wspoacute rz dnej y mdash do opisywania jej wysoko ci (jestona niezale na od lokalizacji ciany)

Kup książkę Poleć książkę

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 13: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

158 RASPBERRY PI NAJLEPSZE PROJEKTY

W trakcie poruszania si po planszy w lewym goacuternym rogu okna Minecrafta zmie-niaj si wspoacute rz dne gracza Je li sproacutebujesz wyj poza wiat gry natrafisz naniewidzialn cian ktoacuterej nie da si przebi mdash podobnie jak w filmie TrumanShow gdzie jednak bohater znalaz drzwi

Zmienianie pozycji graczaZa pomoc poni szego polecenia mo na przenie posta w dowolne miejsce w wie-cie Minecrafta

mcplayersetTilePos(x y z)

Aby na przyk ad zrzuci posta z nieba w rodek wiata u yj nast puj cego wy-wo ania

mcplayersetTilePos(0 100 0)

WSKAZOacuteWKA Nie musisz umieszcza tego polecenia w aplikacji i uruchamia jej Je li ju uruchomi e pro-gram w celu w czenia modu u Minecrafta mo esz u ywa pow oki Pythona do wprowa-dzania instrukcji s u cych do przenoszenia postaci i dodawania blokoacutew

Je li nie jest w czony tryb latania posta spadnie z nieba w rodku wiata Je elitryb latania jest aktywny kliknij okno Minecrafta i dwukrotnie wci nij spacj abywy czy ten tryb i rozpocz opadanie

Posta mo na umie ci w dowolnym miejscu wiata gry Czasem oznacza to e po-sta pojawi si w rodku goacutery lub innej struktury w ktoacuterej ruch jest niemo liwyW takiej sytuacji zmie pozycj gracza za pomoc kodu Dobrym rozwi zaniem jestzwykle umieszczenie postaci na du ej wysoko ci poniewa mo na z niej spa nanajwy ej po o ony punkt

Dodawanie blokoacutewAby doda blok do wiata zastosuj poni sze polecenie

mcsetBlock(x y z blockTypeId)

Parametr blockTypeId to liczba reprezentuj ca materia z jakiego zbudowany jestdodawany blok Pe n list materia oacutew znajdziesz na stronie httpwwwminecraft

wikinetwikiData_values_(Pocket_Edition) Wa ne s liczby z kolumny Dec z ta-beli z tej strony poniewa potrzebujesz liczby dziesi tnej a nie szesnastkowejPoprawne s warto ci z przedzia u od 0 do 108 a tak e kilka wi kszych liczbW tabeli 71 opisuj wybrane materia y ktoacutere prawdopodobnie oka si najbar-dziej przydatne w tym projekcie oraz w trakcie wykonywania eksperymentoacutew

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 14: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 159

Tabela 71 Materia y z gry Minecraft Pi Edition

blockTypeId Typ bloku

0 Powietrze

1 Kamie

2 Trawa

3 B oto

5 Deska

8 Woda

10 Lawa

12 Piasek

20 Szklana ceg a

24 Piaskowiec

41 Z ota ceg a

45 Ceg a

47 Poacute ka na ksi ki

53 Drewniane schody

57 Diamentowy blok

64 Drewniane drzwi

81 Kaktus

WSKAZOacuteWKAGdy u ywasz blokoacutew wody lub lawy mo esz wywo a powoacuted Dlatego na potrzeby ekspe-rymentoacutew utwoacuterz nowy wiat

Dost pne jest te inne polecenie ktoacutere pozwala tworzy du e prostopad o cianyz blokoacutew okre lonego typu Aby zastosowa to polecenie podaj wspoacute rz dne dwoacutechprzeciwleg ych naro nikoacutew oraz materia z ktoacuterego bry a ma by zbudowana

mcsetBlocks(x1 y1 z1 x2 y2 z2 blockTypeId)

Aby szybko zbudowa ceglany schron utwoacuterz du y prostopad o cian z ceg y a na-st pnie umie w nim prostopad o cian z powietrza Powietrze zast puje dowolneinne bloki co powoduje ich usuni cie ze wiata Oto przyk ad

mcsetBlocks(0 0 0 10 5 7 45) Ceg amcsetBlocks(1 0 1 9 5 6 0) Powietrze

Ten kod w punkcie o wspoacute rz dnych (0 0 0) tworzy schron o powierzchni 10 times 7blokoacutew i wysoko ci 5 blokoacutew ciany maj grubo jednego bloku poniewa obszar odpierwszego do dziewi tego bloku na osi x od pierwszego do szoacutestego bloku na osi z i odzerowego do pi tego bloku na osi y s wype niane powietrzem Po wszystkich stro-nach pozostaje wi c jedna ciana o grubo ci jednego bloku a goacutera budowli jest odkryta

Kup książkę Poleć książkę

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 15: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

160 RASPBERRY PI NAJLEPSZE PROJEKTY

WSKAZOacuteWKA Pami taj e symbol reprezentuje komentarz dla programisty Komputer ignoruje zawartowiersza znajduj c si po tym symbolu

Cho przy okre laniu pozycji postaci mo na pos ugiwa si wspoacute rz dnymi z cz -ciami u amkowymi (na przyk ad 17) to przy dodawaniu blokoacutew wspoacute rz dne s

zaokr glane do najbli szej liczby ca kowitej

Uniemo liwianie graczom modyfikowania wiataWiem e nigdy by nie oszukiwa w grze jednak szukanie drogi w labiryncie w ktoacute-rym mo na przypadkowo wyr ba sobie przej cie nie by oby ciekawe prawda Abyuniemo liwi graczom usuwanie lub dodawanie blokoacutew w wiecie zastosuj nast -puj cy wiersz

mcsetting(worldimmutableTrue)

S owo immutable jest cz sto stosowane w kontek cie programowania i oznaczabdquoniezmiennyrdquo

Ustawianie parametroacutew labiryntuSkoro wiesz ju jak dodawa bloki i u ywa blokoacutew z powietrzem do oproacute nianiaprzestrzeni mo esz przyst pi do pisania programu generuj cego labirynty W tymprogramie wykorzystasz zestaw sta ych przeznaczonych na wa ne informacje o labi-ryncie Sta e to rodzaj zmiennych ktoacuterych warto ci zdecydowa e si nie zmieniaw trakcie dzia ania programu Nazwy sta ych zwykle zapisuje si wielkimi literamiaby zasygnalizowa ich przeznaczenie dla osoacuteb czytaj cych kod programu i u atwisamemu sobie pami tanie o tym e program nie powinien zmienia warto ci tychelementoacutew Zast pienie w programie liczb sta ymi pozwala w przysz o ci atwiejwprowadza zmiany a tak e znacznie poprawia czytelno kodu i pomaga zro-zumie co reprezentuj poszczegoacutelne warto ci

WSKAZOacuteWKA W nazwach zmiennych wielko liter ma znaczenie dlatego dla Pythona SIZE i size to dwieroacute ne zmienne (jednak stosowanie obu tych nazw w jednym programie nie jest najlepszympomys em)

Program najpierw ustawia sta e

SIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 KamieGROUND_MATERIAL = 2 TrawaCEILING = False

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 16: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 161

Budowanie labiryntu zaczniesz od siatki cian z jednoblokowymi przestrzeniami(komoacuterkami) mi dzy nimi Efekt wygl dem przypomina gofry (rysunek 72) Ka dakomoacuterka ma pocz tkowo cztery ciany a program usuwa je dzi ki czemu powstajcie ki mi dzy komoacuterkami a ostatecznie mdash labirynt Tu jest on kwadratowy a pa-

rametr SIZE okre la jego wielko w komoacuterkach Labirynt z parametrem SIZE roacutew-nym 10 ma po 10 komoacuterek w wymiarach x i z jednak w wiecie Minecrafta zajmujedwukrotnie wi cej miejsca (20 na 20 blokoacutew) poniewa mi dzy komoacuterkami znaj-duj si jednoblokowe ciany Stanie si to zrozumia e gdy zaczniesz budowa la-birynt Proacutebowa em tworzy labirynty o parametrze SIZE roacutewnym 40 jednak ich bu-dowanie zajmuje wiele czasu a eksploracja mdash ca e wieki Na razie wystarczy warto10 Je li w wiecie nie ma wystarczaj co du o miejsca na labirynt program zako czyprac i zg osi b d

Rysunek 72Pocz tkowasiatka

Parametr HEIGHT okre la w blokach wysoko cian labiryntu Wybra em warto 2poniewa przy warto ci 1 mo na przeskakiwa ciany labiryntu (gracz automatycz-nie wchodzi na bloki o tej wysoko ci) Wy sze warto ci powoduj e nie mo nazobaczy widocznych w oddali goacuter ktoacutere s dla u ytkownika cenn wskazoacutewkwizualn

Kup książkę Poleć książkę

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 17: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

162 RASPBERRY PI NAJLEPSZE PROJEKTY

Sta e MAZE_X GROUND i MAZE_Z okre laj wspoacute rz dne pocz tku labiryntu Materia z ktoacuterego zbudowany jest labirynt (MAZE_MATERIAL) to kamie (1) a materia em pod o-a (GROUND_MATERIAL) jest trawa (2) Dost pna jest te opcja ktoacutera pozwala doda sufit

co uniemo liwia graczowi wzniesienie si ponad labirynt Na razie jednak opcja ta jestwy czona co pozwala swobodnie eksplorowa labirynt w trakcie jego tworzenia

WSKAZOacuteWKA Doskonale wygl da labirynt z poacute ek z ksi kami (MAZE_MATERIAL=47)

Przygotowywanie pod o aJedn z pierwszych rzeczy jakie trzeba zrobi jest upewnienie si e labiryntznajduje si na roacutewnym sta ym l dzie Poniewa wiat Minecrafta jest generowanydynamicznie mo e si okaza e stawiasz budowl w rodku goacutery lub na morzu

Oproacutecz powierzchni przeznaczonej na labirynt nale y oczy ci obszar 10 blokoacutewwokoacute budowli aby gracz moacuteg wygodnie si do niej zbli y i obej j dooko aNajpierw oproacute nij obszar przez wype nienie go blokami powietrza Spowoduje tousuni cie wszystkich innych obiektoacutew z danego miejsca

Labirynt zajmuje mierzony w blokach obszar od MAZE_X do MAZE_X+(SIZE2) i odMAZE_Z do MAZE_Z+(SIZE2) Liczba blokoacutew jest dwa razy wi ksza od liczby komoacuterek(SIZE) poniewa na prawo i poni ej ka dej komoacuterki znajduje si ciana rodkowypunkt labiryntu w wiecie Minecrafta ma wspoacute rz dne MAZE_X+SIZE MAZE_Z+SIZE

Trzeba te oproacute ni obszar 10 blokoacutew w ka dym kierunku od labiryntu Poni szykod usuwa wszystkie bloki na wysoko 150 blokoacutew od poziomu labiryntu Dzi kitemu nie istnieje ryzyko e nieusuni te bloki goacutery spadn z nieba do labiryntui b d le e w korytarzach

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0)

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Zalecam aby doda blok wyznaczaj cy pocz tkowy roacuteg labiryntu (wspoacute rz dneMAZE_X MAZE_Z) Jest to przydatne przy pisaniu i debugowaniu programu poniewapozwala okre li po o enie labiryntu przy obserwowaniu go z lotu ptaka Blokmo na doda za pomoc poni szego kodu

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL)

Umie posta nad rodkiem labiryntu aby moacuteg patrze w doacute i obserwowa jegopowstawanie Je li nie masz w czonego trybu latania spadniesz na cian labi-ryntu jednak zawsze mo esz ponownie uruchomi ten tryb

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 18: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 163

Dodawanie cian labiryntuAby utworzy przypominaj c gofra siatk zastosuj poni szy kod

for line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

P tla for przypisuje do zmiennej line liczby parzyste od 0 do SIZE2 Przed podwo-jeniem warto ci trzeba doda do SIZE liczb 1 poniewa funkcja range nie zwracaostatniej warto ci w sekwencji (na przyk ad wywo anie range(1 10) zwraca licz-by od 1 do 9) Liczba 2 na ko cu wywo ania range oznacza wielko kroku tak wi cp tla w ka dym powtoacuterzeniu przyjmuje kolejne warto ci parzyste W efekcie mi -dzy cianami pozostaj puste miejsca (komoacuterki) Przy ka dym powtoacuterzeniu p tliu ywany jest prostopad o cian do narysowania dwoacutech cian ktoacutere biegn przezca szeroko labiryntu wzd u osi x i z To e w miejscach przeci cia si cianblok jest dodawany dwukrotnie nie ma znaczenia ciana jest budowana od pozio-mu GROUND+1 dlatego gdy usuniesz ciany w celu utworzenia cie ek nadal b dziewidoczna trawa

WSKAZOacuteWKANie zapomnij o dwukropku po instrukcji for Ponadto dwa nast pne wiersze musz by wy-roacute nione wci ciem (jest to dla Pythona informacja e nale do p tli)

Powiniene uzyska siatk wygl daj c tak jak na rysunku 73

Rysunek 73Siatkaw Minecrafcie

Kup książkę Poleć książkę

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 19: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

164 RASPBERRY PI NAJLEPSZE PROJEKTY

Algorytm generowania labiryntuPrzed rozpocz ciem analizowania kodu ktoacutery przekszta ca gofra w labirynt wyja niamjak ten kod dzia a Celem jest utworzenie labiryntu doskona ego (w sensie technicznymmdash nie s to moje przechwa ki) Oznacza to e w labiryncie ma nie by adnych p tli aniniedost pnych miejsc Mi dzy dowolnymi dwoma punktami istnieje tylko jedna cie ka

Program dzia a w nast puj cy sposoacuteb

1 Punktem wyj cia jest utworzony gofr w ktoacuterym ka da komoacuterka jest otoczonaz czterech stron cianami

2 Nale y losowo wybra pocz tkow komoacuterk labiryntu

3 Trzeba zbada wszystkie s siednie komoacuterki i utworzy list tych ktoacutere majwszystkie cztery ciany S to komoacuterki ktoacutere nie zosta y jeszcze odwiedzone

4 Je li istniej nieodwiedzone s siednie komoacuterki nale y losowo wybra jednz nich usun cian mi dzy bie c i wybran komoacuterk a nast pnie przejdo tej ostatniej W tym momencie to ona staje si bie c komoacuterk

5 Je eli wszystkie komoacuterki s siaduj ce z bie c zosta y ju odwiedzone nale ycofn si o jedn komoacuterk i ustawi j jako bie c

6 Trzeba powtarza kroki od 3 do 5 do momentu odwiedzenia wszystkich komoacuterek

Konfigurowanie zmiennych i listAby zaimplementowa ten algorytm nale y zastosowa nast puj ce zmienne

Zmienna numberOfCells Przechowuje czn liczb komoacuterek labiryntu (czyliSIZESIZE)

Zmienna numberOfVisitedCells Przechowuje liczb komoacuterek odwiedzonychdo tej pory Je li ta liczba jest identyczna z warto ci zmiennej numberOfCellsoznacza to e algorytm odwiedzi ka d komoacuterk i usun jedn z jej cianMo na wi c dotrze do ka dej komoacuterki i labirynt jest uko czony

Zmienna xposition Zapami tuje pozycj na wymiarze bdquoxrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje losow warto z przedzia u od 1 do SIZE

Zmienna zposition Zapami tuje pozycj na wymiarze bdquozrdquo w czasie poruszaniasi po labiryncie i generowania go Pozycja jest mierzona w komoacuterkach i po-cz tkowo przyjmuje warto losow

Lista cellsVisitedList[] Przechowuje cie k dzi ki czemu program mo esi cofa Przy tworzeniu listy nale y zapisa w niej pocz tkow pozycj zapomoc metody append()

Zmienne playerx i playerz S u do zapami tywania pocz tkowej pozycjidzi ki czemu mo na umie ci w niej gracza po zbudowaniu labiryntu

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 20: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 165

W kodzie algorytmoacutew tego rodzaju (jest to algorytm generowania labiryntoacutewmetod DSF) cz sto potrzebna jest lista lub podobna struktura danych do przecho-wywania lokalizacji cian Tutaj jest to niepotrzebne poniewa w Minecrafcie ist-niej widoczne ciany Je li chcesz mo esz zapisa labirynt w wiecie gry

Poni szy kod ustawia pocz tkowe warto ci zmiennych

numberOfCells = SIZESIZEnumberOfVisitedCells = 1cellsVisitedList = []xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositioncellsVisitedListappend((xposition zposition))

Tworzenie funkcjiW programie potrzebnych jest kilka podstawowych funkcji Oto one

Funkcje realx(x) i realz(z) Przekszta caj wspoacute rz dne labiryntu (podawanew komoacuterkach) na wspoacute rz dne wiata Minecrafta (mierzone w blokach i prze-suni te wzgl dem pocz tkowej pozycji labiryntu)

Funkcje showMaker(xz) i hideMaker(xz) Dodaj i ukrywaj z oty blok poka-zuj cy do ktoacuterej komoacuterki program doszed w trakcie budowania labiryntuCiekawe jest obserwowanie zmian tych komoacuterek z lotu ptaka a ponadto funk-cje te s przydatne w trakcie tworzenia i debugowania programu

Funkcja demolish(realxrealz) S u y do usuwania cian w labiryncie Jakoparametry przyjmuje rzeczywiste wspoacute rz dne ze wiata Minecrafta

Funkcja testAllWalls(cellx cellz) Sprawdza czy wszystkie cztery ciany ko-moacuterki pozosta y nietkni te Je li tak jest zwraca warto True (w przeciwnymrazie zwraca False) W tej funkcji u ywane jest polecenie mcgetBlock(x y z)ktoacutere okre la typ bloku (blockTypeId) stoj cego w danym miejscu W standar-dowy sposoacuteb (za pomoc dwoacutech znakoacutew roacutewno ci) nale y sprawdzi czy tentyp jest taki sam jak typ materia u cian (MAZE_MATERIAL) Je li tak jest oznaczato e w danym miejscu stoi ciana

Dodaj poni sze definicje funkcji w pocz tkowej cz ci programu po instrukcji usta-wiaj cej modu Minecrafta

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

Kup książkę Poleć książkę

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 21: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

166 RASPBERRY PI NAJLEPSZE PROJEKTY

def hideMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

WSKAZOacuteWKA Je li wyst pi b d sprawd czy nie brakuje dwukropkoacutew po instrukcjach def i if

Tworzenie g oacutewnej p tliAlgorytm tworz cy labirynt dzia a do momentu odwiedzenia wszystkich komoacuterekDlatego rozpoczyna si od poni szej instrukcji

while numberOfVisitedCells lt numberOfCells

Trzeba sprawdzi czy ciany w komoacuterkach s siaduj cych z bie c pozostajnietkni te W tym celu nale y zbada po kolei ka dy kierunek za pomoc funkcjitestAllWalls(x z) Po znalezieniu komoacuterki z wszystkimi cianami nale y za po-moc metody append() doda jej kierunek do listy possibleDirections[] Tak wy-gl da implementacja trzeciego kroku algorytmu (pami taj e ca y poni szy kod jestwci ty wzgl dem nadrz dnej instrukcji while)

possibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

Okre lenia up down left i right (czyli goacutera doacute lewa prawa) s w troacutejwymiarowymwiecie do nieprecyzyjne Zastosowa em je poniewa s atwe do zrozumienia

Je li w trakcie generowania labiryntu spojrzysz na niego z lotu ptaka i ustawisz sitak aby pocz tkowy naro nik labiryntu (o wspoacute rz dnych MAZE_X MAZE_Z) znajdo-wa si w lewym goacuternym rogu wymienione wy ej okre lenia b d wskazywa yw a ciwe kierunki

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 22: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 167

Mo e zauwa y e e kod nie sprawdza czy komoacuterki znajduj si na kraw dziachlabiryntu Co si stanie przy sprawdzaniu komoacuterek ktoacutere wychodz poza lew lubdoln kraw d labiryntu Nie stanowi to problemu Kod programu automatyczniezatrzymuje si przed kraw dziami Poniewa sprawdzane bdquokomoacuterkirdquo poza kraw -dzi nie maj wszystkich czterech cian (ich jedyn cian jest bok labiryntu) takwi c algorytm nigdy do nich nie przechodzi

W kroku czwartym algorytm losowo wybiera jedn z nieodwiedzonych s siaduj -cych komoacuterek Usuwa cian mi dzy bie c i wybran komoacuterk po czym prze-chodzi do tej ostatniej Aby ustali czy istnieje cho jeden nieodwiedzony s siadnale y sprawdzi d ugo listy possibleDirections Je li jest ona roacute na od 0 (=0)nale y wykona odpowiednie operacje Ca y omawiany fragment powinien by wy-roacute niony wci ciem wzgl dem nadrz dnej p tli while Je li masz trudno ci z usta-leniem w a ciwego poziomu wci cia zapoznaj si z pe nym kodem z listingu 71zamieszczonego w ko cowej cz ci rozdzia u

Przed zmian pozycji nale y ukry z ot ceg wskazuj c pozycj w labiryncie

hideMaker(xposition zposition)if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

Po przej ciu do nowej komoacuterki trzeba zwi kszy liczb odwiedzonych komoacutereko jeden i doda now komoacuterk do listy przechowuj cej cie k Jest to tak e dobrymoment na wy wietlenie w komoacuterce z otego bloku pokazuj cego proces budowanialabiryntu

numberOfVisitedCells += 1cellsVisitedListappend((xposition zposition))showMaker(xposition zposition)

Warto wyja ni sposoacuteb przechowywania listy odwiedzonych komoacuterek Zmiennexposition i zposition znajduj si w nawiasach oznaczaj cych krotk Krotka tosekwencja danych Przypomina ona nieco list jednak roacute ni si tym e nie umo -liwia modyfikowania warto ci (jest niezmienna) Tak wi c cellsVisitedList to lista

Kup książkę Poleć książkę

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 23: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

168 RASPBERRY PI NAJLEPSZE PROJEKTY

z krotkami ktoacutere zawieraj pary wspoacute rz dnych x i z Do sprawdzenia zawarto cilisty mo na wykorzysta pow ok Pythona Oto przyk ad wzi ty z jednego z prze-biegoacutew programu Wida tu cie k przej cia przez labirynt

gtgtgt print cellsVisitedList[(6 6) (6 7) (6 8) (5 8) (4 8) (3 8) (3 7)]

Je li dana komoacuterka nie ma nieodwiedzonych s siadoacutew w pi tym kroku algorytmunale y wroacuteci do wcze niejszej pozycji na cie ce Wymaga to pobrania ostatniegoelementu z listy ze cie k Zadanie to mo na wykona za pomoc metody pop()przeznaczonej dla list Metoda ta pobiera ostatni element z listy i usuwa go z niejW programie element ten jest przypisywany do zmiennej retrace ktoacutera zapisujekrotk ze wspoacute rz dnymi x i z pozycji w labiryncie Do wskazywania poszczegoacutel-nych warto ci krotki (podobnie jak w przypadku listy) s u y indeks Indeksowanierozpoczyna si od zera dlatego wywo anie retrace[0] zwraca wspoacute rz dn x po-przedniej komoacuterki a wywo anie retrace[1] zwraca wspoacute rz dn z Oto potrzebnykod (obejmuje te wiersz wy wietlaj cy z oty blok w poprzedniej komoacuterce)

else Ten kod nale y wywo a je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

Warto zauwa y e ta instrukcja else powinna by wyroacutewnana wzgl dem powi -zanej instrukcji if (sprawdzaj cej czy mo na przej dalej w jednym z kierunkoacutew)

Krok szoacutesty algorytmu zosta ju zaimplementowany poniewa p tla while po od-wiedzeniu ka dej komoacuterki powtarza wyroacute niony wci ciem kod

Dodawanie sufituOsobi cie uwa am e wi cej zabawy daje rezygnacja z sufitu Dzi ki temu mo nasi wznie podziwia labirynt i spa w jego dowolne miejsce Je li jednak chceszzbudowa opart na labiryncie gr i uniemo liwi u ytkownikom oszukiwanie dodajsufit za pomoc poni szego kodu Nale y te zmieni warto zmiennej CEILINGw pocz tkowej cz ci programu na True Tu sufit budowany jest ze szklanych blokoacutewdzi ki czemu w korytarzach nie jest ciemno

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

Okre lanie pozycji graczaW ostatnim kroku nale y umie ci gracza w losowym miejscu od ktoacuterego programrozpocz generowanie labiryntu Mo esz umie ci posta w dowolnym miejscujednak to jest roacutewnie dobre jak ka de inne i pozwala wykorzysta wygenerowanewcze niej losowe wspoacute rz dne

mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 24: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 169

Teraz mo esz rozpocz gr Rysunek 74 przedstawia labirynt od rodka

Rysunek 74Znajdowaniedrogiw labiryncie

Ostateczna wersja koduListing 71 przedstawia gotowy i kompletny kod

Listing 71 Generowanie labiryntoacutew do gry Minecraft

usrbinenv python

Minecraft Maze MakerAutor Sean McManusZ ksi ki Raspberry Pi Najlepsze projekty

import sys randomsyspathappend(mcpiapipythonmcpi)import minecraftmc = minecraftMinecraftcreate()

mcpostToChat(Witamy w generatorze labiryntoacutew do Minecrafta)

def realx(x) return MAZE_X+(x2)-1

def realz(z) return MAZE_Z+(z2)-1

def showMaker(x z) mcsetBlock(realx(x) GROUND+1 realz(z) 41) 41=z oto

def hideMaker(x z)

Kup książkę Poleć książkę

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 25: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

170 RASPBERRY PI NAJLEPSZE PROJEKTY

mcsetBlock(realx(x) GROUND+1 realz(z) 0)

def demolish(realx realz) mcsetBlocks(realx GROUND+1 realz realx HEIGHT+GROUND realz 0)

def testAllWalls(cellx cellz) if mcgetBlock(realx(cellx)+1 GROUND+1 realz(cellz))==MAZE_MATERIAL

and mcgetBlock(realx(cellx)-1 GROUND+1 realz(cellz))==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)+1)==MAZE_MATERIAL and mcgetBlock(realx(cellx) GROUND+1 realz(cellz)-1)==MAZE_MATERIAL

return True else return False

mcsetting(world_immutable True)

Konfigurowanie labiryntuSIZE = 10HEIGHT = 2MAZE_X = 0GROUND = 0MAZE_Z = 0MAZE_MATERIAL = 1 1=kamieGROUND_MATERIAL = 2 2=trawaCEILING = False

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND+150 MAZE_Z+(SIZE2)+10 0) powietrze

mcsetBlocks(MAZE_X-10 GROUND MAZE_Z-10 MAZE_X+(SIZE2)+10 GROUND MAZE_Z+(SIZE2)+10 GROUND_MATERIAL)

Przygotowywanie pod o a

mcsetBlock(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_MATERIAL) Znacznik pocz tku labiryntu

mcplayersetTilePos(MAZE_X+SIZE GROUND+25 MAZE_Z+SIZE) Przenoszenie gracza nad rodek labiryntu

mcpostToChat(Trwa budowanie labiryntu)

Tworzenie siatki ze cianamifor line in range(0 (SIZE+1)2 2) mcsetBlocks(MAZE_X+line GROUND+1 MAZE_Z MAZE_X+line GROUND+HEIGHT

MAZE_Z+(SIZE2) MAZE_MATERIAL) mcsetBlocks(MAZE_X GROUND+1 MAZE_Z+line MAZE_X+(SIZE2) GROUND+HEIGHT

MAZE_Z+line MAZE_MATERIAL)

Konfigurowanie zmiennych u ywanych przy tworzeniu labiryntunumberOfCells = SIZESIZEnumberOfVisitedCells = 1 Jeden odpowiada pocz tkowej komoacutercecellsVisitedList = []

xposition = randomrandint(1 SIZE)zposition = randomrandint(1 SIZE)playerx = xpositionplayerz = zpositionshowMaker(xposition zposition)

Kup książkę Poleć książkę

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 26: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

ROZDZIA 7 GENEROWANIE LABIRYNTOacuteW W MINECRAFCIE 171

cellsVisitedListappend((xposition zposition))

while numberOfVisitedCells lt numberOfCellspossibleDirections = []

if testAllWalls(xposition-1 zposition) possibleDirectionsappend(left)

if testAllWalls(xposition+1 zposition) possibleDirectionsappend(right)

if testAllWalls(xposition zposition-1) possibleDirectionsappend(up)

if testAllWalls(xposition zposition+1) possibleDirectionsappend(down)

hideMaker(xposition zposition)

if len(possibleDirections)=0 directionChosen=randomchoice(possibleDirections)

Usuwanie ciany w wybranym kierunku if directionChosen==left demolish(realx(xposition)-1 realz(zposition)) xposition -= 1

if directionChosen==right demolish(realx(xposition)+1 realz(zposition)) xposition += 1

if directionChosen==up demolish(realx(xposition) realz(zposition)-1) zposition -= 1

if directionChosen==down demolish(realx(xposition) realz(zposition)+1) zposition += 1

numberOfVisitedCells += 1 cellsVisitedListappend((xposition zposition)) showMaker(xposition zposition)

else Ten kod nale y wykona je li nie istniej nieodwiedzone s siednie komoacuterki retrace = cellsVisitedListpop() xposition = retrace[0] zposition = retrace[1] showMaker(xposition zposition)

if CEILING == True mcsetBlocks(MAZE_X GROUND+HEIGHT+1 MAZE_Z MAZE_X+(SIZE2)

GROUND+HEIGHT+1 MAZE_Z+(SIZE2) 20)

mcpostToChat(Labirynt jest gotowy)mcpostToChat(Udanego eksplorowania)mcplayersetTilePos(realx(playerx) GROUND+1 realz(playerz))

Kup książkę Poleć książkę

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 27: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

172 RASPBERRY PI NAJLEPSZE PROJEKTY

Twoja kolejPo zbudowaniu labiryntu z ota ceg a pozostaje widoczna dlatego mo esz sproacutebowaj znale Mo esz te doda inne obiekty do znalezienia w labiryncie i okre li czasna dotarcie do nich Polecenie mcplayergetTilePos() sprawdza w ktoacuterym miejscuwiata Minecrafta znajduje si gracz i zwraca wynik w postaci wspoacute rz dnych x y i z

Kod do tworzenia zegaroacutew znajdziesz w rozdziale 9 bdquoSprawd swoacutej czas reakcjirdquo

Mo esz doda wej cie i wyj cie w losowych punktach bocznej ciany labiryntua nast pnie jako cel postawi przej cie z wej cia do wyj cia Aby u atwi przecho-dzenie du ych labiryntoacutew dodaj punkty orientacyjne wykorzystaj roacute ne materia ylub postaw bloki na niektoacuterych cianach Po wygenerowaniu labiryntu mo na usu-n losowe ciany aby utworzy skroacutety Inna mo liwo to zast pienie wybranychcian szklanymi blokami co pozwoli zagl da w inne korytarze A co powiesz na

wielopoziomowy labirynt ze schodami mi dzy poziomami Mo liwo ci s naprawdniesamowite

Kup książkę Poleć książkę

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 28: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

Skorowidz

AAbrams Laurence 82adapter

DVI 33HDMI 33HDMIVGA 33pasywny 33Pi-View 33

adres IP 291 294 295alarm 264 284Alcorn Allan 102algorytm

generowania labiryntoacutewmetod DSF 165

rekurencyjny 80analiza danych Patrz dane

analizaAndroid 24 25aplikacja Patrz programArch 24archiwum tar 231Arduino 361 368

programowanie 372 377381

arkusz kalkulacyjnyCalc 420Excel 420

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

automat sko czony Patrzmaszyna stanowa

automatyzowaniedomu 284 290

BBaer Ralph 102bajt 246barwa Patrz te kolor

addytywna 179subtraktywna 180

baza danych 196bezpiecze stwo 265

atakprzez odtwarzanie 275przez przepe nienie

bufora 265s ownikowy 296

biblioteka Patrz te pakietPygame 84 87 105Twittera 220

bit 246bit banging Patrz

manipulowanie bitamiblitting 84b d

logiczny 62 74sk adni 62

Braben David 16breadboard Patrz p ytka

prototypowabudka dla ptakoacutew 392 422

budowa 397 399oprogramowanie 402

410buforowanie podwoacutejne 246Bushnell Nolan 102

CCarpintero Angel 291Cellan-Jones Rory 16color key Patrz kolor

przezroczysto ciCompu=Prompt 82czcionka 84

o sta ej szeroko ciznakoacutew 88

proporcjonalna 88czujnik 284 300

do ledzeniama ych ssakoacutew 393ptakoacutew 392

DS18B20 296 297Halla 360PIR Patrz czujnik ruchupromieni 393

detektor 394 398emiter 394 398

rotacji 368ruchu 284 286

alarm 288biegun dodatni 288masa 288

szum Patrz szumtemperatury 296

oprogramowanie 297299 300

czytnik RFID 264 273 274275 276

Ddane

analiza 400nadmiarowe 401rejestrowanie 400

Debian 24pakiet 201

detektor szczytowy 258diagram 412 420

przep ywu 74dioda

LED 176 200 206 217227 246 368anoda 181 183 217

317 394czerwona 177 317jasno wiat a 179katoda 317 394napi cie przebicia 177nat enie pr du 177niebieska 177podczerwona 394SFH484-2 IR 394spadek napi cia 177ta ma Patrz ta ma LEDz roacutewnoleg ym

uk adem pinoacutew 317z uk adem

przeciwstawnym317

ze wspoacuteln anod 180ze wspoacuteln katod 180zielona 177 317

LED RGB 176 179 180display memory Patrz

pami uk adugraficznego

dysk twardy 25dziennik

b doacutew 344diagnostyczny 344

dziura 359d wi k 110 122 128 192

196 224 225 242 245cz stotliwo 258kompresja 401mono 128sterowanie wiat em 258sterownik 39

d ojstik 316testowanie 324

Kup książkę Poleć książkę

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 29: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

426 RASPBERRY PI NAJLEPSZE PROJEKTY

Eedytor tekstu

Leafpad 325nano 292

efektd wi kowy 127 128Halla 359

elektron 210 359elektryczno 210

masa Patrz masanapi cie Patrz napi cieopoacuter Patrz opoacuterpr d Patrz pr d

e-mail 300 301 309 343Patrz te pocztaelektronicznaz raportem 306za cznik 304

enkoder obrotowy 334 359absolutny wykorzystuj cy

efekt Halla 359 360AS5040 368 373b d 337dane wyj ciowe 335drganie stykoacutew 335

336 337oprogramowanie 339optyczny 334przyrostowy 335testowanie 341 342wyj cie kwadraturowe

335wzgl dny 360z prze cznikami 334

335z bek 334 337

Excel 420

FFacebook 334 342

przesy anie rysunkoacutew 344Fail2Ban 296Fedora 24figura Lissajous 359FileZilla 294filtr

cz stotliwo graniczna258

dolnoprzepustowy 258goacuternoprzepustowy 258

flat file Patrz plikjednorodny

Flickr 343logowanie 344 345

powi zaniez Facebookiem 345

przesy anie rysunkoacutew343 344

formatavi 294jpg 294ogg 110 122 128png 128wav 128MJPEG 294MP3 401targz 231zip 401

fotodetektor 394fototranzystor 394

emiter 395kolektor 395na podczerwie 394QSW113 395

fundacja Raspberry Pi 16funkcja 50 51

argument 50choice 51definiowanie 53drawBox 245generuj ca liczby losowe

192histogram 422importowanie 51input 52mouseGet 246nazwa 54open 406pakiet Patrz pakietparametr Patrz funkcja

argumentraw_input 52shuffle 71

Ggeneral purpose

inputoutput Patrzz cze GPIO

generator obwiedni 260g o nik 225 227Gmail 302 304gniazdo Patrz z czeGoodin Courtney 82Google Docs Spreadsheets

420gra

koacute ko i krzy yk 62Magnavox Odyssey 102Minecraft 152 154 155

czat 156gracz 158 160 168

instalowanie 152 153labirynt 160 161 163

164 166materia 158uruchamianie 153wspoacute rz dne 157 160

Pac-Man 126ekran 142tryb mocy 126

Pie Man 126 135 137140plansza 131sprite Patrz spritewarstwa 131

Ping 103dla dwoacutech graczy 117dla jednej osoby 111

ping-pong 102punktacja 111Snap 176

d wi ki 192elektronika 179oprogramowanie 192poziom trudno ci 192pude ko 184testowanie 189

grafika 83wspoacute rz dne 105

Hhakowanie 220 222

komputeroacutew 265Hall Edwin 359Halla efekt Patrz efekt

HallaHancock Tony 82harmonograf 358

elektronika 368oprogramowanie 383

has o domy lne 39Higginbotham Willy 102histogram 420

IIDLE Patrz rodowisko

IDLEimage Patrz obrazinformatyka 400instrukcja

def 226git 232if 72import 206ls 406

Kup książkę Poleć książkę

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 30: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

SKOROWIDZ 427

lsmod 202minecraftMinecraftcreate

157pass 72pifacescripts

piface-emulator 205print 50 228startx 39sudo 28 301sudo reboot 202tar 231tar ndashzxvf 153timesleep 149

Integrated DevelopmentEnvironment Patrzrodowisko IDE

interfejsgraficzny 39PiFace Digital 16SPI 360

internet 36rzeczy Patrz IOT

internet of things PatrzIOT

IOT 284

Jjarzmo testowe 66j zyk

C 361C++ 361Python Patrz Python

Kkamera internetowa 290

291 294 392obraz w internecie 295

kartainterfejsowa 200PiFace 176 179

bufor 254dioda LED 246emulator 204 207 208inicjowanie 228konfigurowanie 254przeka nik 245

254 314wej cie 207 208wyj cie 254 256

PiFace Digital 200 204222 227 268 394emulator 395konfiguracja 200

201 202

oprogramowanie 201202

pod czanie 204przeka nik 211tranzystor 212wej cie 211wyj cie 211wyj cie otwartego

kolektora 211 217z cze 209 211

SD 24 25 26tworzenie 26

katalog 406klasa 228 280

metoda Patrz metodaszczelno ci IP 399

klawiaturasterownik 39ze z czem USB 32

klawiszHome 122Page Down 122Page Up 122

klientFTP 294SSH 291 296

klucz 277kod Patrz program

Graya 337kolektor otwarty 212 217

218 288kolor 245 Patrz te barwa

przezroczysto ci 131komentarz 107 202komparator 258kompas elektroniczny 359komponent 199 214

do monta upowierzchniowego180 182

przewlekany 180 181kompresja

bezstratna 401stratna 401zip 401

komunikat 228konsola tekstowa 63kontaktron 285krotka 167 245kurczak twittuj cy 220

Llampka 40Lang Jack 16latencja Patrz opoacute nienieLavrsen Kenneth 291

LeafPad 44LED Patrz dioda LEDLibreOffice 420light emitting diode Patrz

dioda LEDlightweight directory access

protocol Patrz protokoacuteLDAP

Linux 24 25 27 28 39280 361Arch Patrz ArchDebian Patrz Debiandystrybucja 24Fedora Patrz Fedorainstrukcja sudo Patrz

instrukcja sudoopenSUSE Patrz

openSUSERaspbian Wheezy 152Red Hat Patrz Red HatUbuntu Patrz Ubuntuustawienia lokalne 405

Lissajous figura 359lista 50 51 63 67 167

list 65sortowanie 196

Lomas Pete 16lutowanie 215LXTerminal 39

a cuch znakoacutew 49o ysko 367

Mmagistrala SPI 200 202

uprawnienia 204magnes 367

cylindrycznynamagnetyzowanywzd u rednicy 360365

manipulowanie bitami 373masa 210 211maszyna stanowa 412

implementacja 412metoda 228

__init__ 228inicjuj ca 228pfio 228

Microsoft Windows PatrzWindows

miernik pr du bezstykowy359

Kup książkę Poleć książkę

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 31: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

428 RASPBERRY PI NAJLEPSZE PROJEKTY

mikrofon 259monitor 32 96

VGA 33 34Motion 291

demon 293instalowanie 292konfiguracja 293skrypt Pythona 294

Mullins Rob 16Mycroft Alan 16mysz 32 156

Nnadajnik podczerwieni 394napi cie 210notacja wielb dzia 54 157

Oobiekt 228

pygame 244obraz 26 29 38

przesy anie 26obwoacuted

roacutewnoleg y 222szeregowy 221 222

odbiornik astabilny 307odpytywanie 339Ohma prawo Patrz prawo

Ohmaokna otwieranie 242openSUSE 24opoacuter 210opoacute nienie 110Oppenheimer Jess 82oprogramowanie Motion

Patrz MotionOS X 24 27 29oscyloskop 102

Ppakiet

folders2flickr 343 344piface 245pygame 242random 51

pami 25adresowanie 25blok 25 26bufor 246 408obraz Patrz obrazrobocza 83suma kontrolna Patrz

suma kontrolna

uk adu graficznego 83para klucz ndash warto 277pendrive 25p tla 54 412

for 54 55 64niesko czona 56while 54 55 56z licznikiem 55

piksel 83analiza 126

pilot bezprzewodowy 306oprogramowanie 309

plikflickrToken 345archiwizacja 152dziennik b doacutew 344dziennik diagnostyczny

344history 344jednorodny 272otwieranie 406

tryb 408wielko bufora 408

cie ka 406wykonywalny 237

p ytkaprototypowa 214 261stripboard 261uniwersalna Patrz

p ytka prototypowapoczta elektroniczna 291

301 392 Patrz te e-mailpole

elektryczne 359magnetyczne 359

polecenie Patrz instrukcjaport Patrz z czepotencjometr 334prawo Ohma 210pr d 210problemy 40 41procesor 24program

Audacity 110b d Patrz b ddebugowanie 228dzia aj cy w czasie

rzeczywistym 400espeak 224 225LXTerminal 153 Patrz

LXTerminalczenie 414

Modprobe 297Motion Patrz MotionNOOBS 26 152Pendulum Pi 383 388Photoshop Elements 128przerywanie pracy 56

Putty 291sendmailpy 301struktura 51 229testowanie 230 273w tle 293X Server Patrz X Serverzapisywanie 46

programowanie obiektowe228 229 234 278

prompter 92budowa 96

protokoacuteLDAP 280SPI 373SSH 278

przegl darka 291 295Dillo 344Internet Explorer 294Midori 344

przeka nik 211 270dwustanowy Patrz

przeka nik prze cznyNC 316NO 314 316prze czny 270

prze cznik 176 180 184200 211 216bezstykowy 359drganie stykoacutew 335 336

filtrowanie 416eliminacja drga 336przechylny 339

rt ciowy 339z wbudowan diod LED

217przerwanie 339przetwornik

analogowo-cyfrowy 334przezroczysto 131pulpit graficzny 39Python 44 49 50 152 156

bufor 265czytnik RFID 276konsola tekstowa Patrz

konsola tekstowamodu 232

budowanie 230httplib2 230 232instalowanie 202 204matplotlib 420numpy 420 422odblokowywanie 202python-oauth2 230 232python-twitter 230 232random 157shelve 196simplejson 230 231sys 157

Kup książkę Poleć książkę

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 32: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

SKOROWIDZ 429

programespeak 225wywo ywanie 225 226

skrypt 294sta a 404wci cia 53 54wersja 206

QQuickTime 105

Rradio frequency

identification PatrzRFID

Raspbian 26 280Red Hat 24rekurencja 80rezystor

obni aj cy 286podci gaj cy 286 288

RFID 264 273 274 275Roto-Sketch 334

oprogramowanie 346 351symetria 351 354

ruch 103k t 103kierunek 105odbicie 104 111 112zderzenie Patrz

zderzenieruter 291 295

adres IP 295

SSchlafly Hubert 82sekwenser 247 248Serial Peripheral Interface

Patrz magistrala SPIserial protocol interface

Patrz protokoacute SPIserwer

katalogowy 280LDAP 280poczty elektronicznej 301

szyfrowanie 302 303304

WWW 24 25 36sie 24

sterownik 39skrypt 294

sendmailpy 294 309s ownik 277

s owodef 53elif 73immutable 160

sprite 127tworzenie 128 129wielko 127

sprz enie zwrotnedodatnie 259ujemne 259

sta a 160 228 403Python 404

sterownik 201d wi ku Patrz d wi k

sterownikklawiatury Patrz

klawiatura sterowniksieci Patrz sie

sterownikSPI 201

stoper 208 217strumie

standardowy 414stderr 414stdin 414stdout 414

suma kontrolna 27 28 30MD5 401

sygnaanalogowy 33 34cyfrowy 33 34

syntezator mowy 224 225system

Active Directory 280Git 203kontroli wersji 203 343krytyczny ze wzgl du na

bezpiecze stwo 265nawigacji satelitarnej 225oparty na spritersquoach 84operacyjny 24 361

Android Patrz AndroidLinux Patrz Linuxadowanie 36 38

OS X Patrz OS XWindows Patrz

Windowsplikoacutew 25

ext 25FAT 25 26HFS Plus 25hierarchiczny 406katalog 279NTFS 25

subversion 343transmodulacji 176wbudowany 198

sztuczna inteligencja 70

szum 400 415filtrowanie 416

rodowiskoIDE 44

Arduino 361 372IDLE 44 156 157 242

funkcja 52uruchamianie 45wersja 45 206zapisywanie kodu 46

IDLE 3 45 52okienkowe 153 242

Ttabela rekordoacutew 196tablica

asocjacyjna 277wyszukiwa 84z haszowaniem 277

ta ma LED 254 255 256 257teleprompter 82 83 Patrz

te prompterteoria informacji 400terminal 39 153Terminal 29test harness Patrz jarzmo

testowetor z samochodzikami 314

kod gry 327oprogramowanie 325testowanie 316

Torvalds Linus 24 203tranzystor 212

baza 308bipolarny 308emiter 308kolektor 308NPN 212

Twitter 220 230 392komunikacja 233 234token 233uwierzytelnianie 233

UUbuntu 24Upton Eben 16urz dzenie

analogowe 200cyfrowe 200nieliniowe 176Wi-Fi 295

Kup książkę Poleć książkę

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 33: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest

430 RASPBERRY PI NAJLEPSZE PROJEKTY

us ugakatalogowa 279SSH 291 296

ustawienia lokalne 405u ytkownik

domy lny 39root 28 291

VVreeken Jeroen 291

Wwahad o 358 359 361 362

367 388amplituda 359masa 362okres 362wspoacute czynnik t umienia

362warto logiczna 245wiersz polece 28 29 235

tekstowy Patrz terminalWindows 24 27 280wyj cie kwadraturowe 335wykres 420

czasowania 335wy cznik

drzwiowy 284 285normalnie otwarty

285 314

wzmacniacz operacyjny259 260

XX Server 39

YYahoo 302 304

Zzacisk rubowy 214zamek do drzwi 264

elektromagnetyczny 266has o 271 272kontrola drzwi 268oprogramowanie 270

271 276schemat 264symulacja programowa

267testowanie 278uwierzytelnianie 271

272 276 280typu wyzwanie ndash

odpowied 275z elektromechanicznym

zatrzaskiem 266zapora 296

zasilanie 38 41problemy 41

zdarzenie 243wci ni cia przycisku

myszy 246zamkni cia programu 243

zderzenie 104 111 116okre lenie miejsca 122

zegar 36z cze

DVI 33ethernetowe 36GPIO 200 284 285 286

308HDMI 32 225jack 225mikro USB 41RCA 32 35USB 32

zmienna 49 412bajtowa 246globalna 134mc 157

znak__ 230| 414cudzys oacutew 49delta 103komentarza 202roacutewno ci 49theta 104

Kup książkę Poleć książkę

Page 34: Tytuł oryginału: Raspberry Pi Projectpdf.ebookpoint.pl/raspnp/raspnp.pdf · Konfigurowanie karty PiFace Digital ... Instalowanie Minecrafta ChoÊ Minecraft na inne platformy jest