20.10. Loptica - skočica: igrica
Completion requirements
Zadatak: Napraviti igricu u kojoj se loptica odbija od reket na dnu, a ako loptica "ispadne" mimo reket, onda je igrica gotova.
Potrebna vam je jedna Forma (Form1), pictureBox ili panel (racket) u nekoj boji koji će izigravati reket, boks sa slikom loptice (ball), tajmer za to da se za svaki tik menja nešto u igrici. Dodajte način da prikažete broj bodova i način za izlaz iz igrice.

Mala pomoć sa detaljima:
- Property - Anchor se koristi ako želite da nešto ostake "ankerisano": Da bi reket bio stalno na dnu forme, bez obzira na promenu dimenzija, ovu osobinu izmeniti tako da je odabrana opcija Bottom... Ili, prikaz bodova može da se postavi da mu je osobina Anchor postavljena na Top, Right ... (nema potrebe to raditi programski).
- promenljive kojima se određuje korak i smer pomeranja u x i y pravcu, kao i poene mogu da se postave kao svojstva forme - navedite ih pored konstruktora i postavite im početne vrednosti,
int poeni, smerX = 1, smerY = 1, korakX = 10, korakY = 15; - Kroz Property postaviti da je tajmer uključen (Enabled:
True) - Dvoklikom na tajmer kreirati događaj - šta se dešava za svaki tik tajmera - i tu raditi sve ostalo:
- pozicija reketa da zavisi od pozicije kursora miša:
reket.Left = Cursor.Position.X - this.Left - reket.Width/2 - pomeranje u pravcu X ose da zavisi od koraka i smera:
lopta.Left += korakX * smerX; - ako lopta dođe do ivice forme, treba da promeni smer kretanja. Na primer, ako se uzme u obzir x pravac, ako dođe do leve ili desne ivice forme, smer kretanja treba promeniti:
if (lopta.Left < 0 || lopta.Right > this.Width) smerX *= (-1); - i pomeranje u pravcu Y ose uraditi na sličan način, kao i odbijanje o gornju ivicu forme, ALI ako dođe do donje ivice forme može da se postai i da je igra gotova - ili samo da se odbije - vaš izbor
- odbijanje lopte o reket se može raditi korišćenjem metode IntersectWidth - ako granice lopte dođu u kontakt sa granicama reketa tada treba da se
- lopta odbije
- skupljaju bodovi
- eventualno ubrza kretanje (na primer da se na svakih 5 poena brzina kretanja ubrza za 1)
if (lopta.Bounds.IntersectsWith(reket.Bounds))
{
smerY = -1;
poeni++;
lblPoeni.Text = poeni.ToString();
if (poeni%5==0)
{
korakX++;
korakY++;
}
}
- pozicija reketa da zavisi od pozicije kursora miša:
Malo drugačije rešenje iz prethodne školske godine:
Pogledajte kako izgleda programski kod sa časa (23.10.2024)
namespace ping_pong_game
{
public partial class Form3 : Form
{
int korakX = 6; // koliko se pomera u levo ili u desno na svaki tik tajmera
int korakY = 6; // koliko ide na dole na svaki tik tajmera
int smerX = 1, smerY = 1;
int poeni;
public Form3()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
loptica.Left += (korakX * smerX);
loptica.Top += (korakY * smerY);
if (loptica.Bounds.IntersectsWith(reket.Bounds))
{
smerY = -1;
poeni++;
lblPoeni.Text = poeni.ToString();
}
if (loptica.Bottom >= this.Bottom)
{ // ako loptica "ispadne"
timer1.Enabled = false;
DialogResult rezultat = MessageBox.Show("izgubljena partija, hoćete li ponovo", "", MessageBoxButtons.RetryCancel);
if (rezultat == DialogResult.Retry)
{
poeni = 0;
timer1.Enabled = true;
loptica.Left = 15;
loptica.Top = 15;
}
else
{
this.Close();
}
}
reket.Left = Cursor.Position.X;
if (loptica.Right >= this.Width)
{
smerX = -1;
}
if (loptica.Top <= 0)
{
smerY = 1;
}
if (loptica.Left <= 0)
{
smerX = 1;
}
}
private void btnUbrzaj_Click(object sender, EventArgs e)
{
korakX++;
korakY++;
}
private void btnUspori_Click(object sender, EventArgs e)
{
korakY--;
korakX--;
}
}
}
Last modified: Thursday, 23 October 2025, 6:35 PM