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

Pomoć oko kviza

[es] :: Pascal / Delphi / Kylix :: Pomoć oko kviza

[ Pregleda: 2426 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

elzike7

Član broj: 329211
Poruke: 4



Profil

icon Pomoć oko kviza16.05.2015. u 18:04 - pre 107 meseci
Programiram neku vrstu kviza i zapeo sam kod MasterMind-a (tj. Skočka).
Prikazuje koliko je boja pogođeno i na pravom su mestu, ali nikako da se smislim kako da prikazuje koliko je boja pogođeno, ali su na pogrešnom mestu.

Code:
DA := 0;
if sh0.Brush.Color = StringToColor(niz[0]) then DA := DA + 1;
if sh1.Brush.Color = StringToColor(niz[1]) then DA := DA + 1;
if sh2.Brush.Color = StringToColor(niz[2]) then DA := DA + 1;
if sh3.Brush.Color = StringToColor(niz[3]) then DA := DA + 1;
eDA.Text := IntToStr(DA);


Za sada toliko. Ukoliko zapnem negde drugde, pitaću ovde.
Prikačeni fajlovi
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pomoć oko kviza16.05.2015. u 22:08 - pre 107 meseci
Mozes li malo bolje objasniti, ne razumem ovaj tvoj kod i sta radi a sta ne radi.
 
Odgovor na temu

elzike7

Član broj: 329211
Poruke: 4



Profil

icon Re: Pomoć oko kviza17.05.2015. u 07:14 - pre 107 meseci
Ajmo ovako...

Code:
DA := 0;
if sh0.Brush.Color = StringToColor(niz[0]) then DA := DA + 1;
if sh1.Brush.Color = StringToColor(niz[1]) then DA := DA + 1;
if sh2.Brush.Color = StringToColor(niz[2]) then DA := DA + 1;
if sh3.Brush.Color = StringToColor(niz[3]) then DA := DA + 1;
eDA.Text := IntToStr(DA);


shx - TShape
eDA - TEditBox
eNE - TEditBox
niz[x] - niz u kome se pamti dobitna kombinacija
DA - promenljiva u kojoj se pamti koliko je boja pogođeno i na pravom su mestu
NE - promenljiva u kojoj se pamti koliko je boja pogođeno, ali su na pogrešnom mestu

Što se tiče koda iznad, tu sve funkcioniše kako treba: program obaveštava korisnika koliko je boja pogodio i na pravom su mestu. Međutim, potrebno je korisnika obavestiti i koliko je boja pogodio, ali su na pogrešnom mestu.

Neka je dobitna kombinacija sledeća: clBlack|clWhite|clGray|clWhite.
Citat:
niz[0] := clBlack;
niz[1] := clWhite;
niz[2] := clGray;
niz[3] := clWhite;

Recimo da korisnik pokuša sledeću kombinaciju: clBlack|clGray|clWhite|clYellow.
Citat:
sh0.Brush.Color := clBlack;
sh1.Brush.Color := clGray;
sh2.Brush.Color := clWhite;
sh3.Brush.Color := clYellow;


Program će uspešno izračunati da je korisnik pogodio jednu boju (clBlack) i vrednost promenljive DA će biti 1. Ali, korisnik je pogodio još dve boje, ali ih nije stavio na pravo mesto (clGray i clWhite) pa bi vrednost promenljive NE trebala da bude 2.
E sad, problem je u tome što ja ne znam kako da izračunam vrednost promenljive NE.

http://armorgames.com/play/2410/the-mastermind-game
https://www.youtube.com/watch?...ilpage&v=XCvvuumJAhg#t=555
Dakle, program ispravno obaveštava koliko je boja na mestu, ali ne znam da isprogramiram kako da obavesti koliko je boja pogođeno, ali su na pogrešnom mestu.

Ako sam opet nejasan, pokušaću da objasnim na drugi način...
Priložio sam sliku programa u prvoj poruci.

[Ovu poruku je menjao elzike7 dana 17.05.2015. u 12:04 GMT+1]
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
*.dynamic.sbb.rs.

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pomoć oko kviza17.05.2015. u 11:51 - pre 107 meseci
Obzirom da je ovo prilicno poznata igra, verujem da na netu vec imas dobrih resenja problema :) Elem, meni na prvu loptu deluje kao da ti zapravo imas problem sa informacijom da li si odredjeno polje vec proveravao ili ne...?

Logika igre je sledeca - imas dve liste sa identicnim brojem clanova, jedna sadrzi tacan raspored boja (zadatak), druga raspored boja koji predstavlja pokusaj igraca da pogodi tacan raspored. Vrsi se uporedjivanje dve liste gde jedan clan iz jedne liste moze biti uparen samo sa jednim clanom iz druge liste (ovo je sustina problema). Uporedjivanje/uparivanje se vrsi na dva nacina (gde clanovi dve liste mogu biti upareni samo na jedan, ili nijedan) - prvo da li je prava boja na pravom mestu (ovo poredjenje ima prednost), zatim da li je prava boja na pogresnom mestu.

Dakle, najprostiji nacin bi bio sledeci - za nalazenje tacnih boja na tacnom mestu, poredis onako kako si ti postavio - porede se dve liste gde medjusobno poredis samo clanove na istoj poziciji - ako su boje iste, dobio si uparivanje ta dva clana po uslovu boja/pozicija. Ovde je potrebno da na neki nacin pamtis koji su clanovi vec upareni, zato sto oni ne mogu ucestvovati u drugom poredjenju, gde se trazi samo boja - to mozes raditi bilo kroz neku promenljivu koju ces dodati samim clanovima lista, pa je po potrebi setovati na true/false, ili vec obeleziti "uparene" clanove na neki drugi nacin.

Primer:
Code:
for i := 0 to 3 do
begin
  if (pokusaj[i].Color = zadatak[i].Color) then
  begin
    pokusaj[i].Uparen := True;
    zadatak[i].Uparen := True;
    Da := Da + 1;
  end;
end;


Zatim prelazis na drugo poredjenje (ono koje ti nedostaje) - u najgorem slucaju, moras proci kroz sve clanove jedne liste za sve clanove druge liste (jer moras uporediti svaku boju iz jedne liste sa svakom bojom iz druge liste). U poredjenju ne mogu ucestvovati clanovi koju su prethodno vec upareni prilikom prvog poredjenja, ali ni clanovi koji su prethodno upareni iz drugog poredjenja - tj. kada prilikom drugog poredjenja nadjes "par", ti clanovi vise ne ucestvuju u nastavku poredjenja, u potrazi za drugim parovima.

Primer:
Code:
for i := 0 to 3 do
begin
  if (not pokusaj[i].Uparen) then
  for j := 0 to 3 do
  begin
    if ((not zadatak[j].Uparen)
      and (pokusaj[i].Color = zadatak[j].Color)) then
    begin
      pokusaj[i].Uparen := True;
      zadatak[j].Uparen := True;
      Ne := Ne + 1;     
      //
      break; // predji na sledeci pokusaj
    end;
  end;
end;


Rekoh, verujem da postoje i bolja/brza resenja, ali eto ti jedne ideje za razmisljanje, pa ti vidi :)
 
Odgovor na temu

elzike7

Član broj: 329211
Poruke: 4



Profil

icon Re: Pomoć oko kviza17.05.2015. u 16:00 - pre 107 meseci
Sasvim zadovoljavajuće rešenje. Hvala, to je to za sada.

Bilo je zanimljovo gledati kako računar izbacuje da su 2 boje pogođene i na mestu, a 6 pogođenih koje nisu na mestu.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pomoć oko kviza

[ Pregleda: 2426 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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