-
Notifications
You must be signed in to change notification settings - Fork 1
/
drzewa.py
120 lines (103 loc) · 4.63 KB
/
drzewa.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Kamil Sijko [email protected]
# scenariusz: Wojtek Gembalczyk [email protected]
# wiki pod adresem zasoby.coderdojo.org.pl
# importujemy bibliotekę potrzebną do manipulowania Minecraftem (wbudowana w instalację RaspberryPi,
# ale jeśli korzystamy z modów PC trzeba ją ręcznie zdobyć)
import mcpi.minecraft as minecraft
# importujemy również bibliotekę umozliwiającą m.in. "pauzowanie" - dzieki temu będziemy w stanie
# animować nasze budowle
import time
# i bibliotekę do matematyki
import math
# i bibliotekę do losowania
import random
# tworzymy obiekt reprezentujący świat Minecrafta
mc = minecraft.Minecraft.create()
# prosty test - czy działa czat?:
mc.postToChat("Hej swiecie, tu Kamil, czy mnie slyszysz?")
# najprostsza pętla (struktura):
for i in range(1, 10, 1): #start-stop-step
mc.postToChat("Owca nr. "+str(i))
time.sleep(0.1)
# żeby zacząć budować musimy wiedzieć gdzie jesteśmy, sprawdźmy:
mc.player.getPos() # to wydrukuje współrzędne w konsoli
pos = mc.player.getPos() # to zapisze współrzędne do zmiennej "pos"
mc.postToChat("Wspolrzedne to x %s (szerokosc), y %s (wysokosc), z %s (glebokosc)." % (pos.x, pos.y, pos.z))
# w ten sposób z kolei układamy blok (położymy go dokładnie tam, gdzie staliśmy chwilę wczesniej,
# więc warto się przesunąć):
mc.setBlock(pos.x, pos.y, pos.z, 17) # x, y, z, jaki bloczek (drewno)
# teraz czyścimy teren - wygodnie jest to zrobić za pomocą funkcji
def wyczysc(promien):
pozycja = mc.player.getPos()
mc.setBlocks(pozycja.x-promien, pozycja.y, pozycja.z-promien, pozycja.x+promien, pozycja.y+promien, pozycja.z+promien, 0)
mc.setBlocks(pozycja.x-promien, pozycja.y-1, pozycja.z-promien, pozycja.x+promien, pozycja.y+1, pozycja.z+promien, 2)
mc.player.setPos(pozycja.x, pozycja.y+10, pozycja.z)
# wywołujemy funckję
wyczysc(150)
# dla wygody zapisze sobie promień konaru drzewa do zmiennej
promien = 10
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
for i in range (-promien, promien+1):
mc.setBlock (pos.x + i, pos.y+10, pos.z, 17)
# teraz kwadrat z kreski
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
mc.setBlock (pos.x + i, pos.y + j, pos.z, 17)
# teraz sześcian
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
mc.setBlock (pos.x + i, pos.y + j, pos.z + k, 17)
# zanim znów spróbujemy - czyścimy
wyczysc(150)
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
# modyfikacja powyższego kodu, z warunkiem, który pozwala narysować tylko płaskie koło
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
if (j == pos.y) and (math.sqrt (i*i + k*k) <= promien):
mc.setBlock (pos.x + i, pos.y + j, pos.z + k, 17)
# zanim znów spróbujemy - czyścimy
wyczysc(150)
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
# modyfikacja powyższego kodu bez warunku rysuje walec
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
if (math.sqrt (i*i + k*k) <= promien):
mc.setBlock (pos.x + i, pos.y + j, pos.z + k, 17)
# zanim znów spróbujemy - czyścimy
wyczysc(150)
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
# teraz kula
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
if (math.sqrt (i*i + j*j + k*k) <= promien):
mc.setBlock (pos.x + i, pos.y + j + 10, pos.z + k, 17) # j+10 żeby kula nie była w połowie pod ziemią
# zanim znów spróbujemy - czyścimy
wyczysc(150)
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
# teraz kulista chmura liści
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
if (math.sqrt (i*i + j*j + k*k) <= promien) and (random.randint (0, 9) == 0):
mc.setBlock (pos.x + i, pos.y + 10 + j, pos.z + k, 35, 5)
# zanim znów spróbujemy - czyścimy
wyczysc(150)
pos = mc.player.getPos() # zapisujemy "świeże" współrzędne
mc.player.setPos(pos.x+10, pos.y, pos.z)
# teraz wszystko składamy w całość!
promien=3
for i in range (-promien, promien+1):
for j in range (0, 15):
for k in range (-promien, promien+1):
if (math.sqrt (i*i + k*k) <= promien):
mc.setBlock (pos.x + i, pos.y + j, pos.z + k, 17)
promien=15
for i in range (-promien, promien+1):
for j in range (-promien, promien+1):
for k in range (-promien, promien+1):
if (math.sqrt (i*i + j*j + k*k) <= promien) and (random.randint (0, 9) == 0):
mc.setBlock (pos.x + i, pos.y + 20 + j, pos.z + k, 35, 5)