Na početku poglavlja je postavljen link kojim možete da preuzmete knjigu (na našem jeziku) u kojoj se nalazi dobar deo lekcija iz Programiranja koje ćete imati ove godine. U nastavku je navedeno sa kojih strana treba da pročitate i šta:


Da bi ponovili gradivo, u sledećem video snimku je ilustrovano ono što smo dosad radili, i par novih stvari (video snimak je sniman pretprošle školske godine)

Sve dovde je ponavljanje i utvrđivanje gradiva KOJE JE TREBALO DA RADIMO NA POČETKU BLOKA ČASOVA. Preporuka je da učenici prvo ponove gradivo (prođu sav materijal u prvom delu lekcije) i prođu materijale sa svih predloženih linkova pre nego što produže dalje na novo gradivo i igricu koja je rađena na času !


Treći deo - rađeno u učionici na času, 28.10, bez Internet konekcije

Uvodimo Timer

Prvo treba da ponovimo:

Novo gradivo, gde je detaljnije objašnjeno ono što smo počeli da radimo:


Komponenta: Timer

Timer – Ova komponenta predstavlja sat i jedna je od nevizuelnih komponenti (ne vidi se za vreme izvršavanja aplikacije). Koristi se za to da se u zadatim vremenskim intervalima aktivira neki događaj. Komponenta Timer izvršava periodično deo programskog koda, bez obzira na stanje programa.

Timer – klasa koja se koristi kada u određenim intervalima ponavljamo akciju

Šta koristimo:

.Interval

.Enabled

Tick – događaj koji pokreće neku isprogramiranu akciju

Da bi timer bio aktivan podesimo osobinu Enabled na True a osobinu Interval na neki ceo broj milisekundi (npr 1000). Povećanjem ili smanjenjem vrednosti za Interval usporavaćemo ili ubrzavati pojavljivanje izvršavanja isprogramirane akcije tj. ova osobina određuje takt časovnika tj. vremenski interval. Nakon svakog intervala pojavljuje se jedan otkucaj tj. Tick događaj za koji ćemo vezati našu akciju. Preporučivo je da se podesi naziv metode koja će se izvršavati na svaki događaj Tick na neko ime koje ima smisla  (npr. casovnik_Tick)

Primer jednog jednostavnog zadatka sa upotrebom tajmera možete pogledati na :


Vežba, - još jedna igrica

U nastavku je tekst kojim se opisuje kreiranje igrice, korak po korak.

Kreiramo igricu sa sledećim parametrima:

  • glavni karakter na formi se kreće i odbija o zidove forme

Jedan od načina na koji se to može izvesti:

  • Prvo se kreira novi projekat - Windows Forms ---
  • Na Internetu potražimo sličicu koja će biti naš "glavni karakter" ()
    • smanjiti sličicu da je i širina i visina manje od 100 piksela ... radi uštede memorijskog prostora (Paint3D na primer)
    • predlog je da se koristi neki png ili animirani gif (opciono sa transparentnom pozadinom)
  • Na formu se postavlja PictureBox. Podrazumevani naziv je pictureBox1, i u njega postavljamo sličicu, sa modom za Stretch image - jer je slika drugačijih dimenzija

Na formu postavljamo komponentu Timer:  a prvi postavljeni ima podrazumevano ime timer1. Cilj je da se na tik-tak tajmera, na svaki njegov tik, naš  box sa slikom pomeri malo na dole i malo na desno. To se radi tako što se za tajmerovo ponašanje postavi da je Enabled=true (ili u Propertijima ili u događaju Form1_Load), i interval da je 200 (misli se na milisekunde za tajmer), a u događajima tajmera postoji Tick: dvoklikom na polje pored (ili dvoklikom na tajmer) kreiramo metodu koja se izvršava na svako tik tajmera (timer1_Tick). U toj metodi mi treba da pomeramo naš pictureBox1. Programski kod je dat u nastavku:

private void timer1_Tick(object sender, EventArgs e)
 {
pictureBox1.Top += 10; // na svaki Tik tajmera pomeriće se cela slika 10 tačkica u levo
if (pictureBox1.Bottom > this.Height) // ako je donji deo slike 'prešišao' dno ekrana
                pictureBox1.Top = 0; // slika se postavlja da je njen gornji deo na vrhu ekrana

pictureBox1.Left += 10; // na svaki Tik tajmera se ujedno i cela slika pomera 10 tačkica na dole
if (pictureBox1.Left > (this.Width-pictureBox1.Width)) // ako je slika stigla do desne ivice ekrana
pictureBox1.Left = 0; // pomeri je na po;etak forme sa leve strane
}

  • Da bismo imali složenije proračune i pravili uslove u kojim se određuje da li je slika stigl ado neke od ivica ekrana pa i kako da se odbije, trebali bi da postavimo složenije uslove u timer1_Tick metodu. Da se ne bi zbunjivali, a i da bi imali elegantnije rešenje, ceo programski kod koji se odnosi na kretanje smestićemo u posebnu metodu koju ćemo nazvati pomeri()  a onda ćemo tu metodu pozivati za svaki Tik tajmera timer1. 
void pomeri()
 {
pictureBox1.Top += 10;
if (pictureBox1.Bottom > this.Height)
                pictureBox1.Top = 0;

pictureBox1.Left += 10;
if (pictureBox1.Left > (this.Width-pictureBox1.Width))
pictureBox1.Left = 0;
}

private void timer1_Tick(object sender, EventArgs e)
 {
pomeri();
}
  • Ne zaboravite da pokrenete tajmer! - ili u Property od timer1 postavite Enabled da je true, ili dvoklikom na pozadinu forme ( ili na gornju plavu liniju) kreirajte Form1_Load i unutra postavite sledeći programski kod
timer1.Enabled = true;
  • Sada bi trebalo da naša "igrica" radi - imamo samo kretanje dijagonalno na dole ....
    Što se smera kretanja tiče, na našoj formi postavljamo parametar smerX, smerY, koji su tipa int (može i pre konstruktora, samo da je van metoda a u istoj klasi):
    public partial class Form1 : Form
        {
            int smerX=1; // može ostati private, ne mora ni da je public ni static!
            int smerY=1;

  • Da biste imalo "odbijanje" o zidove forme, jedan od načina (ali ne i jedini) je da uračunamo i promenljive kojoma se određuje smer kretanja:
void pomeri()
  {
   pictureBox1.Left += (10 * smerX); /* vi ovde možete staviti neki drugi broj, ili preuzeti broj iz tekstbox-a u koji je korisnik uneo željenu brzinu */
   pictureBox1.Top += (10 * smerY); /* isto važi i za ovo */
    if ((pictureBox1.Right > this.Width) || (pictureBox1.Left < 0))
smerX *= (-1);
if ((pictureBox1.Bottom > this.Height) || (pictureBox1.Top < 0))
smerY *= (-1);
}

Komplikacija koju smo uveli je da se menja smer kretanja - ako je na primer smerX=1 tada se pomera 10*1=10 tačkica za svaki timer1_Tick i to je u desno. Ako je sličica prešla granicu ekrana, koliki god da je ekran, smerX se množi sa -1. U slučaju da se sličica sudari sa desnom ivicom ekrana, do koje je išla u pozitivnom smeru, tada će se smerX postaviti na -1, pa će dalje pomeranje biti za 10*(-1)=-10 tačkica, tj, sličica se nadalje "pomera" u levo.

  • Dugme za završetak igre se radi tako što se postavi negde na formu jedno dugme (Button)  i u metodi za klik na dugme samo se zatvori forma. Metoda koja postoji je Close() i može se samo navesti, mada može i da se naglasi da se misli da se zatvori forma u kojoj se nalazite:
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}

ili  

private void button1_Click(object sender, EventArgs e)
{
 Close();
}

Pogledajte sada kako naša "igrica" radi

Pokušajte da sami kreirate SLIČNU igricu.

Zatim izmenite nešto (na primer da JE SLIKA DRUGAČIJA)

Za domaći zadatak je planirano da učenici prave svoju jedinstvenu igricu.

Dodatni detalji će biti navedeni u samom tekstu domaćeg zadatka koji sledi nakom ove lekcije.

(ovo je domaći zadatak za učenike 3-1, u Kuli)


Last modified: Wednesday, 6 March 2024, 10:22 AM