Sabaka gimnazija
Maturski rad
Smer:informatiki Predmet:Programiranje Tema:Pravljenje igrice mastermind u delfiju Komisija: 1. 2. 3. Ocena:
Profesor: Violeta Kostadinovid
Ucenik: Nikolaj Mihaljiin
Sabac,2012
1
Istorija
Mastarmind je igra koju je osmislio Izraelac Midohej Mirovic jos 1970. godine. Prvi put svoju igricu prikazao je na sajmu igracaka u Nimbergu. On je kasnije svoja autorska prava prodao jednoj Britanskoj kompaniji. 1975. godine ova igra proglasena je za najbolju igru godine I tako usla u istoriju. Za 40 godina koliko postoji igra je prodata u preko 55 miliona primeraka u vise od 80 zemalja. Danas se sve ede srede u obloku online igrice. Igrica mastermind nama je najpoznatija kao igra Skocko jedna od igara naeg najgledanijeg kviza Slagalice.
Interfejs programa
Osnovni izgled igre: Glavni meni sadri pet opcija: 1)Igra, 2)Vrsta igre, 3)Broj igraca, 4)Duzina igre i 5)Pozadina. Pored glavnog menija u dnu prozora su tri dugmeta: 1)obrisi, 2)potvrdi i 3)nastavi. Na levoj strani nalazi se 38 sliica (zelene), a na desnoj 24 kruga. Ispod njih nalazi se jo 6 sliica (skoko,tref...). Primetna je slicnost sa izgledom igre skocko u slagalici. Na narednih pet slika prikazan je izgled glavnog menija:
1)
2)
3)
4)
5) 3
Na narednim slikama bice prikazan tok igre i poruke koje igracima olaksavaju koriscenje igre:
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18) Objanjenje slika:
19)
1) Klikom na stavku menija Igra otvara se padajudi meni koji sadri opcije Nova igra i Izlaz. 2) Klikom na stavku menija Vrsta igre otvara se padajudi meni koji sadri opcije Spora, Normalna i Brza. 3) Klikom na stavku menija Broj igraca otvara se padajudi meni koji sadri opcije 1 igrac i 2 igraca. 4) Klikom na stavku menija Duzina igre otvara se padajudi meni koji sadri opcije 4 igre, 6igara i 8 igara. 5) Klikom na stavku menija Pozadina otvara se padajudi meni koji sadri opciju Promeni pozadinu 6) Na slici 6 prikazana je poruka koja se pojavljuje u sluaju da nakon zavretka igre (posle 4, 6 ili 8 partija) drugi takmiar ima bolji skor.
7) Na slici 7 prikazana je poruka koja se pojavljuje kada takmiar koji je na potezu ne uspe da rei svoju partiju. 8) Na slici 8 prikazana je poruka koja se pojavljuje kada takmiar uspe da rei protivnikovu partiju. 9) Na slici 9 prikazan je interfejs programa kada se odabere opcija 1 igrac 10) Na slici 10 prikazana je poruka koja se pojavljuje kada je odabrana opcija 1 igrac i igra ne uspe da rei partiju. 11) Na slici 11 prikazana je poruka koja se pojavljuje kada je odabrana opcija 1 igrac i vreme istekne. 12) Na slici 12 prikazana je poruka koja se pojavljuje kada ni jedan od takmiara ne uspe da rei partiju. 13) Na slici 13 prikazana je poruka koja se pojavljuje kada je odabrana opcija 1 igrac i igra uspe da rei svoju partiju. 14) Na slici 14 prikazana je poruka koja se pojavljuje kada jednom od takmiara istekne vreme 15) Na slici 15 prikazana je poruka koja se pojavljuje kada jedan od takmiara uspe da rei svoju partiju 16) Na slici 16 prikazana je poruka koja se pojavljuje kada je odabrana opcija 1 igrac i kada je igra zavrena 17) Na slici 17 prikazana je poruka koja se pojavljuje kada jednom od takmiara istekne vreme 18) Na slici 18 prikazana je poruka koja se pojavljuje kada je na kraju igre rezultat izjednaen 19) Na slici 19 prikazana je poruka koja se pojavljuje kada je na kraju igre bolji skor ostvario prvi takmiar.
Glavne naredbe programa
U ovom poglavlju bide pikazane najznaajnije naredbe koje omogudavaju rad programa: Naredba u okviru jedne od 6 slika sa desne strane: if (e=1)and (q=0) then begin If (c=8) and (d=0) then begin Image8.Picture:=Image2.Picture; b1:=0; c:=c+1; d:=d+1; end; If (c=9) and (d=0) then begin Image9.Picture:=Image2.Picture;c:=c+1;d:=d+1; b2:=0; end; ... If (c=35) and (d=0) then begin Image35.Picture:=Image2.Picture;c:=c+1; d:=d+1; e:=0; b4:=0; Button2.Enabled:=true; end; Promenljiva q onemogudavaju izvrenje naredbe nakon uspeno reene partije, ako takmiar uspe da je rei pre poslednjeg pokuaja. Poetna vrednost promenljive c je 8 i prilikom svakog klika na sliku povedava se za jedan osim ako su sve etiri slike u potezu popunjene (to onemogudava e promenljiva).Ove naredbe ponavljade se za svaku sliku, ali de se vrednost promenljive b zavisno od slike menjati (0,1,2,3,4,5). Naredba u okviru stavre Nova ciga padajug menija: li:=0;v:=0;q:=0; s:=1;t:=0;u:=0;u1:=0;u2:=0; Edit1.Text:=''; Edit2.Text:=''; if h=1 then begin o:=5;p:=0;r:=0; end; if h=2 then begin o:=10;p:=0;r:=0; end; if h=3 then begin o:=15;p:=0;r:=0; end; k:=1;c:=8;l:=0; n:=0; randomize; a1:=Random(6); a2:=Random(6);a3:=Random(6);a4:=Random(6); Label1.Caption:=IntToStr(a1)+' '+IntToStr(a2)+' '+IntToStr(a3)+' '+IntToStr(a4); if b=2 then j:=2; if b=3 then j:=3;if b=1 then j:=1; e:=1;f:=1; shape25.Width:=0; If g=1 then begin Edit2.Width:=0;Edit1.Color:=clwhite; end; If g=2 then begin Edit2.Width:=65;Edit1.Color:=clblue; end; Shape1.Brush.Color:=clblack; Shape2.Brush.Color:=clblack; Shape3.Brush.Color:=clblack; Shape4.Brush.Color:=clblack; ... Shape24.Brush.Color:=clblack; Image8.Picture.LoadFromFile('pozadinica.jpg'); Image9.Picture.LoadFromFile('pozadinica.jpg'); Image10.Picture.LoadFromFile('pozadinica.jpg'); Image11.Picture.LoadFromFile('pozadinica.jpg'); Image12.Picture.LoadFromFile('pozadinica.jpg' ... Image39.Picture.LoadFromFile('pozadinica.jpg'); end; U ovom delu definisane su poetne vrednosti promenljivih koje de se kasnije koristiti kao i poetne vrednosti slika sa leve strane. Funkcijom randomize odredjena je dobitna kombinacija, a label komnonenta koridena je kao kontrolni sisten. Kada sam zavrio program njeno svojstvo vidljivosti (visible) promenio sam u false.
Naredba u okviru dugmeta Potvrdi: If k=1 then begin if a4=b1 then b1:=9 else if a4=b2 then b2:=9 else if a4=b3 then b3:=9 else if a4=b4 then b4:=9; 6
if a3=b1 then b1:=9 else if a3=b2 then b2:=9 else if a3=b3 then b3:=9 else if a3=b4 then b4:=9; if a2=b1 then b1:=9 else if a2=b2 then b2:=9 else if a2=b3 then b3:=9 else if a2=b4 then b4:=9; if a1=b1 then b1:=9 else if a1=b2 then b2:=9 else if a1=b3 then b3:=9 else if a1=b4 then b4:=9; U ovom delu program proverava da li su vrednosti neke od slika koje je igrac odabrao u prvoj kombinaciji (k+1) jednake nekoj od vrednosti dobitne kombinacije. if b1<>9 then b1:=0; if b2<>9 then b2:=0; if b3<>9 then b3:=0; if b4<>9 then b4:=0; Ako neko b (vrednost slike koju odabere igra) ne odgovara ni jednoj od vrednosti dobitne kombinacije (a) b dobija vrednost 0 if (b1+b2+b3+b4)=36 then l:=4; if (b1+b2+b3+b4)=27 then l:=3; if (b1+b2+b3+b4)=18 then l:=2; if (b1+b2+b3+b4)=9 then l:=1; l je broj vrednosti koje se podudaraju. if l=1 then Shape1.Brush.Color:=clyellow; if l=2 then begin Shape1.Brush.Color:=clyellow;Shape2.Brush.Color:=clyellow;end; if l=3 then begin Shape1.Brush.Color:=clyellow; Shape2.Brush.Color:=clyellow;Shape3.Brush.Color:=clyellow;end; if l=4 then begin Shape1.Brush.Color:=clyellow;Shape2.Brush.Color:=clyellow; Shape3.Brush.Color:=clyellow;Shape4.Brush.Color:=clyellow;end; Zavisno od toga koliko promenljivih se podudara, toliko krugova pouti. if (c1=a1)and(c2=a2)and(c3=a3)and(c4=a4) then begin Shape1.Brush.Color:=clred; Shape2.Brush.Color:=clred; Shape3.Brush.Color:=clred;Shape4.Brush.Color:=clred; if g=1 then begin u:=u+20; Edit1.Text:=inttostr(u);end; if (g=2)and(s=1) then begin u1:=u1+20;Edit1.Text:=inttostr(u1);end; if (g=2)and(s=2) then begin u2:=u2+20;Edit2.Text:=inttostr(u2);end; s:=0; f:=0; button3.Enabled:=true; Ako je kombinacija koju je igrac odabrao potpuno identina kombinaciji koju je kompjuter odabrao krugovi dobijaju crvenu boju, a poeni se povedavaju zavisno od poteza za 10, 15 ili 20. If a1=0 then Image36.Picture:=Image2.Picture;If a1=1 then Image36.Picture:=Image3.Picture; If a1=2 then Image36.Picture:=Image4.Picture;If a1=3 then Image36.Picture:=Image5.Picture; If a1=4 then Image36.Picture:=Image6.Picture;If a1=5 then Image36.Picture:=Image7.Picture;... Ponavlja se sve do a4 i Image39 If a4=5 then Image39.Picture:=Image7.Picture; Ove naredbe omogudavaju da se dobitna kombinacija izbaci u poslednjem redu sa leve strane. if g=1 then begin ShowMessage('Nasao si dobitnu kombinaciju.Cestitam!'); if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena'); if 7
(li=5)and(h=5) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena'); if (li=7)and(h=6) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena'); q:=1;end; Ova naredba izbacuje poruku estitke ako je g=1, odnosno ako igra 1 igra. Ako je odabrana duina igre (h=4-4 igre, h=5-6 igara, h=6-8 igara) jednaka broju li+1 (broju odagranih partija) izbacuje poruku da je igra zavrsena i koliki broj poena je osvojen.
if g=2 then begin ShowMessage('Nasao si dobitnu kombinaciju.Cestitam!Na redu je drugi takmicar'); if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena');if (li=5)and(h=5) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena'); if (li=7)and(h=6) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') else ShowMessage ('igra je zavrsena neresenim rezultatom '+inttostr(u2)+' poena'); q:=1;end; end; Ova naredba izbacuje poruku estitke ako je g=2, odnosno ako igrju 2 igra. Ako je odabrana duina igre (h=4-4 igre, h=5-6 igara, h=6-8 igara) jednaka broju li+1 (broju odagranih partija) izbacuje poruku da je igra zavrsena, ko je pobedio i koliko je pojena osvojio pobednik. if ((c1=a1)and(c2=a2)and(c3=a3))or((c2=a2)and(c3=a3)and(c4=a4)) or((c1=a1)and(c2=a2)and(c4=a4))or((c1=a1)and(c3=a3)and(c4=a4)) then begin Shape1.Brush.Color:=clred; Shape2.Brush.Color:=clred; Shape3.Brush.Color:=clred; end; if((c1=a1)and(c2=a2))or((c1=a1)and(c3=a3))or((c1=a1)and(c4=a4)) or((c2=a2)and(c3=a3))or((c2=a2)and(c4=a4))or((c3=a3)and(c4=a4)) then begin Shape1.Brush.Color:=clred; Shape2.Brush.Color:=clred; end; if (c1=a1)or (c2=a2)or(c3=a3)or (c4=a4) then Shape1.Brush.Color:=clred; k:=k+1 ;l:=0; end; Ovaj deo omogudava da se tri, dva ili jedan kruga oboje u crveno, ako su tri, dve ili jedna vrednosti igraeve kombinacije jednake vrednostima kompjuterove i nalaze se na istom mestu. 8
Label2.Caption:=inttostr(b1)+' '+inttostr(b2)+' '+inttostr(b3)+' '+inttostr(b4); Label3.Caption:=inttostr(l); Label komnonente koridene su kao kontrolni sisten. Kada sam zavrio program njihovo svojstvo vidljivosti (visible) promenio sam u false. if (li=3)and(h=4) then button3.Enabled:=false; if (li=5)and(h=5) then button3.Enabled:=false; if (li=7)and(h=6) then button3.Enabled:=false; Ove tri naredbe onemogudavaju da igra pritisne dugme nastavi po zavretku igre. Ovaj deo ponavlja se sve do k=5, za k=6 naredba se razlikuje ako takmiar ne rei partiju, jer ako igraju dva igraa u sedmom poruaju drugi takmiar dobija mogudnost da rei protivnikovu igru, a ako igra jedan igra sedmog pokuaja ni nema.Za k=7 naredba se neto vie razlikuje, jer ova naredba ne razmatra igru sa jednim takmiarem. U strukturi programa prvo se postavlja pitanje za k=7, a na kraju za k=1 jer se ka svaki put poveda za 1. U suprotnom k bi se uvek povedavalo za jedan i time bi svaki put bio ispunjen naredni uslov. Za k=6, ako igra ne rei partiju naredba izglada ovako : if g=1 then begin If a1=0 then Image36.Picture:=Image2.Picture; ... If a4=5 then Image39.Picture:=Image7.Picture;end; Naredba ispisuje dobitnu kombinaciju ako igra jedan igra, jer bez obzira da li rei partiju program treba da izbaci reenje. if g=1 then begin s:=0;f:=0;Button3.Enabled:=true;ShowMessage('Nisi nasao dobitnu kombinaciju.'); Igra obavetava takmiara da nije reio partiju, a delje je isto u sluaju da je Broj igara ispunjen igrica de izbaciti koliko je pojena osvojo takmiar. Ovde nije bilo potrebno kasnije razmatrati situaciju da li je g=2, ali ja sam to radio jer sam najpre napisao naredbu za ispisivanje poruka o kraju igre, a onda ih kopirao i u sluaju jednog i u sluaju dva igraa if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') else if u1>u2 then ShowMessage ('igra je zavrsena pobedio je prvi takmicar sa osvojenih '+inttostr(u1)+' poena') else if u2>u1 then ShowMessage ('igra je zavrsena pobedio je drugi takmicar sa osvojenih '+inttostr(u2)+' poena') ... Igra obavetava takmiara da nije reio partiju i da drugi takmiar moe da pokua. if g=2 then begin f:=0;s:=0;ShowMessage('Nisi nasao dobitnu kombinaciju.Drugi takmicar moze da pokusa.');end;end; Za k=7 naredba je slededa: if k=7 then begin Button3.Enabled:=true; If a1=0 then Image36.Picture:=Image2.Picture; ... If a4=5 then Image39.Picture:=Image7.Picture;
Neredbe koje u poslednjem redu ispisuju dobitnu kombinaciju, jer dobitna kombinacija svakako mora biti izbaena, bilo da je igrai ree ili ne. if (c1=a1)and(c2=a2)and(c3=a3)and(c4=a4) then l:=4; if (l=4)and(v mod 2=0) then begin u2:=u2+10; Edit2.Text:=inttostr(u2); ShowMessage('Uspeo si da resis protivnikovu igru,sada probaj i svoju'); Naredba obavetava drugog (v mod 2=0) igraa da je reio protivnikovu partiju, ako se njegova kombinacija podudara sa traenom. if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') ... Naredba koja obavetava o kraju igre. if (l=4)and(v mod 2=1) then begin u1:=u1+10;Edit1.Text:=inttostr(u1); ShowMessage('Uspeo si da resis protivnikovu igru,sada probaj i svoju'); Naredba obavetava prvog (v mod 2=1) igraa da je reio protivnikovu partiju, ako se njegova kombinacija podudara sa traenom. if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') ... Naredba koja obavetava o kraju igre. If l<>4 then begin ShowMessage('Niste resili ovu igru,vise srece u narednoj'); Naredba koja obavetava igrae da nisu reili pariju. if (li=3)and(h=4) then if g=1 then ShowMessage('igra je zavrsena osvojio si '+inttostr(u)+' poena') ... Naredba koja obavetava o kraju igre.
10