pascal - problem
wiec tak tutaj jest moja gra kółko i krzyżyk
Kod:
uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v:char;
procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('Wpisz x albo o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('Podaj kolumne: ');
readln(n);
write('Podaj wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('Miejsce zajete');
for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;
end;
until v=' ';
end;
begin
clrscr;
krzyzyk;
readkey;
end.
__________________________________________________
a tutaj jest kod do sprawdzenia czy wygrało kółko czy krzyżyk
Kod:
if(tab[1,1]='O')and(tab[2,1]='O')and(tab[3,1]='O')then
wynik:='O';
if(tab[1,2]='O')and(tab[2,2]='O')and(tab[3,2]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,3]='O')and(tab[3,3]='O')then
wynik:='O';
if(tab[1,1]='O')and(tab[1,2]='O')and(tab[1,3]='O')then
wynik:='O';
if(tab[2,1]='O')and(tab[2,2]='O')and(tab[2,3]='O')then
wynik:='O';
if(tab[3,1]='O')and(tab[3,2]='O')and(tab[3,3]='O')then
wynik:='O';
if(tab[1,1]='O')and(tab[2,2]='O')and(tab[3,3]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,2]='O')and(tab[3,1]='O')then
wynik:='O';
wstawiałem to w różne miejsca w grze lecz bez powodzenia może mi ktoś powiedzieć gdzie mam to wstawić by pokazywało mi, któa strona wygrała?
stary dobry pascal... jeszcze tego uczą?
Tak na pierwszy rzut oka - to na dole sprawdza TYLKO czy wygrało kółko. Po drugie jest z całkiem innej bajki, nawet zmiennej "wynik" nie masz zadeklarowanej u siebie.
Więc masz rację - nie będzie działać bez względu na miejsce wstawienia.
jak widać uczą :)
to sprawdzenia do krzyżyka
if(tab[1,1]='X')and(tab[2,1]='X')and(tab[3,1]='X')then
wynik:='X';
if(tab[1,2]='X')and(tab[2,2]='X')and(tab[3,2]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,3]='X')and(tab[3,3]='X')then
wynik:='X';
if(tab[1,1]='X')and(tab[1,2]='X')and(tab[1,3]='X')then
wynik:='X';
if(tab[2,1]='X')and(tab[2,2]='X')and(tab[2,3]='X')then
wynik:='X';
if(tab[3,1]='X')and(tab[3,2]='X')and(tab[3,3]='X')then
wynik:='X';
if(tab[1,1]='X')and(tab[2,2]='X')and(tab[3,3]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,2]='X')and(tab[3,1]='X')then
wynik:='X';
_______________________________________________
co do zmiennej "wynik" to tutaj ją można wstawić? ----> i,n,k,wynik:integer;
Sam to pisałeś? Bo jakoś wątpię...
Przede wszystkim nie będzie działać dlatego, że w sprawdzaniu wyniku sprawdzasz wielkie litery 'X' i 'O', a w grze wprowadzasz małe. Poza tym możnaby się przyczepić paru szczegółów:
- brak sprawdzania czyja jest kolej - na dobrą sprawę może cały czas grać "kółko" i będzie ok
- pętla gry powinna się kończyć w momencie, gdy ktoś wygrał albo w momencie gdy cała plansza jest zajęta (9 poprawnych ruchów - nie takich "Miejsce zajete"), a nie gdy gracz wprowadzi spację
- we fragmencie:
if (v='x')or(v='o')
then
clrscr;
begin
clrscr chyba też miał być wewnątrz "begin - end"? Bo inaczej nie widzę sensu w ogóle wstawiać tam begina i enda. W tym momencie na dobrą sprawę można wpisać na pole dowolny znak a nie tylko 'x' lub 'o'.
no bez tego clrscr'a za kazdym podaniem miejsca w ktorym ma byc x albo o robiła się nowa tablica ten clrscr sprawia, że wszystko jest na jednej ale to wiesz. tak wiem, że program nie jest "idealny" i tak tez ma nie być. nie musi mówić kogo kolej itp. chce tylko by na końcu pokazywał kto wygrał i to wszystko. no dobra jeśli zmienie wielkość x i o, w któe miejsce wstawić te sprawdzenia? tylko o to mi chodzi niczego więcej nie chce... chce to zaliczyć i mieć z głowy. jestem Biol/Gegr a programowanie to czarna magia. pisałem to na lekcji przy pomocy kumpla.
jeśli nie integer jako wynik to?
Lepiej od razu się przyznaj od kogo ten programik zerżnąłeś albo kto ci go pisał... :/
Wstaw to pomiędzy until v=' '; a end; który jest zaraz poniżej. A "jeśli nie integer to..." może char? :|
uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v,wynik:char;
procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('Wpisz x albo o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('Podaj kolumne: ');
readln(n);
write('Podaj wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('Miejsce zajete');
for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;
end;
until v=' ';
if(tab[1,1]='X')and(tab[2,1]='X')and(tab[3,1]='X')then
wynik:='X';
if(tab[1,2]='X')and(tab[2,2]='X')and(tab[3,2]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,3]='X')and(tab[3,3]='X')then
wynik:='X';
if(tab[1,1]='x')and(tab[1,2]='x')and(tab[1,3]='x')then
wynik:='x';
if(tab[2,1]='x')and(tab[2,2]='x')and(tab[2,3]='x')then
wynik:='x';
if(tab[3,1]='x')and(tab[3,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,1]='x')and(tab[2,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,2]='x')and(tab[3,1]='x')then
wynik:='x';
if(tab[1,1]='O')and(tab[2,1]='O')and(tab[3,1]='O')then
wynik:='O';
if(tab[1,2]='O')and(tab[2,2]='O')and(tab[3,2]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,3]='O')and(tab[3,3]='O')then
wynik:='O';
if(tab[1,1]='o')and(tab[1,2]='o')and(tab[1,3]='o')then
wynik:='o';
if(tab[2,1]='o')and(tab[2,2]='o')and(tab[2,3]='o')then
wynik:='o';
if(tab[3,1]='o')and(tab[3,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,1]='o')and(tab[2,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,2]='o')and(tab[3,1]='o')then
wynik:='o';
end;
begin
clrscr;
krzyzyk;
readkey;
end.
czyli po zmianie x'ow i o będzie tak.
spoiler start
pisałem znajomy mi "pomagał"
spoiler stop
Nie pozmieniałeś wszystkich 'X' i 'O' na małe. Poza tym przydałoby się jeszcze wypisać ten wynik, bo cóż z tego, że program sobie go ustali.
tutaj z poprawionymi wielkościami liter
uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v,wynik:char;
procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('prosze o wpisanie x lub o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('prosze o podanie kolumny kolumne: ');
readln(n);
write('prosze o podanie wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('przepraszam ale to miejsce jest juz zajete');
for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;
end;
until v=' ';
if(tab[1,1]='x')and(tab[2,1]='x')and(tab[3,1]='x')then
wynik:='x';
if(tab[1,2]='x')and(tab[2,2]='x')and(tab[3,2]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,3]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,1]='x')and(tab[1,2]='x')and(tab[1,3]='x')then
wynik:='x';
if(tab[2,1]='x')and(tab[2,2]='x')and(tab[2,3]='x')then
wynik:='x';
if(tab[3,1]='x')and(tab[3,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,1]='x')and(tab[2,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,2]='x')and(tab[3,1]='x')then
wynik:='x';
if(tab[1,1]='o')and(tab[2,1]='o')and(tab[3,1]='o')then
wynik:='o';
if(tab[1,2]='o')and(tab[2,2]='o')and(tab[3,2]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,3]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,1]='o')and(tab[1,2]='o')and(tab[1,3]='o')then
wynik:='o';
if(tab[2,1]='o')and(tab[2,2]='o')and(tab[2,3]='o')then
wynik:='o';
if(tab[3,1]='o')and(tab[3,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,1]='o')and(tab[2,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,2]='o')and(tab[3,1]='o')then
wynik:='o';
end;
begin
clrscr;
krzyzyk;
readkey;
end.
w sensie by wypisać wynik po każdym if'ie gdzie jest "wynik:='o';" zastąpić to writeln(wynik:='o'); ??