Gyvatėlė
Jump to navigation
Jump to search
Gyvatėlė žaidimas
Ši programa demonstruoja, kaip susikurti klasikinį Snake stiliaus žaidimą, kuriame klaviatūra valdoma gyvatėlė, pagauna maistą ir paauga. Tikslas pagauti, kuo daugiau maisto gabaliukų neatsitrenkus į sieną ar save. Kodas dar bus tobulinamas.
Šioje programėlėje panaudoti keli skirtingi vaizdo failai, kurie atsiranda priklausomai nuo atlikto veiksmo. Dalis jų yra angies sistemoje, o dalį galime rasti čia.
Žaisti gyvatėlę
Gyvatėlė žaidimo kodas
reikalinga angis
reikalingas žaidimas
reikalingas random
reikalinga math
žaidimas.duokSceną().fonas('pav/gyvatėlė/fonas.png')
# Gyvatėlės galva
galva = žaidimas.Dekoracija('pav/stat/akmuo2.png', x=100, y=100)
galva.kryptis = "niekur"
galva.uždelsimas = 100
# Gyvatėlės kūno segmentai
segmentai = []
# Gyvatėlės maistas
maistas = žaidimas.Dekoracija('pav/gyvatėlė/drakono galva 50x50.png', x=200, y=200)
švieslentė = žaidimas.Tekstas("Taškai: 0 Rekordas: 0", x= 150, y=10, spalva=0xFFFFFF, dydis=20)
komanda rodykRezultatą(rezultatas, rekordas):
švieslentė.tekstas("Taškai: "+str(taškai)+" Rekordas:" + str(rekordas))
# Klaviatūros įvestis
komanda mygtukoWkomanda(mygtukas):
jeigu galva.kryptis != "žemyn":
galva.kryptis = "viršun"
komanda mygtukoSkomanda(mygtukas):
jeigu galva.kryptis != "viršun":
galva.kryptis = "žemyn"
komanda mygtukoAkomanda(mygtukas):
jeigu galva.kryptis != "dešinėn":
galva.kryptis = "kairėn"
komanda mygtukoDkomanda(mygtukas):
jeigu galva.kryptis != "kairėn":
galva.kryptis = "dešinėn"
komanda mygtukoQkomanda(mygtukas):
global žaidimasBaigtas
žaidimasBaigtas = 'taip'
komanda move():
x, y = galva.duokKoordinates()
jeigu galva.kryptis == "viršun":
galva.atsirask(x, y - 20)
jeigu galva.kryptis == "žemyn":
galva.atsirask(x, y + 20)
jeigu galva.kryptis == "kairėn":
galva.atsirask(x - 20, y)
jeigu galva.kryptis == "dešinėn":
galva.atsirask(x + 20, y)
angis.paspaudus("a", mygtukoAkomanda)
angis.paspaudus("s", mygtukoSkomanda)
angis.paspaudus("d", mygtukoDkomanda)
angis.paspaudus("w", mygtukoWkomanda)
angis.paspaudus("q", mygtukoQkomanda)
# atstumo matavimas tarp dviejų daiktų pagal Pitagoro teoremą
komanda atstumas(aDaiktas, bDaiktas):
x, y = aDaiktas.duokKoordinates();
x2, y2 = bDaiktas.duokKoordinates()
grąžink math.sqrt( (x-x2)*(x-x2) + (y-y2) * (y-y2) )
taškai = 0
rekordas = 0
komanda mirk():
angis.miegok(1000)
galva.atsirask(300, 300)
galva.kryptis = "stop"
# Slepiam kūno segmentus
kiekvienam segment iš segmentai:
segment.slėpkis()
# Išvalom segmentų sąrašą
segmentai.clear()
# Atstatom taškus
global taškai
taškai = 0
# Atstatom delsimą
galva.uždelsimas = 100
rodykRezultatą(taškai, rekordas)
# Pagrindinis žaidimo ciklas
žaidimasBaigtas = 'ne'
kol žaidimasBaigtas == 'ne':
x, y = galva.duokKoordinates()
# Tikrinamas susidūrimas su kraštu
jeigu x>560 arba x<0 arba y>570 arba y<0:
mirk()
# Tikrinti ar yra susidūrimas su maistu
jeigu atstumas(galva, maistas) < 30:
# Maisto atsiradimas, atsitiktinėje vietoje
x = random.randint(0, 550)
y = random.randint(0, 570)
maistas.atsirask(x,y)
# Pridėti segmentą
new_segment = žaidimas.Dekoracija('pav/stat/akmuo2.png')
segmentai.append(new_segment)
# Sutrumpinti uždelsima
galva.uždelsimas -= 3
# Padidinti taškus
taškai += 10
jeigu taškai > rekordas:
rekordas = taškai
rodykRezultatą(taškai, rekordas)
# Galinius segmentus perkelti atgaline tvarka
kiekvienam index iš intervalo(len(segmentai)-1, 0, -1):
x, y = segmentai[index-1].duokKoordinates()
segmentai[index].atsirask(x, y)
# Perkelti 0 segmentą ten, kur yra galva
jeigu len(segmentai) > 0:
x,y = galva.duokKoordinates()
segmentai[0].atsirask(x,y)
move()
# Tikrinam, ar galva nesusiduria su kūno segmentais
kiekvienam segmentas iš segmentai:
jeigu atstumas(segmentas, galva) < 20:
mirk()
angis.miegok(galva.uždelsimas)