Program Ristinolla; Uses Graph, Grafiikka, Crt; CONST TestiValikko: Valikko = ( x1:50; y1: 50; x2: 350; y2: 350; RiviLkm: 3; SaraLkm: 3; Pvari : BLUE; Kvari : WHITE; Tvari: WHITE; ApVari: BLUE; ATVari: LIGHTGREEN; Valittu: 1; Tapa: $0005; Tekstit: ( '','','','', '','','','','','','','','','','','' ) ); TestiValikko2: Valikko = ( x1:400; y1: 50; x2: 600; y2: 150; RiviLkm: 1; SaraLkm: 2; Pvari : BLUE; Kvari : WHITE; Tvari: WHITE; ApVari: BLUE; ATVari: LIGHTGREEN; Valittu: 1; Tapa: $0005; Tekstit: ( 'New Game','Quit','','', '','','','','','','','','','','','') ); TestiValikko3: Valikko = ( x1:400; y1: 50; x2: 600; y2: 250; RiviLkm: 3; SaraLkm: 2; Pvari : BLUE; Kvari : WHITE; Tvari: WHITE; ApVari: BLUE; ATVari: LIGHTGREEN; Valittu: 1; Tapa: $0005; Tekstit: ( 'Human','Cpu-Easy','Cpu-Medium','Cpu-Hard', 'Sound','Exit','','','','','','','','','','') ); VAR Valinta, Vuoro, i, cpu, voitot, tappiot, tasat: Integer; pelaaja1, pelaaja2: String[10]; peli, aani: Boolean; ruudut: array[1..9] of integer; {TAULUKON NNUMEROT VASTAAVAT RISTINOLLA-RUUDUKON RUUTUJA} procedure piirra; BEGIN if ruudut[valinta]=0 then begin{hyvˇksy VALINTA JOS RUUTU ON TYHJˇ} ruudut[valinta]:=vuoro; if aani=true then begin if vuoro=1 then begin sound(349); delay(100); sound(262); delay(100); ; ; if vuoro=1 then begin vuoro:=4; setcolor(0); outtextxy(500, 100, pelaaja1); setcolor(15); outtextxy(500, 100, pelaaja2); vuoro:=1; setcolor(0); outtextxy(500, 100, pelaaja2); setcolor(15); outtextxy(500, 100, pelaaja1);
; if aani=true then begin sound(247); delay(100); sound(220); delay(200); ; ; Case ruudut[1] of {PIIRRˇ YMPYRˇT JA RASTIT} line(70, 70, 130, 130); line(130, 70, 70, 130); ; 4: circle(100, 100, 40); ; Case ruudut[2] of line(170, 70, 230, 130); line(230, 70, 170, 130); ; 4: circle(200, 100, 40); ; Case ruudut[3] of line(270, 70, 330, 130); line(330, 70, 270, 130); ; 4: circle(300, 100, 40); ; Case ruudut[4] of line(70, 170, 130, 230); line(130, 170, 70, 230); ; 4: circle(100, 200, 40); ; Case ruudut[5] of line(170, 170, 230, 230); line(230, 170, 170, 230); ; 4: circle(200, 200, 40); ; Case ruudut[6] of line(270, 170, 330, 230); line(330, 170, 270, 230); ; 4: circle(300, 200, 40); ;
Case ruudut[7] of line(70, 270, 130, 330); line(130, 270, 70, 330); ; 4: circle(100, 300, 40); ; Case ruudut[8] of line(170, 270, 230, 330); line(230, 270, 170, 330); ; 4: circle(200, 300, 40); ; END; Case ruudut[9] of line(270, 270, 330, 330); line(330, 270, 270, 330); ; 4: circle(300, 300, 40); ; Procedure voitto; {KUN JOMPIKUMPI SAA VALMIIKSI SUORAN} BEGIN outtextxy(400, 200, 'Winner:'); peli:=false; if aani=true then begin if (vuoro=4) or (cpu=0) then begin Sound(131); Delay(500); Sound(165); Delay(500); Sound(196); Delay(500); Sound(392); Delay(1000); Delay(100); Sound(392); Delay(250); Delay(100); Sound(392); Delay(250); Delay(100); Sound(523); Delay(1500); else if cpu>0 then begin {JOS CPU VOITTAA} Sound(247); Delay(500); Sound(196); Delay(500); Sound(165); Delay(500); nosound; ; ; END;
procedure tasapeli; {KUN KAIKKI RUUDUT TˇYTTYVˇT} BEGIN outtextxy(400, 200, 'Tie!'); peli:=false; if aani=true then begin sound(220); delay(400); sound(247); delay(200); sound(220); delay(500); Sound(392); Delay(1000); ; END; procedure suorat; BEGIN if (ruudut[1]+ruudut[2]+ruudut[3]=3) or {JOS PELAAJALLA1 SUORA} (ruudut[4]+ruudut[5]+ruudut[6]=3) or (ruudut[7]+ruudut[8]+ruudut[9]=3) or (ruudut[1]+ruudut[4]+ruudut[7]=3) or (ruudut[2]+ruudut[5]+ruudut[8]=3) or (ruudut[3]+ruudut[6]+ruudut[9]=3) or (ruudut[1]+ruudut[5]+ruudut[9]=3) or (ruudut[7]+ruudut[5]+ruudut[3]=3) then begin outtextxy(500, 200, pelaaja1); setcolor(0); outtextxy(500, 100, pelaaja2); _KirjoitaKokLuku(150, 400, 2, voitot); voitot:=voitot+1; setcolor(15); _KirjoitaKokLuku(150, 400, 2, voitot); voitto; else if (ruudut[1]+ruudut[2]+ruudut[3]=12) or {JOS PELAAJALLA2 SUORA} (ruudut[4]+ruudut[5]+ruudut[6]=12) or (ruudut[7]+ruudut[8]+ruudut[9]=12) or (ruudut[1]+ruudut[4]+ruudut[7]=12) or (ruudut[2]+ruudut[5]+ruudut[8]=12) or (ruudut[3]+ruudut[6]+ruudut[9]=12) or (ruudut[1]+ruudut[5]+ruudut[9]=12) or (ruudut[7]+ruudut[5]+ruudut[3]=12) then begin outtextxy(500, 200, pelaaja2); setcolor(0); outtextxy(500, 100, pelaaja1); _KirjoitaKokLuku(550, 400, 2, tappiot); tappiot:=tappiot+1; setcolor(15); _KirjoitaKokLuku(550, 400, 2, tappiot); voitto; {ALIOHJELMAAN} else if ruudut[1]+ruudut[2]+ruudut[3]+ruudut[4]+ruudut[5]+ {TASAPELI} ruudut[6]+ruudut[7]+ruudut[8]+ruudut[9]>20 then begin outtextxy(500, 200, pelaaja2); setcolor(0);
if vuoro=1 then outtextxy(500, 100, pelaaja1) else outtextxy(500, 100, pelaaja2); _KirjoitaKokLuku(350, 400, 2, tasat); tasat:=tasat+1; setcolor(15); _KirjoitaKokLuku(350, 400, 2, tasat); tasapeli; {ALIOHJELMAAN} ; END; procedure cpu1; Begin repeat {SATUNNAINEN} valinta:=random(9)+1; until ruudut[valinta]=0 End; procedure cpu2; Begin if (ruudut[1]+ruudut[2]+ruudut[3]=8) or {VIIMEISTELE OMA SUORA} (ruudut[4]+ruudut[5]+ruudut[6]=8) or (ruudut[7]+ruudut[8]+ruudut[9]=8) or (ruudut[1]+ruudut[4]+ruudut[7]=8) or (ruudut[2]+ruudut[5]+ruudut[8]=8) or (ruudut[3]+ruudut[6]+ruudut[9]=8) or (ruudut[1]+ruudut[5]+ruudut[9]=8) or (ruudut[7]+ruudut[5]+ruudut[3]=8) then begin if (ruudut[1]+ruudut[2]+ruudut[3]=8) then begin else if ruudut[2]=0 then valinta:=2 else valinta:=3; else if (ruudut[4]+ruudut[5]+ruudut[6]=8) then begin if ruudut[4]=0 then valinta:=4 else valinta:=6; else if (ruudut[7]+ruudut[8]+ruudut[9]=8) then begin if ruudut[7]=0 then valinta:=7 else if ruudut[8]=0 then valinta:=8 else if (ruudut[1]+ruudut[4]+ruudut[7]=8) then begin else if ruudut[4]=0 then valinta:=4 else if (ruudut[2]+ruudut[5]+ruudut[8]=8) then begin if ruudut[2]=0 then valinta:=2 else valinta:=8; else if (ruudut[3]+ruudut[6]+ruudut[9]=8) then begin else if ruudut[6]=0 then valinta:=6
SUORA} else if (ruudut[1]+ruudut[5]+ruudut[9]=8) then begin ; else if (ruudut[1]+ruudut[2]+ruudut[3]=2) or {ESTˇ VASTUSTAJAN (ruudut[4]+ruudut[5]+ruudut[6]=2) or (ruudut[7]+ruudut[8]+ruudut[9]=2) or (ruudut[1]+ruudut[4]+ruudut[7]=2) or (ruudut[2]+ruudut[5]+ruudut[8]=2) or (ruudut[3]+ruudut[6]+ruudut[9]=2) or (ruudut[1]+ruudut[5]+ruudut[9]=2) or (ruudut[7]+ruudut[5]+ruudut[3]=2) then begin if (ruudut[1]+ruudut[2]+ruudut[3]=2) then begin else if ruudut[2]=0 then valinta:=2 else valinta:=3; else if (ruudut[4]+ruudut[5]+ruudut[6]=2) then begin if ruudut[4]=0 then valinta:=4 else valinta:=6; else if (ruudut[7]+ruudut[8]+ruudut[9]=2) then begin if ruudut[7]=0 then valinta:=7 else if ruudut[8]=0 then valinta:=8 else if (ruudut[1]+ruudut[4]+ruudut[7]=2) then begin else if ruudut[4]=0 then valinta:=4 else if (ruudut[2]+ruudut[5]+ruudut[8]=2) then begin if ruudut[2]=0 then valinta:=2 else valinta:=8; else if (ruudut[3]+ruudut[6]+ruudut[9]=2) then begin else if ruudut[6]=0 then valinta:=6 else if (ruudut[1]+ruudut[5]+ruudut[9]=2) then begin
End; ; {KESKELLE} repeat {SATUNNAINEN} valinta:=random(9)+1; until ruudut[valinta]=0 ; procedure cpu3; Begin if (ruudut[1]+ruudut[2]+ruudut[3]=8) or {VIIMEISTELE OMA SUORA} (ruudut[4]+ruudut[5]+ruudut[6]=8) or (ruudut[7]+ruudut[8]+ruudut[9]=8) or (ruudut[1]+ruudut[4]+ruudut[7]=8) or (ruudut[2]+ruudut[5]+ruudut[8]=8) or (ruudut[3]+ruudut[6]+ruudut[9]=8) or (ruudut[1]+ruudut[5]+ruudut[9]=8) or (ruudut[7]+ruudut[5]+ruudut[3]=8) then begin if (ruudut[1]+ruudut[2]+ruudut[3]=8) then begin else if ruudut[2]=0 then valinta:=2 else valinta:=3; else if (ruudut[4]+ruudut[5]+ruudut[6]=8) then begin if ruudut[4]=0 then valinta:=4 else valinta:=6; else if (ruudut[7]+ruudut[8]+ruudut[9]=8) then begin if ruudut[7]=0 then valinta:=7 else if ruudut[8]=0 then valinta:=8 else if (ruudut[1]+ruudut[4]+ruudut[7]=8) then begin else if ruudut[4]=0 then valinta:=4 else if (ruudut[2]+ruudut[5]+ruudut[8]=8) then begin if ruudut[2]=0 then valinta:=2 else valinta:=8; else if (ruudut[3]+ruudut[6]+ruudut[9]=8) then begin else if ruudut[6]=0 then valinta:=6 else if (ruudut[1]+ruudut[5]+ruudut[9]=8) then begin
SUORA} ; else if (ruudut[1]+ruudut[2]+ruudut[3]=2) or {ESTˇ VASTUSTAJAN (ruudut[4]+ruudut[5]+ruudut[6]=2) or (ruudut[7]+ruudut[8]+ruudut[9]=2) or (ruudut[1]+ruudut[4]+ruudut[7]=2) or (ruudut[2]+ruudut[5]+ruudut[8]=2) or (ruudut[3]+ruudut[6]+ruudut[9]=2) or (ruudut[1]+ruudut[5]+ruudut[9]=2) or (ruudut[7]+ruudut[5]+ruudut[3]=2) then begin if (ruudut[1]+ruudut[2]+ruudut[3]=2) then begin else if ruudut[2]=0 then valinta:=2 else valinta:=3; else if (ruudut[4]+ruudut[5]+ruudut[6]=2) then begin if ruudut[4]=0 then valinta:=4 else valinta:=6; else if (ruudut[7]+ruudut[8]+ruudut[9]=2) then begin if ruudut[7]=0 then valinta:=7 else if ruudut[8]=0 then valinta:=8 else if (ruudut[1]+ruudut[4]+ruudut[7]=2) then begin else if ruudut[4]=0 then valinta:=4 else if (ruudut[2]+ruudut[5]+ruudut[8]=2) then begin if ruudut[2]=0 then valinta:=2 else valinta:=8; else if (ruudut[3]+ruudut[6]+ruudut[9]=2) then begin else if ruudut[6]=0 then valinta:=6 else if (ruudut[1]+ruudut[5]+ruudut[9]=2) then begin ; {KESKELLE}
else if (ruudut[2]+ruudut[4]+ruudut[6]+ruudut[8]=2) and (ruudut[1]+ruudut[3]+ruudut[7]+ruudut[9]<5) then begin if (ruudut[2]+ruudut[6]=2) then valinta:=3 else if (ruudut[2]+ruudut[4]=2) then valinta:=1 else if (ruudut[8]+ruudut[6]=2) then valinta:=9 else if (ruudut[8]+ruudut[4]=2) then valinta:=7 valinta:=random(4)+1; if valinta=2 then valinta:=3 else if valinta=3 then valinta:=7 else if valinta=4 then valinta:=9; ; else if ((ruudut[1]+ruudut[9]=2) or (ruudut[3]+ruudut[7]=2)) and (ruudut[5]=4) then begin valinta:=random(4)+1; if valinta=1 then valinta:=6 else if valinta=3 then valinta:=8 else if ruudut[1]+ruudut[3]+ruudut[7]+ruudut[9]=1 then begin {VASTAKKAISEEN} if ruudut[1]=1 then valinta:=9 {KULMAAN KUIN VASTUSTAJA} begin begin begin else if ruudut[3]=1 then valinta:=7 else if ruudut[7]=1 then valinta:=3 else if ruudut[9]=1 then valinta:=1; {JOS REUNAAN, NIIN KULMAAN} else if (ruudut[2]=1) and ((ruudut[7]=0) or (ruudut[9]=0))then if ruudut[7]=0 then valinta:=7 else if (ruudut[4]=1) and ((ruudut[3]=0) or (ruudut[9]=0)) then if ruudut[9]=0 then valinta:=9 else valinta:=3; else if (ruudut[6]=1) and ((ruudut[1]=0) or (ruudut[7]=0)) then else if (ruudut[8]=1) and ((ruudut[3]=0) or (ruudut[1]=0)) then begin else valinta:=1; else if (ruudut[1]=0) or (ruudut[3]=0) or (ruudut[7]=0) or (ruudut[9]=0) then begin repeat {VAPAASEEN KULMAAN} valinta:=random(4)+1; if valinta=2 then valinta:=3 else if valinta=3 then valinta:=7
End; else if valinta=4 then valinta:=9; until ruudut[valinta]=0; {SATUNNAINEN} repeat valinta:=random(9)+1; until ruudut[valinta]=0 ; Procedure valitsevastus; {VALITSE VAIKEUSASTE} BEGIN _Valikko(TestiValikko3); _Valikkoon(Valinta, TestiValikko3); if (aani=true) and (valinta<>5) then begin sound(349); Delay(100); sound(392); Delay(200); ; if valinta=1 then cpu:=0 else if valinta=2 then cpu:=1 else if valinta=3 then cpu:=2 else cpu:=3; END; BEGIN aani:=true; repeat randomize; Vuoro:=1; voitot:=0; tappiot:=0; tasat:=0; grafiikkatilaan; _Valikko(TestiValikko); settextstyle(0,0,5); outtextxy(50,375,'tick-tack-toe'); settextstyle(0,0,2); outtextxy(300,425,'by: Miro Aurela'); valitsevastus; if valinta=5 then begin if aani=true then begin aani:=false aani:=true; sound(349); Delay(100); sound(392); Delay(200); ; ; if (valinta<5) then begin textmode(lastmode); writeln; writeln('player 1 (X):'); readln(pelaaja1);
if cpu=0 then begin writeln('player 2 (O):'); readln(pelaaja2); else if cpu=1 then pelaaja2:='cpu-easy' else if cpu=2 then pelaaja2:='cpu-medium' else pelaaja2:='cpu-hard'; textcolor(0); settextstyle(0,0,7); outtextxy(50,375,'tick-tack-toe'); settextstyle(0,0,1); outtextxy(300,425,'by: Miro Aurela'); textcolor(15); repeat for i:=1 to 9 do ruudut[i]:=0; GrafiikkaTilaan; outtextxy(400, 100, 'In turn: '); if vuoro=1 then outtextxy(500, 100, pelaaja1) else outtextxy(500, 100, pelaaja2); outtextxy(250, 400, 'Ties'); if cpu=0 then begin outtextxy(50, 400, pelaaja1); outtextxy(450, 400, pelaaja2); outtextxy(50, 400, 'Wins'); outtextxy(450, 400, 'Loses'); ; _KirjoitaKokLuku(150, 400, 2, voitot); _KirjoitaKokLuku(350, 400, 2, tasat); _KirjoitaKokLuku(550, 400, 2, tappiot); peli:=true; _Valikko(TestiValikko); repeat{itse RISTINOLLA OSUUS, PELATAAN VALITTUA VASTUSTAJAA VASTAAN} if (cpu=0) or (vuoro=1) then begin {JOS PELAAJAN VUORO} _Valikkoon(Valinta, TestiValikko); {PELAAJA TEKEE VALINNAN} else if vuoro=4 then begin {JOS TIETOKONEEN VUORO} delay(random(1000)+400); if cpu=1 then cpu1 else if cpu=2 then cpu2 else cpu3; ; piirra; suorat; until peli=false;{kunnes TOINEN SAA SUORAN TAI KAIKKI RUDUT TˇYNNˇ} _Valikko(TestiValikko2); {HALUATKO UUDEN PELIN? ('UUSI'/'ALKUUN')} _Valikkoon(Valinta, TestiValikko2); if aani=true then begin sound(349); Delay(100); sound(392); Delay(200); ; until (valinta=2); {JOS VALITSET 'ALKUUN'} ;
until valinta=6; {OHJELMA LOPPUU, KUN VALINTA ON 'LOPETA'} END.