PRAVLJENJE IGRICA SA UPOTREBOM MIKROBIT UREĐAJA. UPOTREBA PALETE GAMES U PROJEKTIMA MIKROBITA.
U ovom tutorijalu, vodićemo vas kroz osnovne korake za pravljenje igrica na micro:bit uređaju koristeći Microsoft MakeCode, moćnu i intuitivnu platformu koja podržava vizuelno i tekstualno programiranje.
Zašto praviti igre sa micro:bit-om?
- Logičko razmišljanje i rešavanje problema,
- Razumevanje algoritama,
- Osnovno znanje o programiranju i elektronici.
Kako napraviti igru sa micro:bit-om?
- Pristupite Microsoft MakeCode platformi: Posetite MakeCode za micro:bit i započnite novi projekat klikom na New Project.
- Upotrebite Games paletu: U MakeCode editoru, pronađite Games paletu, koja sadrži specijalizovane alate za pravljenje igara. Tu možete kreirati likove (sprite-ove), omogućiti njihovo kretanje, detektovati sudare i upravljati bodovima.
- Dodajte interaktivne elemente:
- Koristite ugrađene dugmiće A i B za kontrolu lika.
- Kreirajte prepreke, ciljeve ili neprijatelje koristeći dodatne sprite-ove.
- Ubacite bodovanje ili timer kako biste igru učinili izazovnijom.
- Testirajte igru u simulatoru: Simulator sa desne strane omogućava testiranje igre pre nego što je prebacite na micro:bit.
- Preuzmite kod i pokrenite ga na micro:bit-u: Kada završite, preuzmite program kao .hex datoteku i učitajte ga na vaš micro:bit putem USB kabla.
Šta je Games paleta?
- Kreiranje sprite-ova: Glavni likovi i objekti u igri.
- Pokretanje sprite-ova: Dodavanje kretanja i reakcija na pritisak dugmića.
- Detekciju sudara: Proveravanje da li se dva sprite-a sudaraju.
- Bodovanje: Dodavanje i praćenje poena tokom igre.
- Upravljanje ishodima: Omogućava postavljanje uslova za kraj igre, prikaz rezultata i ponovni početak.
player_y = 4 # Početna Y pozicija igrača
while True:
display.clear() # Čisti ekran
display.set_pixel(player_x, player_y, 9) # Crta igrača na trenutnoj poziciji
if button_a.is_pressed():
player_x = (player_x - 1) % 5 # Pomeranje ulevo
if button_b.is_pressed():
player_x = (player_x + 1) % 5 # Pomeranje udesno
1. game.createSprite(x, y): Kreira LED sprite na koordinatama (x
, y
). Ovo je vaš glavni objekat u igri.
2. sprite.move(steps): Pomeranje sprite-a za određen broj koraka u trenutnom pravcu.
3. sprite.turn(direction, degrees): Rotira sprite u datom pravcu (Direction.Right
ili Direction.Left
) za određeni broj stepeni.
4. sprite.ifOnEdgeBounce(): Kada sprite dođe do ivice matrice, automatski se odbija unazad.
5. sprite.delete(): Briše sprite iz igre.
6. game.addScore(points): Dodaje poene trenutnom rezultatu igre.
7. game.score(): Vraća trenutni rezultat igre.
8. game.gameOver(): Završava igru i prikazuje "Game Over" poruku na ekranu.
9. game.startCountdown(ms): Pokreće odbrojavanje koje traje određeni broj milisekundi.
10. game.pause(): Pauzira igru na trenutnom stanju.
11. game.resume(): Nastavlja igru nakon pauze.
12. game.setScore(score): Postavlja trenutni rezultat igre na određenu vrednost.
13. game.isGameOver(): Proverava da li je igra završena i vraća true
ili false
.
14. sprite.isTouching(otherSprite): Proverava da li se trenutni sprite dodiruje sa drugim sprite-om. Vraća true
ili false
.
15. sprite.isDeleted(): Proverava da li je sprite izbrisan. Vraća true
ili false
.
16. game.setLife(lives): Postavlja broj života na početnu vrednost.
17. game.addLife(lives): Dodaje određeni broj života trenutnom stanju igre.
18. game.removeLife(lives): Oduzima određeni broj života trenutnom stanju igre.
19. game.life(): Vraća trenutni broj preostalih života.
20. sprite.set(LedSpriteProperty.X, value): Postavlja vrednost određene osobine sprite-a (X
, Y
, Direction
, Blink
, ili Brightness
).
21. sprite.get(LedSpriteProperty.X): Vraća trenutnu vrednost određene osobine sprite-a.
Šta možete napraviti?
- Zmijica: Pomeranje sprite-a koji sakuplja bodove.
- Izbegavanje prepreka: Lik se kreće kako bi izbegao prepreke.
- Kvizovi: Pitanja i odgovori koristeći dugmiće A i B.
Primeri upotrebe komandi sa Game palete
Primer 1: Kreiranje sprite-a i kontrola pomoću dugmića
Napravite igru u kojoj se glavni lik (sprite) kreće levo ili desno pomoću dugmića na micro:bit uređaju. Lik se kreira na početnoj poziciji, a pomeranje se vrši pritiskom na dugme A (ulevo) ili B (udesno).
- Kreira se sprite (lik) na koordinatama (2, 4).
- Dugme A pomera sprite ulevo, dok dugme B pomera udesno.
- Ovo može biti osnova za igre poput "Hvatanje objekata".
Uputstvo za Scratch-like korisnike:
- Otvorite MakeCode za micro:bit i prebacite se u Blokovi (Blocks) režim rada.
-
Prevucite blok
when program starts
(Kada se program pokrene) iz sekcije Basic (Osnovno). -
Dodajte blok
create sprite at x: 2 y: 4
iz sekcije Game (Igra) kako biste kreirali glavnog lika igre.- Kreirajte promenljivu pod nazivom
player
koja će predstavljati vaš sprite. - Povežite ovu promenljivu sa blokom
create sprite
. Na primer: "Let player = create sprite at x: 2 y: 4". Sprite će biti postavljen na sredinu donjeg reda ekrana.
- Kreirajte promenljivu pod nazivom
-
Za kontrolu sprite-a pomoću dugmića:
- Prevucite blok
on button A pressed
(Kada se pritisne dugme A) iz sekcije Input (Ulaz). - Unutar ovog bloka dodajte naredbu
change X by -1
iz sekcije Game (Igra), kako biste pomerili sprite ulevo. - Ponovite ovaj korak za dugme B, ali unutar bloka
on button B pressed
koristite naredbuchange X by 1
, kako biste omogućili pomeranje sprite-a udesno.
- Prevucite blok
- Vaša igra je spremna! Preuzmite kod na micro:bit uređaj i testirajte kako se sprite pomera levo i desno pritiskom na dugmiće.
Kod u python-u
def on_button_pressed_a():
# Pomeranje sprite-a (brod) ulevo, smanjenjem X koordinate za 1
brod.change(LedSpriteProperty.X, -1)
# Postavljanje događaja da funkcija on_button_pressed_a bude pozvana kada se pritisne dugme A
input.on_button_pressed(Button.A, on_button_pressed_a)
# Definiše funkciju koja se poziva kada se pritisne dugme B
def on_button_pressed_b():
# Pomeranje sprite-a (brod) udesno, povećanjem X koordinate za 1
brod.change(LedSpriteProperty.X, 1)
# Postavljanje događaja da funkcija on_button_pressed_b bude pozvana kada se pritisne dugme B
input.on_button_pressed(Button.B, on_button_pressed_b)
# Deklaracija promenljive brod kao tipa game.LedSprite
brod: game.LedSprite = None
# Kreiranje sprite-a brod na poziciji (2, 4)
brod = game.create_sprite(2, 4)
Upotreba funkcija u Makecode-u. Rešenje primera "Kreiranje sprite-a i kontrola pomoću dugmića" upotrebom funkcija
Funkcije se definišu samo jednom, sa jasnim nazivom koji opisuje njihovu svrhu, a mogu se pozivati po potrebi više puta tokom izvršavanja programa. Ovakva modularnost ne samo da olakšava organizaciju i čitljivost koda, već i omogućava jednostavnije održavanje i proširivanje programa.
Na primer, mogli bismo kreirati funkcije za pomeranje broda ulevo i udesno. Kod za pomeranje broda ulevo:
brod.change(LedSpriteProperty.X, -1)mogao bi se staviti u funkciju nazvanu move_left(). Slično tome, kod za pomeranje broda udesno:
brod.change(LedSpriteProperty.X, 1)bio bi deo funkcije nazvane move_right().
Ovako definisane funkcije ne samo da čine kod preglednijim, već i omogućavaju da se ove operacije lako pozivaju bilo gde u programu, bez ponovnog pisanja istih naredbi.
Paleta function
sprite change by -1Iz padajuće liste treba zameniti vrednost sprite varijablom brod, kako bi se odnosila na tačno definisan objekat u programu.
Odaberite naredbu while true sa palete logic i umetnite je u on start blok. Zatim dodajte dve if naredbe i umetnite ih da budu ugnježdene unutar beskonačne petlje.
Pomoću ovih naredbi potrebno je ispitati da li je kliknut taster A ili taster B i pozvati u skladu sa tim odgovarajuću funkciju za pomeranje ulevo ili udesno, kao što se može videti na slici 5.
Kompletan kod u scretch-u
Kod u python-u
def move_left():
brod: game.LedSprite = None # Deklaracija varijable brod
brod = game.create_sprite(2, 4) # Kreiranje broda na početnoj poziciji
while True:
if input.button_is_pressed(Button.B):
Primer 2: Brojanje poena
Koraci za rešenje zadatka u Scratch okruženju:
- Dodavanje sprite-ova za igrača i metu:
- Kreirajte sprite za igrača (npr. loptica):
- Koristite blok
game.createSprite(x, y)
iz palete Game. - Postavite početne koordinate (npr. x = 2, y = 2) da bi sprite počeo iz središta matrice 5x5.
- Kreirajte sprite za metu (npr. zvezda):
- Koristite isti blok
game.createSprite(x, y)
, ali unesite različite koordinate kako bi meta bila na drugom mestu.
- Pomeranje igrača:
- Dodajte logiku za pomeranje sprite-a pomoću dugmića na mikrobitu:
- Koristite blok
on button pressed
iz palete Input. - Za svaki pritisak dugmeta (A ili B), pozovite metode
move(1)
za kretanje unapred iliturn(Direction.Right, 90)
za okretanje.
- Dodavanje slučajne pozicije za metu:
- Kreirajte funkciju za nasumično postavljanje mete:
- Koristite blok
set x to Math.random(0, 4)
za generisanje slučajnih koordinata (x i y). - Podesite da se meta pomeri na te koordinate koristeći blok
targetSprite.moveTo(x, y)
.
- Provera dodira između igrača i mete:
- Koristite blok
if sprite1.isTouching(sprite2)
iz palete Logic: - Ako igrač dodirne metu, dodajte 1 poen pomoću bloka
change score by 1
. - Pozovite funkciju za nasumično postavljanje mete kako bi se pojavila na drugom mestu.
- Koristite blok
- Prikazivanje rezultata:
- Prikazujte trenutni broj poena na ekranu pomoću bloka
basic.showNumber(score)
iz palete Basic. - Ovo možete dodati na kraj igre ili nakon svakog uspešnog dodira.
- Prikazujte trenutni broj poena na ekranu pomoću bloka
- Završetak igre:
- Koristite blok
pause(ms)
za vremenski period (npr. 30 sekundi). - Nakon isteka vremena, prikažite završnu poruku koristeći
basic.showString("Kraj igre!")
, a zatim prikažite ukupne poene.
- Koristite blok
Primer Scratch koda (blokovi):
- Za metu:
- Na početku igre:
- Kreirajte metu na nasumičnoj poziciji koristeći
game.create_sprite(randint(0, 4), randint(0, 4))
.
- Kreirajte metu na nasumičnoj poziciji koristeći
- Kada lopta dodirne metu:
- Povećajte broj poena za 1 koristeći
game.add_score(1)
. - Premestite metu na novu nasumičnu poziciju pozivom funkcije
premestiMetu()
.
- Povećajte broj poena za 1 koristeći
- Na početku igre:
- Za loptu (igrača):
- Na početku igre:
- Postavite loptu na početnu poziciju koristeći
game.create_sprite(2, 2)
.
- Postavite loptu na početnu poziciju koristeći
- Kretanje lopte:
- Kada pritisnete dugme
A
, pomerite loptu ulevo pozivom funkcijepomeriPoX("levo")
. - Kada pritisnete dugme
B
, pomerite loptu udesno pozivom funkcijepomeriPoX("desno")
. - Kada pomerite uređaj nagore ili nadole, lopta se kreće vertikalno korišćenjem funkcije
pomeriPoY()
.
- Kada pritisnete dugme
- Na početku igre:
- Za igru:
- Na početku igre:
- Postavite broj poena na 0 koristeći
game.set_score(0)
.
- Postavite broj poena na 0 koristeći
- Kraj igre:
- Kada se uređaj protrese (
Gesture.SHAKE
), prikažite poruku"Kraj!"
i ukupan broj osvojenih poena. - Završite igru pozivom
game.game_over()
.
- Kada se uređaj protrese (
- Na početku igre:
Python kod
import game
from random # Uvoz potrebnih biblioteka
lopta: game.LedSprite = None # Deklaracija lopte
meta: game.LedSprite = None # Deklaracija mete
meta = game.create_sprite(randint(0, 4), randint(0, 4)) # Postavljanje mete na nasumičnu poziciju
lopta = game.create_sprite(2, 2) # Postavljanje lopte na početnu poziciju
game.set_score(0) # Postavljanje početnog broja poena
def premestiMetu():
global meta
meta = game.create_sprite(randint(0, 4), randint(0, 4)) # Kreira novu metu na nasumičnoj poziciji
def pomeriPoX(pravac: str):
if pravac == "levo":
if lopta.get(LedSpriteProperty.X) > 0:
lopta.change(LedSpriteProperty.X, -1) # Pomera loptu ulevo
elif pravac == "desno":
if lopta.get(LedSpriteProperty.X) < 4:
lopta.change(LedSpriteProperty.X, 1) # Pomera loptu udesno
def on_gesture_logo_up():
pomeriPoY("gore")
input.on_gesture(Gesture.LOGO_UP, on_gesture_logo_up)
def on_gesture_logo_down():
pomeriPoY("dole")
input.on_gesture(Gesture.LOGO_DOWN, on_gesture_logo_down)
def pomeriPoY(pravac2: str):
if pravac2 == "gore":
if lopta.get(LedSpriteProperty.Y) > 0:
lopta.change(LedSpriteProperty.Y, -1) # Pomera loptu gore
elif pravac2 == "dole":
if lopta.get(LedSpriteProperty.Y) < 4:
lopta.change(LedSpriteProperty.Y, 1) # Pomera loptu dole
while True:
if input.button_is_pressed(Button.A):
pomeriPoX("levo")
basic.pause(50) # Pauza za fluidniji rad
if input.button_is_pressed(Button.B):
pomeriPoX("desno")
basic.pause(50)
if input.button_is_pressed(Button.AB):
lopta.turn(Direction.RIGHT, 90) # Okretanje lopte
if lopta.is_touching(meta):
game.add_score(1) # Dodavanje poena
premestiMetu() # Premestanje mete
if input.is_gesture(Gesture.SHAKE):
basic.show_string("Kraj!" + "Poeni: " + str(game.score()))
game.game_over() # Kraj igre
Primer 3: Odbrojavanje vremena
Kreirajte igru u kojoj igrač ima ograničeno vreme (10 sekundi) da postigne što više poena. Lik (sprite) se automatski pomera po ekranu i odbija od ivica.
Objašnjenje:
- Postavlja se odbrojavanje od 10 sekundi.
- Sprite se automatski pomera i odbija od ivice ekrana.
- Kada istekne vreme, igra se završava
Uputstvo za rešavanje zadatka: Odbrojavanje vremena
Koraci za rešenje:
- Kreirajte sprite za igrača:
Dodajte komandu za kreiranje lika koji će se kretati po ekranu. Na primer, koristite
game.create_sprite(x, y)
za pozicioniranje sprite-a na početnu poziciju. - Podesite smer kretanja sprite-a:
Definišite promenljive koje će označavati smer kretanja sprite-a po X i Y osi. Na primer:
direction_x = 1
idirection_y = 1
. - Pomaknite sprite:
Koristite petlju koja će sprite pomerati u definisanom smeru. U svakoj iteraciji, proverite da li je sprite dotakao ivicu ekrana.
- Odbijanje od ivica:
Dodajte uslov za promeni smera kada sprite dotakne ivicu. Na primer, ako je X koordinata sprite-a 0, promenite smer na suprotan.
- Ograničenje vremena:
Iskoristite funkciju
game.start_countdown(seconds)
kako biste ograničili trajanje igre na 10 sekundi. - Brojanje poena:
Dodajte mogućnost da igrač dobije poene kada sprite dotakne određene tačke ili ispunjava specifične uslove.
- Završetak igre:
Kada vreme istekne, prikažite rezultat pomoću
game.game_over()
.
Objašnjenje:
Ovaj zadatak podrazumeva rad sa petljama, uslovima i osnovnim komandama za manipulaciju sprite-ovima. Sprite se pomera u zadatom smeru dok ne dotakne ivicu, nakon čega menja smer. Igrač ima ograničeno vreme da postigne što više poena pre nego što se igra završi.
Važne komande iz palete:
game.create_sprite(x, y)
: Kreira sprite na datoj poziciji.sprite.move(steps)
: Pomeranje sprite-a za određeni broj koraka.game.start_countdown(seconds)
: Postavlja ograničenje vremena za igru.game.add_score(points)
: Dodaje poene za ispunjeni zadatak.game.game_over()
: Završava igru i prikazuje rezultat.
Deo koda u python-u:
player = game.create_sprite(2, 2) # Igrač
def update_player():
player.move(1)
player.if_on_edge_bounce() # Sprite se odbija od ivice
basic.forever(update_player)
Detaljna uputstva za korišćenje Block Mod u MakeCode
Pratite sledeće korake kako biste implementirali kod koristeći Block Mod u MakeCode editoru:
1. Kreirajte novi projekat
Otvorite MakeCode editor i započnite novi projekat. Kada otvorite editor, vidite početnu stranicu sa različitim opcijama za blokove i JavaScript kod. Prebacite se na Blocks mod.
2. Dodajte sprite u centar
Da biste postavili sprite u centar ekrana, uradite sledeće:
- Otvorite Sprites paletu sa leve strane.
- Povucite blok create sprite at (x, y) u radnu površinu.
- Postavite vrednosti za x i y koordinatu na 2 (centar ekrana).
3. Dodajte odbrojavanje
Da biste dodali odbrojavanje, pratite sledeće korake:
- Otvorite Game paletu sa leve strane.
- Povucite blok start countdown(ms) u radnu površinu.
- U ovom bloku postavite vrednost na 30000 (30 sekundi).
4. Programirajte ponašanje sprite-a
Da biste omogućili sprite-u da se pomera, kao i da menja pravac kada se pritisnu dugmići A i B, pratite sledeće:
- Otvorite Sprites paletu i povucite blok move sprite by (x) u radnu površinu.
- Postavite broj za kretanje na 1 (pomera sprite za jedno mesto).
- Da biste omogućili okretanje sprite-a, otvorite Sprites paletu i povucite blok turn sprite by (x) degrees.
- Podesite ugao na 45 i odaberite smer (levo ili desno) za dugme A i B, koristeći Button A i Button B blokove iz Input palete.
5. Dodavanje bodova za kontakt sa ivicom
Da biste dodali bod kada sprite dotakne ivicu, uradite sledeće:
- Otvorite Sprites paletu i povucite blok if sprite is touching edge.
- Unutar tog bloka, povucite change score by 1 iz Game palete.
6. Dovršite igru sa prikazom rezultata
Da biste završili igru i prikazali trenutni skor, dodajte sledeće:
- Otvorite Game paletu i povucite blok game over.
- Povucite blok show string iz Basic palete da biste prikazali skor na ekranu.
7. Konačan izgled i pokretanje igre
Posle implementacije svih ovih koraka, vaša igra bi trebalo da funkcioniše u skladu sa zadatim pravilima. Na kraju, kliknite na Download dugme da biste preuzeli svoj projekat ili ga testirali u emulatoru.
Kompletno rešenje u Python-u
igrac.move(1) # Pomera sprite unapred za jedno mesto
if igrac.is_touching_edge():
game.add_score(1) # Dodaje 1 bod ako sprite dotakne ivicu
igrac.if_on_edge_bounce() # Bounce efekat kada sprite dodirne ivicu
basic.pause(1000) # Pauza od 1000ms za vidljivo kretanje
def on_button_pressed_a():
igrac.turn(Direction.RIGHT, 45) # Okreće sprite za 45 stepeni udesno kada pritisneš dugme A
def on_button_pressed_b():
igrac.turn(Direction.LEFT, 45) # Okreće sprite za 45 stepeni ulevo kada pritisneš dugme B
input.on_button_pressed(Button.A, on_button_pressed_a) # Postavlja dugme A za promena pravca udesno
input.on_button_pressed(Button.B, on_button_pressed_b) # Postavlja dugme B za promena pravca ulevo
igrac: game.LedSprite = None
game.start_countdown(30000) # Postavlja odbrojavanje od 30 sekundi
igrac = game.create_sprite(2, 2) # Kreira sprite u centru ekrana
def on_forever():
if game.is_running():
updatePlayer() # Poziva funkciju updatePlayer svakog trenutka dok igra traje
else:
basic.show_string("Score: " + str(game.score())) # Prikazuje trenutni skor na ekranu kada igra završi
game.game_over() # Završava igru
basic.forever(on_forever) # Kontinuirano pokreće funkciju on_forever
Primer 4: Upravljanje životima
Objašnjenje:
- Igrač počinje sa 5 života na početku.
- Svakim pritiskom na dugme A, broj života se povećava za 1.
- Kada sprite dodirne ivicu ekrana, oduzima se jedan život.
- Kada broj života dođe do 0, igra se automatski završava i prikazuje se poruka "Game Over".
Uputstvo za rešavanje zadatka
U ovom zadatku cilj je kreirati igru u kojoj igrač počinje sa 5 života, a svaki put kada pritisne dugme A, broj života se povećava za 1. Igrač gubi jedan život svaki put kada sprite dodirne ivicu ekrana. Kada broj života dođe do 0, igra se automatski završava.
- Inicijalizacija života: Koristite komandu
game.set_life()
iz palete Game da biste postavili broj života na početku igre na 5. - Detekcija pritiska dugmeta: Koristite funkciju koja se aktivira pritiskom na dugme A (
input.on_button_pressed()
) i povećava broj života za 1 sagame.add_life()
. - Gubitak života: Kada sprite dodirne ivicu ekrana, gubi jedan život pomoću komande
game.remove_life()
. - Kraj igre: Kada broj života dođe do 0, igra se automatski završava pozivom funkcije
game.game_over()
. - Testiranje: Pokrenite program i proverite da li igra ispravno prepoznaje pritiske dugmeta i završava igru kada životi dođu do 0.
Ovo je jednostavna igra koja koristi osnovne funkcionalnosti sa Game palete i omogućava igračima da vežbaju osnovne koncepte kao što su varijable i događaji.
Detaljna uputstva za korišćenje Block Mod u MakeCode
Pratite sledeće korake kako biste implementirali kod koristeći Block Mod u MakeCode editoru:
1. Kreirajte novi projekat
Otvorite MakeCode editor i započnite novi projekat. Kada otvorite editor, vidite početnu stranicu sa različitim opcijama za blokove i JavaScript kod. Prebacite se na Blocks mod.
2. Postavite početni broj života
Da biste postavili početni broj života u igri, uradite sledeće:
- Otvorite Variables paletu sa leve strane.
- Povucite blok set [variable] to [value] u radnu površinu.
- Zamenite [variable] sa lives, a [value] sa 5 (početni broj života).
3. Kreirajte sprite (lik) u centru ekrana
Da biste postavili sprite u centar ekrana, pratite sledeće korake:
- Otvorite Sprites paletu.
- Povucite blok create sprite at (x, y) u radnu površinu.
- Postavite x i y koordinatu na 2 (centar ekrana).
4. Dodajte odbrojavanje
Da biste dodali odbrojavanje za igru, pratite sledeće korake:
- Otvorite Game paletu.
- Povucite blok start countdown(ms) u radnu površinu.
- Postavite vrednost na 30000 (30 sekundi).
5. Programirajte ponašanje sprite-a
Da biste omogućili sprite-u da se pomera i reaguje na dodir sa ivicom ekrana, pratite sledeće:
- Otvorite Sprites paletu i povucite blok move sprite by (x) u radnu površinu.
- Postavite vrednost za pomeranje na 1 (pomera sprite za jedno mesto).
- Otvorite Sprites paletu i povucite blok if sprite is touching edge.
- Unutar tog bloka, povucite blok change score by 1 iz Game palete.
6. Oduzimanje života kada sprite dotakne ivicu
Da biste oduzeli jedan život kada sprite dotakne ivicu, pratite sledeće korake:
- Otvorite Game paletu i povucite blok remove life by (1).
- Dodajte blok za prikazivanje broja života koristeći basic show number.
7. Dodajte akciju za dugme A
Da biste omogućili korisnicima da povećaju broj života pritiskom na dugme A, uradite sledeće:
- Otvorite Input paletu i povucite blok on button A pressed.
- Unutar tog bloka, povucite blok change [lives] by (1) iz Variables palete.
- Dodajte basic show number da biste prikazali broj života na ekranu.
8. Završite igru sa prikazom rezultata
Da biste završili igru i prikazali trenutni rezultat, pratite sledeće:
- Otvorite Game paletu i povucite blok game over.
- Dodajte blok basic show string iz Basic palete za prikazivanje rezultata na ekranu.
9. Konačan izgled i pokretanje igre
Posle implementacije svih ovih koraka, vaša igra bi trebalo da funkcioniše prema zadatim pravilima. Na kraju, kliknite na Download dugme da biste preuzeli svoj projekat ili ga testirali u emulatoru.
Kod u Python-u:
igrac: game.LedSprite = None # Inicijalizacija sprite-a
def on_button_pressed_a():
global zivoti
zivoti += 1 # Dodaj jedan život
basic.show_number(zivoti) # Prikazivanje broja života
basic.pause(500) # Pauza da bi se osvežio ekran
input.on_button_pressed(Button.A, on_button_pressed_a)
def udar_u_ivicu():
global zivoti
igrac.if_on_edge_bounce() # Odskakanje od ivice
game.add_score(1) # Dodaj 1 poen
game.remove_life(1) # Oduzmi jedan život iz sistema
zivoti -= 1 # Oduzmi jedan život sa prikaza
basic.show_number(zivoti) # Prikazivanje broja života
game.start_countdown(30000) # Pokreni odbrojavanje na 30 sekundi
igrac = game.create_sprite(2, 2) # Kreiraj sprite na poziciji (2, 2)
game.set_life(zivoti) # Postavi broj života na 5 (ugrađeni broj života)
def on_forever():
igrac.move(1) # Pomeri sprite
if game.is_game_over(): # Ako je igra gotova
game.game_over() # Automatski završava igru i prikazuje "Game Over" i poene
if igrac.is_touching_edge(): # Ako sprite dodirne ivicu
udar_u_ivicu() # Pozovi funkciju za udar
basic.pause(500) # Pauza da bi se osvežio ekran
basic.forever(on_forever)
Primer 5: Proveravanje kontakta sprite-ova
Napravite igru u kojoj igrač (sprite) dobija poen svaki put kada dotakne protivnika (drugi sprite). Nakon dodira, protivnik nestaje.
- Ako sprite "igrač" dotakne sprite "protivnik", dodeljuje se 1 poen i protivnik se uklanja.
- Ovo se može koristiti u igrama gde se izbegavaju ili hvataju objekti.
Koraci za rešavanje zadatka:
- Kreirajte dva sprite-a: Jedan će predstavljati igrača, a drugi protivnika.
- Dodajte funkciju za kretanje igrača: Postavite kretanje sprite-a pomoću dugmadi A i B.
- Proverite kontakt: U glavnoj petlji proverite da li se igrač dotakao protivnika.
- Ažurirajte poene: Ako dođe do kontakta, dodajte poen i uklonite protivnika.
Objašnjenje:
Ovaj zadatak koristi funkcionalnosti za detekciju kontakta između sprite-ova i omogućava ažuriranje igre u realnom vremenu. Kada igrač dotakne protivnika, poen se dodaje, a protivnik se uklanja sa ekrana, simulirajući "hvatanje".
Kod u python-u(delimično rešenje)
enemy = game.create_sprite(4, 4) # Protivnik
def check_collision():
if player.is_touching(enemy):
game.add_score(1) # Dodaje poen ako igrač dodirne protivnika
enemy.delete() # Briše protivnika
basic.forever(check_collision)
Detaljna uputstva za kreiranje igre u MakeCode (Block Mod)
Pratite sledeće korake kako biste implementirali kod koristeći Block Mod u MakeCode editoru.
1. Kreirajte novi projekat
Otvorite MakeCode editor i započnite novi projekat. Kada otvorite editor, prebacite se na Blocks mod.
2. Kreirajte igrača (sprite)
Postavite glavni lik igre (igrača) na centar ekrana.
- Otvorite Sprites paletu.
- Povucite blok set mySprite to create sprite at (x, y) u radnu površinu.
- Postavite x = 2 i y = 2 (centar ekrana).
3. Kreirajte protivnika
Generišite protivnika na slučajnoj poziciji.
- Povucite blok set enemySprite to create sprite at (random 0 to 4, random 0 to 4).
4. Dodajte odbrojavanje
Postavite tajmer od 30 sekundi za igru.
- Otvorite Game paletu.
- Povucite blok start countdown (30000 ms) u radnu površinu.
5. Pomeranje igrača
Postavite kretanje igrača unapred i reakciju na ivice ekrana.
- Dodajte blok forever iz Basic palete.
- Unutar ovog bloka dodajte move mySprite by (1).
- Dodajte blok if on edge, bounce iz Sprites palete.
- Dodajte pauzu pause (500 ms) iz Basic palete.
6. Okretanje igrača pomoću dugmića
Omogućite igraču da se okreće pomoću dugmića A i B.
- Otvorite Input paletu i povucite blok on button A pressed.
- Dodajte blok turn mySprite right (45 degrees) iz Sprites palete.
- Ponovite isto za dugme B, ali postavite turn mySprite left (45 degrees).
7. Provera sudara
Dodajte uslov da ako igrač dotakne protivnika, dobije poen i generiše novog protivnika.
- Unutar forever petlje dodajte if mySprite is touching enemySprite.
- Unutar ovog uslova dodajte blok delete enemySprite.
- Dodajte change score by (1) iz Game palete.
- Pauzirajte igru sa pause (300 ms).
- Ponovo kreirajte protivnika sa set enemySprite to create sprite at (random 0 to 4, random 0 to 4).
8. Kraj igre
Ako odbrojavanje istekne, igra se završava.
- Dodajte blok if game is over iz Game palete.
- Unutar njega dodajte blok game over.
9. Pokretanje igre
Testirajte svoju igru u emulatoru ili preuzmite kôd na vaš Micro:bit uređaj.
igrac.turn(Direction.RIGHT, 45) # Okretanje igrača udesno za 45 stepeni
input.on_button_pressed(Button.A, on_button_pressed_a)
def createEnemy():
global xP, yP, protivnik
xP = randint(0, 4) # Nasumično postavljanje X pozicije protivnika
yP = randint(0, 4) # Nasumično postavljanje Y pozicije protivnika
protivnik = game.create_sprite(xP, yP) # Kreiranje protivnika na nasumičnoj poziciji
def on_button_pressed_b():
igrac.turn(Direction.LEFT, 45) # Okretanje igrača ulevo za 45 stepeni
input.on_button_pressed(Button.B, on_button_pressed_b)
def check_collision():
if igrac.is_touching(protivnik): # Provera da li igrač dodiruje protivnika
protivnik.delete() # Brisanje protivnika
game.add_score(1) # Dodavanje jednog poena
basic.pause(300) # Kratka pauza
createEnemy() # Stvaranje novog protivnika
protivnik: game.LedSprite = None # Inicijalizacija promenljive protivnik
igrac: game.LedSprite = None # Inicijalizacija promenljive igrac
yP = 0
xP = 0
game.start_countdown(30000) # Odbrojavanje od 30 sekundi
xP = 2
yP = 4
igrac = game.create_sprite(2, 2) # Kreiranje igrača na početnoj poziciji
protivnik = game.create_sprite(xP, yP) # Kreiranje prvog protivnika
def on_forever():
igrac.move(1) # Pomeri igrača napred
check_collision() # Proveri da li je igrač dotakao protivnika
igrac.if_on_edge_bounce() # Ako dođe do ivice, odbije se
if game.is_game_over(): # Ako je igra gotova
game.game_over() # Završava igru
basic.pause(500) # Pauza pre sledeće iteracije
basic.forever(on_forever) # Petlja koja se izvršava zauvek
|< Petlje-mikrobit