9.3. Żółw w przestrzeni
Biblioteka minecraftturtle implementuje tzw. grafikę żółwia (ang. turtle graphics) w trzech wymiarach. W praktyce ułatwia więc budowanie konstrukcji przestrzennych. Inspirowana jest wbudowaną w Pythona biblioteką turtle, często wykorzystywaną do nauki programowania najmłodszych. Poniżej pokażemy, jak poruszać się „żółwiem” w przestrzeni.
Instalacja
Symulator mcpi-sim
domyślnie nie działa z omawianą biblioteką i wymaga modyfikacji.
Zmienione pliki oraz omawianą bibliotekę umieściliśmy w archiwum
mcpi-sim-fix.zip
, które po ściągnięciu
należy rozpakować do katalogu ~/mcpi-sim/local
nadpisując oryginalne pliki.
9.3.1. Kwadraty
W pustym pliku mcsim-turtle.py
umieszczamy kod:
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import os
5import local.minecraft as minecraft # import modułu minecraft
6import local.block as block # import modułu block
7import local.minecraftturtle as mcturtle
8from local.vec3 import Vec3 # klasa reprezentująca punkt w MC
9
10os.environ["USERNAME"] = "Steve" # nazwa użytkownika
11os.environ["COMPUTERNAME"] = "mykomp" # nazwa komputera
12
13mc = minecraft.Minecraft.create("") # połaczenie z symulatorem
14start = Vec3(0, 1, 0) # pozycja początkowa
15turtle = mcturtle.MinecraftTurtle(mc, start) # obiekt "żółwia"
16
17
18def plac(x, y, z, roz=10, gracz=False):
19 """
20 Funkcja tworzy podłoże i wypełnia sześcienny obszar od podanej pozycji,
21 opcjonalnie umieszcza gracza w środku.
22 Parametry: x, y, z - współrzędne pozycji początkowej,
23 roz - rozmiar wypełnianej przestrzeni,
24 gracz - czy umieścić gracza w środku
25 Wymaga: globalnych obiektów mc i block.
26 """
27
28 podloga = block.STONE
29 wypelniacz = block.AIR
30
31 # podloga i czyszczenie
32 mc.setBlocks(x, y - 1, z, x + roz, y - 1, z + roz, podloga)
33 mc.setBlocks(x, y, z, x + roz, y + roz, z + roz, wypelniacz)
34 # umieść gracza w środku
35 if gracz:
36 mc.player.setPos(x + roz / 2, y + roz / 2, z + roz / 2)
37
38
39def kwadraty():
40 # Funkcja rysuje dwa kwadraty w poziomie
41 turtle.speed(0) # szybkość budowania
42 turtle.penblock(block.SAND) # typ bloku
43 for i in range(4):
44 turtle.forward(10) # do przodu 10 "króków"
45 turtle.right(90) # w prawo o 90 stopni
46 turtle.left(90) # w lewo o 90 stopni
47 for i in range(4):
48 turtle.forward(10)
49 turtle.left(90)
50
51
52def main():
53 mc.postToChat("Biblioteka minecraftturtle") # wysłanie komunikatu do mc
54 plac(-15, 0, -15, 30)
55 kwadraty()
56
57 return 0
58
59
60if __name__ == '__main__':
61 main()
Początek kodu omawialiśmy już w Podstawach. W podświetlonym fragmencie
przede wszystkim importujemy omawianą bibliotekę oraz klasę Vec3 reprezentującą położenie
w MC. Polecenie turtle = mcturtle.MinecraftTurtle(mc, start)
tworzy obiekt „żółwia” w podanym
położeniu (start = Vec3(0, 1, 0)
).
Żółwiem sterujemy za pomocą m.in. następujących metod:
speed()
– ustawia prędkość budowania: 0 – brak animacji, 1 – b. wolno, 10 – najszybciej;penblock()
– określamy blok, którym rysujemy ślad;forward(x)
– idź do przodu o x „kroków”;right(x)
,left(x)
– obróć się w prawo/lewo o x stopni;
Wywołanie przykładowej funkcji kwadraty()
umieszczamy w funkcji głównej i testujemy kod.
9.3.2. Okna
Przed funkcją główną main()
dopisujemy kolejną przykładową funkcję:
52def okna():
53 # Funkcja rysuje kształt okien w pionie
54 turtle.penblock(block.WOOD)
55 turtle.setposition(10, 2, 0)
56 turtle.up(90)
57 turtle.forward(14)
58 turtle.down(90)
59 turtle.setposition(-10, 2, 0)
60 turtle.up(90)
61 turtle.forward(14)
62 turtle.down(90)
63 turtle.right(90)
64 turtle.forward(19)
65 turtle.setposition(0, 2, 0)
66 turtle.up(90)
67 turtle.forward(13)
68 turtle.setposition(9, 10, 0)
69 turtle.down(90)
70 turtle.left(180)
71 turtle.forward(19)
W podanym kodzie mamy kilka nowych metod:
setposition(x, y, z)
– ustawia „żółwia” na podanej pozycji;up(x)
– obróć się do góry o x stopni;down(x)
– obróć się w dół o x stopni;
Dopisz wywołanie funkcji okna()
do funkcji głównej i wykonaj skrypt.
9.3.3. Szlaczek
Jeszcze jedna funkcja przed funkcją main()
:
74def szlaczek():
75 # Funkcja rysuje przerywaną linię
76 turtle.penblock(block.MELON)
77 turtle.setx(-15)
78 turtle.sety(2)
79 turtle.setz(15)
80 turtle.left(180)
81 for i in range(8):
82 if (i % 2 == 0):
83 turtle.forward(1)
84 else:
85 turtle.forward(3)
86 turtle.penup()
87 turtle.forward(2)
88 turtle.pendown()
Nowe metody to:
setx(x)
,setx(y)
,setx(z)
– metody ustawiają składowe pozycji; jest też metodaposition()
, która zwraca pozycję;penup()
,pendown()
– podniesienie/opuszczenie „pędzla”, dodatkowo funkcjaisdown()
sprawdza, czy pędzel jest opuszczony.
Po wywołaniu kolejno w funkcji głównej wszystkich powyższych funkcji otrzymamy następującą budowlę:

Ćwiczenia
Napisz kod, który zbuduje napis „KzK” podobny do pokazanego niżej.

Napisz kod, który zbuduje sześcian. Przekształć go w funkcję, która buduje sześcian o podanej długości boku z podanego punktu.
9.3.4. Przykłady
Prawdziwie widowiskowe efekty uzyskamy przy wykorzystaniu pętli.
Zapisz skrypt mcsim-turtle.py
pod nazwą mcpi-turtle.py
i dostosuj go do uruchomienia
na serwerze MC Pi. W tym celu zamień ciąg „local” w importach na „mcpi”
oraz podaj adres IP serwera MC Pi w poleceniu tworzącym połączenie.
Następnie umieść w pliku kody poniższych funkcji i po kolei je przetestuj dodając
ich wywołania w funkcji głównej.
91def slonce():
92 turtle.setposition(-20, 3, 0)
93 turtle.speed(0)
94 turtle.penblock(block.GOLD_BLOCK)
95 while True:
96 turtle.forward(80)
97 turtle.left(165)
98 x, y, z = turtle.position
99 print max(x, z)
100 if abs(max(x, z)) < 1:
101 break
102
103
104def wielokat(n):
105 turtle.setposition(15, 3, -18)
106 turtle.speed(0)
107 turtle.penblock(block.OBSIDIAN)
108 for i in range(n):
109 turtle.forward(10)
110 turtle.right(360 / n)
111
112
113def main():
114 mc.postToChat("Biblioteka minecraftturtle") # wysłanie komunikatu do mc
115 # plac(-15, 0, -15, 30)
116 # kwadraty()
117 # okna()
118 # szlaczek()
119 plac(-80, 0, -80, 160)
120 slonce()
121 wielokat(10)
122 return 0

Materiały Python 101
udostępniane przez
Centrum Edukacji Obywatelskiej na licencji
Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.
- Utworzony:
2025-04-12 o 10:21 w Sphinx 7.3.7
- Autorzy: