Üdv. Amőbát kellene pascal-ba megírnom. Vmi egyszerűbb verzíót nem tudtok?
program tictactoe_full;
uses crt;
var
M:array[1..9] of byte = (8,1,6,3,5,7,4,9,2);
choices:array[1..9] of byte;
player,count,i,cell,res1,res2:byte;
contin:char;
function check(player:byte):byte;
var start,elements:byte;
begin
if player=1 then begin
start:=1;elements:=count div 2 + 1;end
else begin start:=2;elements:=count div 2;end;
if elements>=3 then
check:=choices[start]+choices[start+2]+choices[start+4];
if (elements>3)and(check<>15) then
check:=choices[start]+choices[start+2]+choices[start+6];
if (elements>3)and(check<>15) then
check:=choices[start]+choices[start+4]+choices[start+6];
if (elements>3)and(check<>15) then
check:=choices[start+2]+choices[start+4]+choices[start+6];
end;
procedure populate();
begin
writeln('Tic Tac Toe !!');
writeln;
writeln('---|---|---');
writeln(' 1 | 2 | 3 ');
writeln('---|---|---');
writeln(' 4 | 5 | 6 ');
writeln('---|---|---');
writeln(' 7 | 8 | 9 ');
writeln();
writeln('Select any number from 1..9');
writeln();
end;
procedure insert(letter:char);
var x,y:byte;
begin
case cell of
1..3: gotoxy(2+(cell-1)*4,4);
4..6: gotoxy(2+(cell-4)*4,6);
7..9: gotoxy(2+(cell-7)*4,8);
end;
writeln(letter); gotoxy(1,12);
end;
begin
repeat
clrscr;
res1:=0;res2:=0;i:=1;
populate;
repeat
player:=count mod 2;
if player=0 then write('Player X : ') else write('Player O : ');
readln(cell);
if player=0 then insert('X') else insert('O');
choices[i]:=M[cell];
count := count + 1;
if (count>4) and (count<9) and (player =0) then res1:=check(1);
if (count>4) and (count<9) and (player =1) then res2:=check(2);
i:=i+1;
until (res1=15)or(res2=15)or(i>9);
if res1=15 then writeln('Player X WINS !!')
else if res2=15 then writeln('Player O WINS !!')
else writeln('The game was a DRAW');
write('Continue ?? Press ''n'' to stop : ');
readln(contin);
until(contin<>'y');
readln;
end.
a M:array[1..9] of byte = (8,1,6,3,5,7,4,9,2); sorban mi a hiba?, ott elakad
Ezt illett volna neked megírnod, most én csinálok majmot magamból a profik előtt.
Remélem, elmagyaráztatja veled a tanárod...
program tictactOX;
uses crt;
const
// kilépőkódok, hogy később könnyebb legyen megérteni
megszakitas=1; xnyert=2; onyert=3; dontetlen=4; uzenetx=1; uzenety=8;
hatterszin=black;
var
szoveg: string; // üzenetek
be: char; // billentyűütést fogadó változó
var kilep: byte; // ez alapján választ a befejezés típusai közül
kezdo, x, y, melyikvagy: integer;
tabla: array[0..2, 0..2] of integer; // a játékot ebben a tömbben könyveli
procedure palyarajz;
begin
textbackground(hatterszin);
clrscr; textcolor(lightred); writeln('Tic-Tac-Toe'); // torli a kepernyot, piros cím
textcolor(green); // zölddel rajzolja a pályát
writeln(' ! !'); writeln('-+-+-'); writeln(' ! !'); writeln('-+-+-'); writeln(' ! !');
// két egymásba ágyazott ciklussal törli a tömb elemeit:
for y:=0 to 2 do for x:=0 to 2 do tabla[x,y]:=0;
end;
procedure berajzol; // a képernyőre rajzolja a táblatömbben megtett lépést
begin
if melyikvagy>0 then // pozitív szám: X játékos
begin textcolor(blue); gotoxy(x*2+1,y*2+2); write('X'); end // X
else // negatív szám: O játékos
begin textcolor(red); gotoxy(x*2+1,y*2+2);write('O'); end; // kör
end;
{
NAMIVAN
Az ELLENORZES alrutinja. Ha a kapott összeg győzelmet mutat, beállítja
a nyertesnek megfelelő kilépőkódot.
}
procedure namivan(osszeg:integer);
begin
if osszeg=3 then
kilep:=xnyert
else
if osszeg=-3 then kilep:=onyert;
end;
{
ELLENORZES
Végignézi a sorokat, az oszlopokat és az átlókat, ha a megfelelő három szám összege
valamelyik fél győzelmét jelzi, a további vizsgálatokat átlépi. Ha nem talált nyertest,
ellenőrzi, hogy van-e még lehetséges lépés. Ha nincs, döntetlen lesz a kilépőkód.
}
procedure ellenorzes;
begin
// sorok három elemének vizsgálata:
for y:=0 to 2 do begin
namivan(tabla[0,y]+tabla[1,y]+tabla[2,y]);
if kilep>0 then exit;
end;
// oszlopok három elemének vizsgálata:
if kilep=0 then begin
for x:=0 to 2 do begin
namivan(tabla[x,0]+tabla[x,1]+tabla[x,2]);
if kilep>0 then exit;
end;
end;
// lejtő átló három elemének vizsgálata:
if kilep=0 then begin namivan(tabla[0,0]+tabla[1,1]+tabla[2,2]); end;
// emelkedő átló három elemének vizsgálata:
if kilep=0 then begin namivan(tabla[0,2]+tabla[1,1]+tabla[2,0]); end;
if kilep=0 then begin
// Lépési lehetőség keresése, ha nem talált nyerő helyzetet.
kilep:=dontetlen;
for y:=0 to 2 do for x:=0 to 2 do if tabla[x,y]=0 then kilep:=0;
end;
end;
procedure uzenettorles; // törli az üzenősort
begin
gotoxy(uzenetx, uzenety); write(' ');
end;
procedure kijon; // kiírja, hogy melyik fél következik
begin
uzenettorles;
if melyikvagy>0 then begin textcolor(blue); szoveg:='X'; end // kék X
else begin textcolor(red); szoveg:='O'; end; // piros O
gotoxy(uzenetx, uzenety); write(szoveg+' lep!'); // kiírja, melyik játékos kezdi
end;
{
BEIR
A kapott '1'..'9' karakter alapján megcímzi a tömb megfelelő elemét,
és ha szabad, beírja a játékos jelzőszámát, vagyis 1 vagy -1 értéket.
}
function beir: boolean;
var szam: integer;
begin
szam:=ord(be)-49; // 0..8
y:=2-(szam div 3); // kiszámolja és megfordítja az Y-indexet
x:=szam mod 3; // kiszámolja az X-indexet
if tabla[x,y]=0 then // ha a tömb megfelő eleme üres:
begin
tabla[x,y]:=melyikvagy; // beírja a jelzőszámot
berajzol; // a képernyőre rajzolja a játékos jelét
beir:=true; // jelzi BEOLVASnak, hogy cserélheti a játékost
end
else
beir:=false; // érvénytelen próbálkozás, továbbra is ugyanaz lép
end;
procedure beolvas;
begin
kilep:=0; // végejelző alaphelyzete
repeat // egy parti játékciklusának eleje
kijon; // kiírja, hogy melyik játékos következik
be:=readkey; // beolvas egy karaktert
case be of
#27: kilep:=megszakitas; // ESC, félbehagyott játék
'1'..'9': // szám, vagyis lehetséges próbálkozás
if beir=true then begin // sikeres lépés esetén
ellenorzes; // ellenőrzi a játék végét
if kilep=0 then melyikvagy:=-melyikvagy; // nincs vége, játékosváltás
end;
end;
until kilep>0; // a játékciklus vége
end;
BEGIN
kezdo:=1; // Az első partit X kezdi
clrscr;
repeat
melyikvagy:=kezdo;
palyarajz;
beolvas;
case kilep of
megszakitas:
begin
textcolor(lightgreen);
szoveg:='Nem vagytok kepesek egy partit befejezni?';
end;
xnyert..dontetlen:
begin
uzenettorles; textcolor(yellow);
case kilep of
xnyert: begin gotoxy(uzenetx, uzenety); write('X nyert!'); end;
onyert: begin gotoxy(uzenetx, uzenety); write('O nyert!'); end;
dontetlen: begin gotoxy(uzenetx, uzenety); write('Dontetlen!'); end;
end;
textcolor(green); gotoxy(uzenetx, uzenety+1); write('Mehet meg egy menet? (Igen/Nem)');
repeat // újabb játékot kínál
be:=readkey; // beolvasás
if be=#27 then be:='n'; // ESC is NEM
be:=upcase(be); // nagybetűssé alakítja, hogy kevesebbet kelljen vizsgálni
until (be='I') or (be='N'); // ha nem érti, újra
if (be='N') then begin // NEM válasz:
szoveg:='Befejeztem.';
kilep:=1; // kilépésjelző
end
else
kezdo:=-kezdo; // IGEN válasz: a másik játékos kezd
end;
end;
until kilep=1; // kilép vagy új parti indul
clrscr; // törli a képernyőt
gotoxy(uzenetx, uzenety); write(szoveg); // kiírja a beállított üzenetet
textcolor(green); gotoxy(uzenetx, uzenety+1); write('Gombnyomasra vege.');
be:=readkey;
END.
tabaki és te tubo pascal-al fordítottad,vagy free pascallal?
egyébként jó a prog?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!