Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!

[es] :: Visual Basic 6 :: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!

Strane: 1 2 3

[ Pregleda: 10736 | Odgovora: 46 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.rcub.bg.ac.yu.



+2 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!24.05.2005. u 12:06 - pre 230 meseci
Citat:
negyxo: ...jel ti to ozbiljno? Ajd onda da te vidim sutra u 3 ispred ulice pa da se potucemo
Hehe.... šala mala, of course . U stvari poenta je bila da programeri igara predstavljaju vrlo usko specijalizovanu populaciju i da ih ostali programeri zato gledaju iskosa.

Inače, žao mi je što moram da vas obavestim da se selim pa ćete se još načekati do narednih koraka. Trudiću se da budem brz.
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

Mare_Sk8er
Marko Tosic
Majdanpek

Član broj: 57593
Poruke: 4
*.yu1.net.

ICQ: 267


Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!24.05.2005. u 14:48 - pre 230 meseci
Kada ce biti nastavka?!!
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!20.06.2005. u 18:59 - pre 229 meseci
Hi!
Nisam se bavio Game Developing, ali nakon sto sam dobio prvi komp i igrao prvu igricu (bese to 1989.) hteo sam da i ja napravim neku igricu.
Ali otisao sam na drugu stranu i sada sam DB tip programera.
Procito sam temu i hocu da ucestvujem.

Radio sam neke stvari oko reketa.
Planiram da post-ujem nakon sto |Dark Icarus| post-uje svoj
nastavak, da ne bih narusio strukturu tutorijala (Treba da ide sve po redu).

P.S.
D.I. pozuri
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.vdial.verat.net.



+2 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!23.06.2005. u 21:11 - pre 229 meseci
Rado bih požurio, ali nemam pristup internetu na svojoj novoj lokaciji (ni kablovski, ni telefon). Ovo kuckam sa drugog kompa. Sorry. Možda stignem sa fakulteta da uploadujem još pokoji korak.

Svim novim "članovima" pozdrav i obećanje da ću se potruditi u najskorijem roku...

@steewsc
Nije problem da postuješ o reketima, ako je neko "lako štivo" za početnike, mehanika igre je ionako bila u planu za sledeći korak. Znači, ništa o grafičkim procedurama, ali sve što je vezano za varijable reketa i njihovo ponašanje na ekranu može da prođe.

Čak i ohrabrujem ljude koji su već programirali Pong da i oni postuju ovde, nisam ja jedini koji ovde ima da se trudi (pogled ispod oka ka krckoorascicu)
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!23.06.2005. u 23:34 - pre 229 meseci
Citat:
Dark Icarus: ... (pogled ispod oka ka krckoorascicu)

lol :D
pokusacu da napisem nesto mada ja bas i nisam neko ko ume dobro da objasnjava (mozda nece biti bas jasno pocetnicima) :p
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!25.06.2005. u 11:39 - pre 229 meseci
API funkcija za primer koji sledi je GetAsyncKeyState

Public Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) As Integer

---------------------------------------------------
Funkcija u primenjenom obliku izgleda ovako:

If GetAsyncKeyState(vbKeyW) And &H8000 Then
r_reket.Top = r_reket.Top - 10
End If

U opstem obliku bi ovo izgledalo ovako:

If GetAsyncKeyState(KOD_ZA_NEKI_TASTER) And &H8000 Then
'Neka komanda
End If

Svaki taster na tastaturi ima svoj ASYNC kod.
Na primer 119 je kod za [w].
(Ovo mozete isprobati kada u nekom text-ualnom polju
drzite ALT i pritisnete na NUM delu tastature 119)

Dakle ako je taster [w] pritisnut funkcija ce vratiti vrednost
TRUE i izvrsice se "Neka komanda".


www.cicevac.com
†StEEwSc†
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!25.06.2005. u 12:26 - pre 229 meseci
Rekete sam obelezio na sledeci nacin:
l_racquet '- Left Racquet
r_racquet '- Right Racquet.

Trenutno bih da na njih gledamo kao na dva objekta,
koji imaju samo jednu jedninu osobinu (.Top)
ciju vrednost menjamo (povecavamo ili smanjujemo).

Vrednost menjamo pritiskom tastera na tastauri,
pa je potrebno pratiti dogadjaje na istoj.
Za to bih iskoristio Timer kontrolu, koju smo inace ubacili u formu
pod imenom GameClock, Proceduru ExecuteGameTick i modul (npr. mAPIFunc).

Da je u pitanju jedan objekat (Kao u DXBall-u) moglo bi drugacije,
ali za ovaj slucaj moramo da iskoristimo API funkciju za pracenje dogadjaja
na tastaturi.

===================Function======================
Code:

Public Declare Function GetAsyncKeyState Lib "user32" _
    (ByVal vKey As Long) As Integer

===================Function======================

(Ovaj kod se inace kopira u modul mAPIFunc)
(Modul se u projekat ubacuje tako sto kliknete desnim klikom
negde unutar prozora Project Explorer (CTRL+R) zatim Add->Module i kliknete na Module.
Nakon toga u Project Exploreru dobijete Module1 i onda mu promenite Name u mAPIFunc)

Funkcija je krajnje prosta!|
__________________________/

Definisana je kao Public iz tog razloga sto se nalazi
u mAPIFunc, a mi je koristimo u fMain.

Funkcija se zove GetAsyncKeyState i samo ime govori sta funkcija radi.

Svaki taster na tastaturi ima svoj Async CODE i kada ga pritisnemo
iz tastature se taj kod salje (kodiran/dekodiran) komp-u na dalju obradu,
a tom tasteru STATE dobija vrednost TRUE.
Kada mi podignemo prst sa njega njegovo STATE(eng.:State = Stanje)
dobija vrednost FALSE.

Posto svaka igra ima svoje upravljacke kontrole tako sam i
ja za ovaj primer postavio sledece:
=============Kontrole za pomeranje racqueta=================
1. Player: W (UP) ; S (DOWN)
2. Player: UpArrow (UP) ; DownArrow (DOWN)
=============Kontrole za pomeranje racqueta=================

E, GetAsyncKeyState API funkcija sluzi da ispita da li je stanje nasih tastera
TRUE ili FALSE (Da li su pritisnuti ili ne).

Pa sledi kod za Proceduru ExecuteGameTick (koja se izvrsava svakih 50 miliseconds)

'======================1. Deo koda=======================
Code:

    '\/-Oba reketa idu gore
    If GetAsyncKeyState(vbKeyW) And &H8000 Then
        If GetAsyncKeyState(vbKeyUp) And &H8000 Then
            l_racquet.Top = l_racquet.Top - 5 'levi reket ide gore
            r_racquet.Top = r_racquet.Top - 5 'desni reket ide gore
        End If
    End If

    '\/-Oba reketa idu dole
    If GetAsyncKeyState(vbKeyS) And &H8000 Then
        If GetAsyncKeyState(vbKeyDown) And &H8000 Then
            l_racquet.Top = l_racquet.Top + 5 'levi reket ide dole
            r_racquet.Top = r_racquet.Top + 5 'desni reket ide dole
        End If
    End If
  
'========================2. Deo koda====================

'======================== (PLayer 1) =====================

    '\/-Levi reket ide gore
    If GetAsyncKeyState(vbKeyW) And &H8000 Then
            l_racquet.Top = l_racquet.Top - 10
    End If

    '\/-Levi reket ide dole    
        If GetAsyncKeyState(vbKeyS) And &H8000 Then
            l_racquet.Top = l_racquet.Top + 10
    End If

'======================== (PLayer 2) =====================

     '\/-Desni reket ide gore   
    If GetAsyncKeyState(vbKeyUp) And &H8000 Then
            r_racquet.Top = r_racquet.Top - 10
    End If

     '\/-Desni reket ide dole      
    If GetAsyncKeyState(vbKeyDown) And &H8000 Then
            r_racquet.Top = r_racquet.Top + 10
    End If
'======================== End =====================

-U 1. delu koda imamo slucaj kada se istovremeno pritisnu
2 tastera i to:

W (Up za Player 1) i UpArrow (Up za Player 2)-Oba R idu GORE
&
S (Down za Player 1) i Down Arrow (Down za PLayer 2)-Oba R idu DOLE


-U 2. delu koda se nalaze naredbe za slucaj kada se pritisne
samo jedan taster.

Kao sto se da primetiti iz gornjeg koda reket ide:
GORE kada se njegovo svojsvto TOP smanjuje,
a DOLE kada se TOP povecava !!!

To je to !!!

www.cicevac.com
†StEEwSc†
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!26.06.2005. u 01:17 - pre 229 meseci
heh, bas sam ja sad hteo da okacim kod za pomeranje reketa :D (ali bez api-ja, necemo odmah advanced :p) ali mislim da je steewsc sve veoma dobro objasnio tako da nema potreba da jos i ja pisem :D

 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.med.bg.ac.yu.



+2 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!27.06.2005. u 13:49 - pre 229 meseci
Odlično, odlično, krenulo je, samo bih imao par smernica koje će kod učiniti čitljivijim.


a) Umesto da stalno pišete
Code:
If GetAsyncKeyState(vbKeyW) And &H8000 Then ...
, bolje je da napravite funkciju:
Code:
Public Function KeyPressed(iKey As Long) As Boolean
  KeyPressed = ((GetAsyncKeyState(iKey) And &H8000) = &H8000)
End Function
i onda samo pišete
Code:
If KeyPressed(vbKeyW)...

Naravno, preterano stekovanje procedura nije baš najpoželjnija stvar, ali na ovom nivou nam je cilj da pišemo čitljiv kod, a ne da ga optimizujemo do daske.


b) steewsc, nije mi jasno šta će ti ono što si obeležio kao "prvi deo koda" kada se proverava da li su obe dirke pritisnute. I ako se istovremeno pritisnu oba tastera, biće obrađeni jedan po jedan u "drugom delu koda". Predlažem da prvi deo izbrišete. Osim ako nemaš neki razlog zašto se reketi pomeraju za 50% brže kada se oba pomeraju u istom smeru (jer će ti se u tom slučaju izvršiti i prvi i drugi deo koda i svaki reket će ukupno preći 5 piksela u prvom delu koda i još 10 u drugom redu).



c) mislim da je krajnje vreme da naučimo ponešto novo i o konstantama. Umesto da pomerate Top za 5 ili 10 ili koju god vrednost, bolje je da u kod stavite:
Code:
Private Const C_RacquetSpeed As Single = 10 
' ovo treba ukucati odmah ispod Option Explicit naredbe

Sada u celom kodu gde god imamo npr.
Code:
l_racquet.Top = l_racquet.Top + 10

menjamo u
Code:
 l_racquet.Top = l_racquet.Top + C_RacquetSpeed

'Ajde da vidimo ko ima ideju zašto je to dobro.

VRLO BITNO!!! Primetite da sam konstantu imenovao sa C_ i onda ime konstante. Ovo je neki moj interni način imenovanja konstanti. Inače programeri konstante imenuju VELIKIM_SLOVIMA, ali meni je to uvek bilo nekako glupavo (čini mi se kao da se konstante deru na mene sa monitora). Uvek je neophodno imati NEKI način da se konstante razlikuju od varijabli, tako da ja koristim C_ImeKonstante.

(Ako neko ne zna teoriju iza konstanti... hm... haj'mo ovako, na brzinu: Konstanta je kao varijabla, samo što kada joj jednom zadaš vrednost, ona ne može da se promeni tokom programa.)



d) kad smo već kod imenovanja, preporučujem da rekete ne zovete prefiksima l_ i r_ jer se prefiks odvojen podvlakom pre imena varijable u programiranju koristi za oznaku tipa varijable ili nivoa na kojem je deklarisan. Npr g_Objekat je globalni objekat, m_Device je device definisan na nivou modula, b_Destroyed bi mogla biti boolean varijabla... Na ovu nomenklaturu ćete vrlo često nailaziti tako da je bolje da rekete nazovete drugačije.

Predlažem da ih preimenujete u RacquetLeft i RacquetRight.

To je to, sada moram da idem, a kad ću opet doći do civilizacije i izlaza na internet, ne zna se... u međuvremenu, srećno!

I pozdrav!
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 11:12 - pre 229 meseci
Evo me ponovo!!!

Sto se tice onog 1. dela koda potpuno si u pravu. Ispravio sam to
(Potpuno beskorisno i ometa rad)
E sad, u vezi konstante C_RacquetSpeed:
To je OK, ali sam ja mislio da umesto da se reketi krecu const brzinom postavimo
neko blago ubrzanje.

Potrebno je da definisemo varijabilu (Promenljivu) V_RacquetStep

Code:

Private V_RacquetStep As Long


Naravno ispod Option Explicit-a !!!

Zatim u kod za InitializeApplication() ubaciti:

Code:

V_RacquetStep = 1



U kod za ExecuteGameTick()

Code:

    If KeyPressed(vbKeyW) Then
        If RacquetLeft.Top > 20 Then
            V_RacquetStep = V_RacquetStep + 0.6
            RacquetLeft.Top = RacquetLeft.Top - Round(V_RacquetStep, 0)
        Else
            V_RacquetStep = 0
        End If
    End If
    
    If KeyPressed(vbKeyS) Then
        If RacquetLeft.Top < 300 Then
            V_RacquetStep = V_RacquetStep + 0.6
            RacquetLeft.Top = RacquetLeft.Top + Round(V_RacquetStep, 0)
        Else
            V_RacquetStep = 0
        End If
    End If

'=================================================
    
    If KeyPressed(vbKeyUp) Then
        If RacquetRight.Top > 20 Then
            V_RacquetStep = V_RacquetStep + 0.6
            RacquetRight.Top = RacquetRight.Top - Round(V_RacquetStep, 0)
        Else
            V_RacquetStep = 0
        End If
    End If
    
    If KeyPressed(vbKeyDown) Then
        If RacquetRight.Top < 300 Then
            V_RacquetStep = V_RacquetStep + 0.6
            RacquetRight.Top = RacquetRight.Top + Round(V_RacquetStep, 0)
        Else
            V_RacquetStep = 0
        End If
    End If


A zatim dodamo jos tri reda na kraju naseg koda:

Code:

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    V_RacquetStep = 0.1
End Sub



[Ovu poruku je menjao steewsc dana 30.06.2005. u 12:14 GMT+1]
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 11:15 - pre 229 meseci
Objasnjenje Koda:

Varijabila za razliku od konstante moze da menja svoju vrednost;

Pri samom startu igre V_RacquetStep dobija vrednost 1.
(Ovo se izvrsava unutar InitializeApplication())

Kada pritisnemo neki od kontrolnih tastera V_RacquetStep se poveca
za 0.6 :
Code:

'....
V_RacquetStep = V_RacquetStep + 0.6
RacquetLeft.Top = RacquetLeft.Top - Round(V_RacquetStep, 0)
'....
 

(Neznam zasto, ali kad stavim 0.5 reketi se ne pomeraju)

U sledecem redu se vidi da se vrsi zaokruzivanje na celebrojnu vrednost.
Tako da se postepeno reketi ubrzavaju.

A nakon toga sto pustimo neki kotrolni taster, V_RacquetStep
dobija vrednost 0.1 (A za to je zasluzan kod u dogadjaju KeyUp)

Code:

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    V_RacquetStep = 0.1
End Sub


Ovo sa ubrzanjem moze da se izbaci ako je nepotrebno.
===========================================================
-To je to sto se tice reketa i mislim da je za sada dovoljno.
©i@



[Ovu poruku je menjao steewsc dana 30.06.2005. u 12:18 GMT+1]

[Ovu poruku je menjao steewsc dana 30.06.2005. u 12:24 GMT+1]
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.bg.wifi.vline.verat.net.

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 11:24 - pre 229 meseci
Citat:
steewsc
(Neznam zasto, ali kad stavim 0.5 reketi se ne pomeraju)


Pogledaj kako radi Round funkcija
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 11:30 - pre 229 meseci
Ma OK,
ali V_RacquetStep se povecava svaki put za 0.5.
Tako da kada ima vrednost X.5 zaokruzio bi na X.
U prvom slucaju bi bilo 0, ali u sledecem bi vec bilo 1,
pa zatim 2 itd. Ali nece, evo bas sad probam.
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.bg.wifi.vline.verat.net.

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 12:01 - pre 229 meseci
Obavezno stivo na temu zaokruzivanja
How To Implement Custom Rounding Procedures

[Ovu poruku je menjao mladenovicz dana 30.06.2005. u 13:04 GMT+1]
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!30.06.2005. u 12:22 - pre 229 meseci
problem ti je ovde:
Code:

Private V_RacquetStep As Long

Long tip moze da drzi veoma velike brojeve ali NE i float-point (aka decimalne) brojeve a 0.5 je decimalni broj ;)
umesto Long koristi Single ili Double (oba tipa su za decimalne brojeve samo sto Double ima veci "kapacitet", za ovu nasu igru ja bih koristio Single)
dakle:
Code:

Private V_RacquetStep As Single

ce resiti problem :D

/edit
tek sad procitah ceo kod (izvini, procitao sam samo Zeljkov quote) ne znam samo iz kog razloga koristis Round? Top property je Single tipa i ako deklarises V_RecquetStep kao Single zasto bi zaoukruzivao?

[Ovu poruku je menjao krckoorascic dana 30.06.2005. u 13:32 GMT+1]
 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.med.bg.ac.yu.



+2 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!04.07.2005. u 08:43 - pre 229 meseci
Pozdravljam eksperimentisanje sa varijablama, i rad sa floating point-om. Ali, koliko vidim ovaj postojeći kod je previše komplikovan. Jednostavnost, ljudi, jednostavnost! Plus, kada se desi KeyUp event BILO KOJE dirke to će uzrokovati da svi reketi momentalno uspore na nulu. Ne vidim zašto koristiš KeyUp kada imamo KeyPressed proceduru. Ovo je sve, složićete se, neprihvatljivo za jedan Pong. Ako hoćete da imate ubrzanje reketa, to se radi na sledeći način:

Umesto konstante za brzinu reketa uvedite konstantu za maksimalnu brzinu i još jednu za ubrzanje reketa. Zatim brzinu reketa odvojte u jednu varijablu za svaki reket.

Zatim radite sledeće u svakom ciklusu:

AKO je pritisnuta dirka da reket ide naviše, brzina reketa = brzina reketa- ubrzanje
AKO je pritisnuta dirka da reket ide naniže, brzina = brzina + ubrzanje.
AKO nije pritisnute ni jedna dirka za dati reket, brzina = brzina - ubrzanje * Sgn(brzina) ' ako ne razumete, samo pogledajte help za Sgn funkciju
AKO je brzina veća od max brzine, brzina = max. brzina
AKO je brzina manja od -max brzine, brzina = -max. brzina
AKO je reket udario u gornji ili donji zid, brzina = 0 (hint: prostim manevrom u ovoj liniji možete da uradite algoritam za odbijanje reketa od zidova ako ide velikom brzinom!)

Dodao bih tu kasnije još par korekcija da nam reket ne bi podrhtavao u mestu usled trećeg AKO, ali o tom potom. Mogao sam lakše ovo da vam iskucam kao kod, ali namerno nisam - ovo nije tutorijal "kako koristiti Ctrl-C i Ctrl-V".

Ovako se postižu sve kalkulacije ubrzanja u jednostavnom "min speed-max speed-accelleration" modelu. Postoje i napredniji modeli (frikcioni model, Runge-Kutta integracija itd.) ali oni se koriste za simulaciju realistične fizike koja za naš Pong nije primenjiva (bar ne dok je običan Pong ) tako da o tome nećemo sada.
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

Mydoom.f

Član broj: 49237
Poruke: 42
*.smin.sezampro.yu.



Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!10.07.2005. u 20:35 - pre 228 meseci
Ljudi, jel ce biti nastavka???!!!
"My Guitars are my umbilical cord. They're directly wired into my head"-Kirk Hammett
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.dialup.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!18.07.2005. u 19:59 - pre 228 meseci
Ja se izvinjavam sto kasnim!!!
(Procitao sam round tut. od MS-a, bio na nekom kampovanju balblablabl NIJE BITNO)

Nakon sto sam procitao sta je D.I. napisao, primenio i ispravio sam svoj kod tako da sada stvari stoje ovako:

Svaki reket ima svoju brzinu.
Maximalna brzina i ubrzanje je KONSTANTNO i isto za oba reketa.

Brzine: V_lRacquetSpeed, V_rRacquetSpeed as Single
Ubrzanje: Const V_RacquetAcc As Single = 0.5
Max. Brzina: Const V_RacquetMaxSpeed As Single = 5
(Sve ovo definisemo u Option Explicit kao Private)

Ako postavimo u INICIJALIZACIJI sledece:

Code:

V_lRacquetSpeed=0
V_rRacquetSpeed=0


I sada kada pritisnemo neki od kontrolnih tastera (npr. vbKeyW) desava se sledece:

Proveri se da li je V_lRacquetSpeed >= V_RacquetMaxSpeed, sto nije tacno u
prvom slucaju
i onda se V_lRacquetSpeed poveca za V_RacquetAcc (odnosno za 0.5).
Nakon toga se promeni vrednost:
RacquetLeft.Top-a
u
RacquetLeft.Top - V_lRacquetSpeed.
U sledecem ciklusu V_lRacquetSpeed ima vrednost 0.5, ali i dalje je manja od V_RacquetMaxSpeed.
I tako prodju 10 ciklusa i V_lRacquetSpeed bude jednako sa V_RacquetMaxSpeed, a onda, da se dalje
ne bi povecavala, V_lRacquetSpeed dobija vrednost od V_RacquetMaxSpeed i tako sve dok se ne pusti vbKeyW.
Kada se pusti vbKeyW V_lRacquetSpeed ponovo dobija vrednost 0.

--------------------------------------------------------------------------------

Ovo isto se primeni i za slucaj kada se pritisne vbKeyS, ali uz promenu reda:
RacquetLeft.Top - V_lRacquetSpeed
u
RacquetLeft.Top + V_lRacquetSpeed (Da bi isao na dole!!!)

I isto tako isto i za drugi (desni) reket, ali uz koriscenje:
V_rRacquetSpeed (umesto V_lRacquetSpeed).
--------------------------------------------------------------------------------
I to bi bilo to sto se tice reketa od mene. Sledeca stvar bi po meni bila loptica.

www.cicevac.com
†StEEwSc†
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.dialup.neobee.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!18.07.2005. u 20:00 - pre 228 meseci
Za lopticu sam iskoristio jos jedan shape sa imenom OBall.
OBall.Height=17
i
OBall.Width=17
---------------------------------------------------------
Loptica je objekat koji mora NON-STOP da se krece.
Za sada cemo se zadovoljiti sa CIK-CAK kretanjem loptice.

Ponovo koristimo GameClock, a ovaj put za kretanje OBall-a.
(Molio bih D.I.-a ili Krcka da me isprave, jer ce ako ovako nastavim
procedura MainLoop ostati prazna !!!)
Ali dok ne dodje do ispravke †RADICEMO KAKO JA KAZEM, ILI VAS NECE BITI!!!†

Svejedno, jos jednom GameClock:

Da bi se loptica kretala u CIK-CAK putanji potrebno je NON-STOP smanjivati
(do gornje granice) .Top ili povecavati (do donje granice) .Top, povecavati .Left (do desne granice) ili smanjivati .Left (do leve granice).

Pocnimo od toga da se npr. OBall nalazi negde na sredini forme.
Moje koordinate za OBall su (174,293).
Prvo je npr. pokrecemo na dole-desno.
Potrebno je istovremeno povecavati .Top i .Left OBall-a i on ce se kretati
DOLE-DESNO. Povecavacemo ih za konstantnu vrednost(za sada).
Definisemo PROMENLjIVE u Option Explicit-u
Code:

Private  BallXMove,BallYMove As Single 
Private  Racquet_Height As Integer
Private Score1 As Boolean


U inicijalizaciji:
Code:

BallYMove = 2
BallXMove = 2
Score = False


Znaci pomeranje na DOLE-DESNO:
Code:

 OBall.Left = OBall.Left + BallXMove
 OBall.Top = OBall.Top + BallYMove

Da se ne bi OBall kretao u nedogled, DOLE-DESNO, potrebno je postaviti prvo DONjU,a zatim i DESNU granicu kretanja. Svaka granica je jedan broj i potrebno je nakon povecanja(smanjenja) vrednosti .Left i .Top proveriti da li OBall nije presao preko granice.

Kada OBall.Top bude vece (ili jednako) od DONjE granice menjamo BallYMove:
Code:

 BallYMove=-BallYMove


Slicnu proveru vrsimo za slucaj kada OBall.Top bude manje ili jednako od GORNjE
granice i tada takodje koristimo BallYMove=-BallYMove.

A dalje sledi provera da li je OBall presao desnu granicu i ako nije opet nastavljamo sa:

Code:

 OBall.Left = OBall.Left + BallXMove
 OBall.Top = OBall.Top + BallYMove


Ako jeste presao desnu granicu vrsimo proveru da li se u blizini nasao desni reket.
Code:

        For Racquet_Height = 0 To 41
            If OBall.Top = Round(RacquetRight.Top, 0) + Racquet_Height Then
                GoTo Nastavi_Dalje
            End If
        Next Racquet_Height
        Score1 = True
        GoTo Restartuj


Zasto je bas zadnja vrednost koju promenljiva Racquet_Height uzima 41.
Pa ako spojite u jedno, onda se dobije:
Racquet_Height = 41, odnosno RacquetRight.Height je 41.

Pa da vidimo sta se ovde desava:
(Valjda zate kako radi For Next petlja?!)

OBall je presao desnu granicu i ako se njegov .Top nasao negde od
RacquetRight.Top do RacquetRight.Top + Racquet_Height onda se igra NASTAVLjA DALjE,ali uz promenu:
Code:

BallXMove = -BallXMove

sada se OBall krece "gore"- LEVO (Drugi smer!!!)
U slucaju da se nije nasao negde od RacquetRight.Top do
RacquetRight.Top + Racquet_Height 1. igrac je dobio poen, odnosno
po izlasku iz For...Next petlje Score1 postaje TRUE, sto se kasnije koristi
radi povecanja broja poen 1. igraca. Nakon ovoga izvrsava se deo koda koji
sve vraca na pocetak (SEM BROJA POENA ).

!!! NE ZELIM DA PISEM KOD ZA DRUGI SLUCAJ (ZA LEVI REKET), ALI GA ZATO VI NAPISITE
ANALOGNO OVOME !!!

={©IÂ}=















[Ovu poruku je menjao steewsc dana 18.07.2005. u 22:57 GMT+1]
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

steewsc
Trajanovic Stevica
Cicevac Town

Član broj: 10379
Poruke: 237
*.crnagora.net.



+5 Profil

icon Re: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!14.08.2005. u 20:11 - pre 227 meseci
Ej ljudi trenutno sam na moru u CG i lepo mi je . Dok sam bio kuci elitesecurity.org mi nije radio i zato cim dodjem kuci ide se dalje. Ajd ©i@
www.cicevac.com
†StEEwSc†
 
Odgovor na temu

[es] :: Visual Basic 6 :: Vectorball - Tutorial projekat za pravljenje igara u VBu - svi mogu da doprinesu!

Strane: 1 2 3

[ Pregleda: 10736 | Odgovora: 46 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.