Kviz VB6 - problem

3

Kviz VB6 - problem

offline
  • Pridružio: 28 Jun 2004
  • Poruke: 990
  • Gde živiš: Kucura

Sto na pm? Ako nije problem raspravite ovde... mozda neko i nauci nesto...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • drejk 
  • Ugledni građanin
  • Pridružio: 31 Mar 2005
  • Poruke: 448
  • Gde živiš: Novi Beograd

Ok, vracamo se ovde Smile mislio sam da malo davimo ljude, al vracamo... evo malo update-a sta se desava

problem sa sum/function not defined, smo resili, u stvari problem nije ni postojao, moguce da je momak nesto cackao po source-u...

- onda je sl problem bio na tapetu

"Ponovo sam probao i sad radi normlno...
E, sad imam drugi problem? Ako imam 20 pitanja u kodu, kako da namestim da se posle 5 pitanja pokaze broj bodova i da je to kraj igre.
Unapred hvala."

- resen je dodavanjem public promenljive koja se uvecava posle svakog pritisnutog buttona za sl. pitanje


Public broj As Integer

i u on click event stavljeno

broj = broj + 1


i na kraju u form_load stavljeno

If broj = 5 Then   MsgBox "Kraj kviza, hvala sto ste igrali"   Unload Form1   End   End If


brainstolen, nastavi sa postovanjem ovde,

voleo bih da neko da i drugi nacin (jednostavniji, citljiviji, i u svemu pametniji), jer sam ja isao linijem manjeg otpora Smile i vrlo verovatno da postoji mnogo elegantnijih resenja (kako ne bi brain-a lose edukovao)

Poz

Drejk



offline
  • Pridružio: 28 Jun 2004
  • Poruke: 990
  • Gde živiš: Kucura

Hmm.. Pogledao sam source, ali samo preko notepada, posto VB ne mogu instalirati na ovom kompu na kojem sam trenutno prinudjen da radim Smile

1. savet:
U form load eventu, jedan deo bi izmeno ovako:
Dim pitanje(0 To 2, 0 To 4) As String pitanje(0, 0) = "Koji je nas najtrofejniji fudbalski klub?" pitanje(0, 1) = "Crvena zvezda" pitanje(0, 2) = "Partizan" pitanje(0, 3) = "Obilic" pitanje(0, 4) = "1" 'ovde se cuva index tacnog odgovora (u ovom slucaju je 1 i to je zvezda)

Tako se uproscuje realizacija ostalog dela programa i ovaj postupak treba primeniti na svako pitanje.

2. savet:
Ovaj deo bih prebacio u funkciju i po potrebi pozvao:

x = RandomPitanje() Form1.lblPitanje.Caption = pitanje(x, 0) Form1.Option1.Caption = pitanje(x, 1) Form1.Option2.Caption = pitanje(x, 2) Form1.Option3.Caption = pitanje(x, 3) Form1.Frame1.Caption = "Pitanje broj " & x + 1


3. savet:
Private Sub cmdSledece_Click() bih sada odradio drugacije, tako da se ne mora za svako pitanje pisati posebno jedan red koda. Ovako:

for i = 0 to 2 'ovo 2 je broj pitanja + 1. U form_load eventu je definisano. if Frame1.Caption = pitanje(i, 0) and Form1.Option1(pitanje(i, 4)).Value = True Then tacno = tacno + 1 next i

Upss.. da Smile Ovde se jos mora prepraviti da se svaka od opcija (znaci Option1, Option2 i Option3) zovu Option1, ali da imaju razlicite indexe.
Index je broj koji se nalazi Form1.Option1( -- Ovde -- ). Takodje index elementa se moze procitati u Properties prozoru.

Dopuna: 18 Jan 2009 22:53

Jos da dodam sta sam zaboravio:

- U cmdSledece_Click eventu na kraju ne treba pozivati form_load event, vec funkciju iz saveta 2.

- Dim pitanje(0 To 2, 0 To 3) As String sada treba postaviti ispod Public tacno As Integer.

Nadam se da ce raditi posto nisam proveravao...

offline
  • drejk 
  • Ugledni građanin
  • Pridružio: 31 Mar 2005
  • Poruke: 448
  • Gde živiš: Novi Beograd

Odlicna logika, svaka cast..

saveti su na mestu.

brain, nadam se da ces da podelis source na kraju sa nama Smile

kad ga zavrsis, licnes i picnes (mora to malo i vizuelno da lici na nesto) Smile

offline
  • Pridružio: 16 Jan 2009
  • Poruke: 23

Ne kapiram kako da odradim drugi savet, ni kako te indexe da postavim...

offline
  • Pridružio: 28 Jun 2004
  • Poruke: 990
  • Gde živiš: Kucura

- Evo kako napraviti funkciju:

Private Function ime_funkcije()      'kod funkcije End Function

Tu stavis ono iz saveta 2, samo sto treba prepraviti kod zbog indexa na ovako:


Private Function ime_funkcije() x = RandomPitanje() Form1.lblPitanje.Caption = pitanje(x, 0) Form1.Option1(1).Caption = pitanje(x, 1) Form1.Option1(2).Caption = pitanje(x, 2) Form1.Option1(3).Caption = pitanje(x, 3) Form1.Frame1.Caption = "Pitanje broj " & x + 1 End Function

- Indexe za Option1 uradi tako sto ces kliknuti na Option1 kontrolu, a zatim u Properties prozoru u polje index uneti 1 (u nasem slucaju ide 1 inace za pocetak indexa se koristi 0). Onda ime kontrole Option2 promeni u Option1 i index promeni u 2, a za Option3 isto tako u Option1 i index 3.


Evo i gotovog projekta sa izmenama:
https://www.mycity.rs/must-login.png

offline
  • Pridružio: 16 Jan 2009
  • Poruke: 23

Public tacno As Integer Dim pitanje(0 To 2, 0 To 4) As String Private Sub cmdSledece_Click() For i = 0 To 2     If Form1.lblPitanje.Caption = pitanje(i, 0) And Form1.Option1(pitanje(i, 4)).Value = True Then tacno = tacno + 1 Next i MsgBox "Tacnih odgovora " & tacno Call ime_funkcije End Sub Private Sub Form_Load() tacno = 0 pitanje(0, 0) = "Koji je nas najtrofejniji fudbalski klub?" pitanje(0, 1) = "Crvena zvezda" pitanje(0, 2) = "Partizan" pitanje(0, 3) = "Obilic" pitanje(0, 4) = "1" pitanje(1, 0) = "Sta je brze ili zec?" pitanje(1, 1) = "Zec" pitanje(1, 2) = "Ili" pitanje(1, 3) = "Nista od svega" pitanje(1, 4) = "3" pitanje(2, 0) = "Koje od navedenih boja nije osnovna?" pitanje(2, 1) = "Plava" pitanje(2, 2) = "Bela" pitanje(2, 3) = "Zuta" pitanje(2, 4) = "2" Call ime_funkcije End Sub Function RandomPitanje() As Integer Randomize RandomPitanje = Int(1 + 3 * Rnd) End Function Private Function ime_funkcije() x = RandomPitanje() Form1.lblPitanje.Caption = pitanje(x, 0) Form1.Option1(1).Caption = pitanje(x, 1) Form1.Option1(2).Caption = pitanje(x, 2) Form1.Option1(3).Caption = pitanje(x, 3) Form1.Frame1.Caption = "Pitanje broj " & x + 1 End Function Javlja mi se greska Run time erorr 9 - Subscript out of range

offline
  • drejk 
  • Ugledni građanin
  • Pridružio: 31 Mar 2005
  • Poruke: 448
  • Gde živiš: Novi Beograd

Problem sa clanom niza, izleteo si van opsega... samo ne vidim gde?

offline
  • Pridružio: 16 Jan 2009
  • Poruke: 23

Kad pokrenem program pojavi se ta poruka gore, i pozuti Private Function ime_funkcije() ....

offline
  • drejk 
  • Ugledni građanin
  • Pridružio: 31 Mar 2005
  • Poruke: 448
  • Gde živiš: Novi Beograd

rnd ti vraca vrednost od 1-3

a niz pitanje ti je definisan od 0 do 2...


poz

drejk

Ko je trenutno na forumu
 

Ukupno su 773 korisnika na forumu :: 3 registrovanih, 0 sakrivenih i 770 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: darkojbn, Fog of War, Koridor