Kezdőoldal » Számítástechnika » Programozás » Üdv. Amőbát kellene pascal-ba...

Üdv. Amőbát kellene pascal-ba megírnom. Vmi egyszerűbb verzíót nem tudtok?

Figyelt kérdés
3x3 as kellene megrajzolni #-így a keretet ebbe meg abc sor 123 oszlop révén kellene hivatkozni(x,o)-rel

2013. nov. 28. 17:17
1 2 3
 11/23 A kérdező kommentje:
tabaki és nincs egy kész programod,amit ide bemásolnál nekem?
2013. nov. 30. 10:47
 12/23 A kérdező kommentje:

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

2013. nov. 30. 19:04
 13/23 tabaki ***** válasza:
Bocs, nem otthon vagyok, ha hazaérek, megnézem.
2013. nov. 30. 20:57
Hasznos számodra ez a válasz?
 14/23 anonim ***** válasza:
Egyszerűen nem tudom megérteni hogyan írsz úgy 50 sor kódot, hogy már az 5. tök rossz. Most soronként fogsz ide rohangálni, ahelyett hogy nyomnál egy Google-keresést azt csá?
2013. nov. 30. 21:02
Hasznos számodra ez a válasz?
 15/23 A kérdező kommentje:
ezt google-be találtam... nem találok a google-be sehol sem,mutassál ha te tudsz...
2013. nov. 30. 21:09
 16/23 A kérdező kommentje:
egybébként a többi jó?
2013. nov. 30. 21:10
 17/23 tabaki ***** válasza:
Még mindig csak útközben vagyok, úgyhogy nem mélyedtem el a kódodban; így első blikkre úgy tűnik, hogy M ebben a formában nem változó- hanem konstanstömb kéne, hogy legyen. Próbáld meg const után írni var helyett.
2013. nov. 30. 22:08
Hasznos számodra ez a válasz?
 18/23 tabaki ***** válasza:
A kód nálam vátoztatás nélkül lefordul és működik.
2013. dec. 1. 02:04
Hasznos számodra ez a válasz?
 19/23 tabaki ***** válasza:

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.

2013. dec. 1. 03:35
Hasznos számodra ez a válasz?
 20/23 A kérdező kommentje:

tabaki és te tubo pascal-al fordítottad,vagy free pascallal?


egyébként jó a prog?

2013. dec. 1. 07:39
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!