Chce żeby zamias X i O pojawiał się rysunek i żeby procedura sprawdzająca czy jest wygrana dobrze działała. Co zrobić??
Weź sobie TImage'i i postawiaj tak jak należy (odpowiednie pozycje) a potem LoadFromFile odpowiedni obrazek.
Łatwiej załadować obrazek, a później operować przez Imagex.Visible
A co z procedurą??
//No musisz ja napisac przecieŻ,,,
Chłopie jak myślisz po co są KODY ŹRÓDŁOWE!? Zobacz tam a gwarantuje ci że znajdziesz to co chcesz.
No zrob jak robisz na speedbuttonach to wpisz cos takiego
If speedbutton1.down=true then
speedbutton1.Glyph.LoadFromFile('C:\aadasd.bmp')
else
speedbutton1.Glyph.FreeImage;
Po pierwsze zastosuj speedButtony z karty Aditional. One mają taką właściwość jak Glyph - to jest po prostu jakby wstawianie rysunku na przycisk.
A jeżeli chodzi o prockę, to po prostu same warunki...
Powiedzmy, że speedButtony masz tak nazwane:
s1, s2, s3
s4, s5, s6
s7, s8, s9
I po prostu sprawdzasz:
if ((s1.glyph=kolko) and (s2.glyph=kolko) and (s3.glyph=kolko)) or (s4.....
then wygrana:=true
rozumiesz?
A jeżeli chodzi o prockę, to po prostu same warunki...
(...)
if ((s1.glyph=kolko) and (s2.glyph=kolko) and (s3.glyph=kolko)) or (s4.....
then wygrana:=true
Nie chcę nic mówić, ale to cholernie nieeleganckie rozwiązanie...
sugerowałbym jakąś pętlę. Coprawda w tym przypadku, to niewielka różnica, ale spróbuj tak sprawdzać, czy np. gra w kropki jest wygrana...
Może mnie źle zrozumieliście chodzi mi o to że kiedy kliknie się na speedbuttona to pojawi się rysunek oznaczający kółko albo obrazek oznaczający krzyzyk. I to mi sie udaje żeby tak było. Druga rzecz chodzi mi co napiać w procedurze sprawdzającej??
No przecież procedurę sprawdzającą masz napisaną powyżej, co za problem ją rozwinąć o kolejne przypadki. A co do kółka / krzyżyka: to zrób dwa Image jeden na drugim z odpowiednio kółkiem bądź krzyżykiem i operuj przez Visible, zresztą obojętnie, jak wolisz. Ale procedury sprawdzającej nie da się chyba zwinąć bardziej, żeby była krótsza.
ale spróbuj tak sprawdzać, czy np. gra w kropki jest wygrana...
No to byłoby samobójstwo, ale na szczęście tu chodzi jedynie o kółko i krzyżyk :)
A ile mnie pamiec na zawodzi to jest taki komponent jak DrawGrid. Z niego najlepiej skorzystac. Jesli mialbys w tablica zapisame tak: Puste miejsce = 0, Kolko = 1, Krzyzyk = 10, to mozesz tak sprawdzic:
Procedure PuscWiadomosc(var Liczba: Byte);
begin
If Liczba = 3 then ShowMessage('Kolko wygrywa') else
If Liczba = 30 then ShowMessage('Krzyzyk wygrywa');
Liczba:= 0;
end;
Procedure Sprawdz;
begin
For a2:= 1 to 3 do
begin
a1:= T[a2, 1] + T[a2, 2] + T[a2,3];
PuscWiadomosc(a1);
a1:= T[1, a2] + T[2, a2] + T[3,a2];
PuscWiadomosc(a1);
end;
a1:= T[1, 1] + T[2, 2] + T[3, 3];
PuscWiadomosc(a1);
a1:= T[1, 3] + T[2, 2] + T[3, 1];
PuscWiadomosc(a1);
end;
No, i juz :).
No przecież procedurę sprawdzającą masz napisaną powyżej, co za problem ją rozwinąć o kolejne przypadki. A co do kółka / krzyżyka: to zrób dwa Image jeden na drugim z odpowiednio kółkiem bądź krzyżykiem i operuj przez Visible, zresztą obojętnie, jak wolisz. Ale procedury sprawdzającej nie da się chyba zwinąć bardziej, żeby była krótsza.
Ale to co jest u góry u mnie nie chce działać , bo trzeba jeszcze oznaczyć że kółko to będzie rysunek, a krzyżyk też jakiś inny rysunek tylko w którym miejscu to zaznaczyć.
Równaniem to będzie tak:
kolko=obrazek1.bmp
krzyzyk=obrazek2.bmp
Hej chłopaki ja bym to zrobił tak:
-array of array of TSpeedButton i komponenty tworzone dynamicznie
-przy kliknięciach ładowanie odpowiedniego glypha z zasobów
-procedurka która niezależnie od rozmiaru tablicy buttonów sprawdza każdy rząd, każdą kolumnę i każdą przekątną
dzięki czemu użytkownik mógłby sobie ustawić np. planszę 4x4 lub 5x5
No i co wy na to?
po pierwsze to na tej stronie widziałem już kilka <font color="red">kółków i krzyżyków</span>.
Po drugie je bym zrobił tak:
Speedbutton1.Glyph.LoadfromFile('kolko.bmp');
speedbutton1.Tag := 1;
i tak dalej...
if (speedbutton1.tag = 1) and (speedbutton2.Tag = 1) and (speedbutton3.tag = 1) then
showmessage('Wygrałęś');
[dopisane]
aha a do krzyżyków dopisz tagi := 2.
po pierwsze to na tej stronie widziałem już kilka <font color="red">kółków i krzyżyków</span>.
Po drugie je bym zrobił tak:Speedbutton1.Glyph.LoadfromFile('kolko.bmp');
speedbutton1.Tag := 1;i tak dalej...
if (speedbutton1.tag = 1) and (speedbutton2.Tag = 1) and (speedbutton3.tag = 1) then
showmessage('Wygrałęś');[dopisane]
aha a do krzyżyków dopisz tagi := 2.
CZy to ma wyglądać tak
procedure TForm1.g1Click(Sender: TObject);
begin
if gracz1.Down then
g1.Glyph.LoadFromFile('pj.bmp')
g1!!!!.Tag :=1;
if gracz2.Down then
g1.Glyph.LoadFromFile('pc.bmp')
g1!!!!.Tag :=2;
bo jeśli to wyskakuje błąd (tam gdzie są wykrzykniki) 'Missing operator or semicolon
Tak się składa, że pisałem ostanio coś takiego. Zapisywałem pozycje kółek i krzyżków do tablicy matryca : array[0..2, 0..2] of string[1], bo z charem jakoś coś nie chciało w którymś miejscu działać. Napisałem taką funkcję sprawdzającą :
procedure TForm2.sprawdz_czy_koniec;
var
x, y : integer;
punkty : byte;
ostatnio : string[1];
jest_zwyciezca : boolean;
begin
jest_zwyciezca := false;
//sprawdzamy kolumny
for x := 0 to 2 do begin
ostatnio := '';
punkty := 0;
for y := 0 to 2 do begin
if ostatnio = '' then ostatnio := matryca[x, y];
if ostatnio '' then begin
if ostatnio = matryca[x, y] then punkty := punkty + 1;
end;
end;
if punkty = 3 then begin
showmessage('Wygrywa '+ostatnio+'!!');
jest_zwyciezca := true;
end;
end;
//sprawdzamy wiersze
for y := 0 to 2 do begin
ostatnio := '';
punkty := 0;
for x := 0 to 2 do begin
if ostatnio = '' then ostatnio := matryca[x, y];
if ostatnio '' then begin
if ostatnio = matryca[x, y] then punkty := punkty + 1;
end;
end;
if punkty = 3 then begin
showmessage('Wygrywa '+ostatnio+'!!');
jest_zwyciezca := true;
end;
end;
//sprawdzamy skosy
if ((matryca[0,0] = matryca[1,1]) and (matryca[1,1] = matryca[2,2]) and
(matryca[0,0] '')) then begin
showmessage('Wygrywa '+matryca[0,0]+'!!');
jest_zwyciezca := true;
end;
if ((matryca[0,2] = matryca[1,1]) and (matryca[1,1] = matryca[2,0]) and
(matryca[0,2] '')) then begin
showmessage('Wygrywa '+matryca[0,2]+'!!');
jest_zwyciezca := true;
end;
//sprawdzamy, czy partia bez zwycięzcy
if (ilosc_ruchow = 9) and (not jest_zwyciezca) then
showmessage('Partia bez zwycięzcy.');
if jest_zwyciezca or (ilosc_ruchow = 9) then button1click(button1);
end;
No dobra udało mi się
if (g1.tag = 1) and (g2.tag = 1) and
(g3.tag = 1) or (g1.tag = 2) and
(g2.tag = 2) and (g3.tag = 2) then
Wygrana;
tak wygląga procedura sprawdzająca ale jest big problem
Jak sprawdzam czy jest dobrze to jeśli w jednym rzędzie, kolumnie czy przekątnej są trzy rysunki z czego dwa jednakowe a trzeci inny to wygrywa osoba która ostatnia kliknęła wstawiając znaczek. Czy jest na to jakaś rada??
deklarujesz zmienną globalną
np:
p:boolean;
i w każdym speedbuttonie wpisujesz:
if p=true then p:=false else then:=true;
{potem masz obrazki jeden na drugim x1 -krzyżyk o1-kółko i piszesz}
if p=true then x1.visible:=true else o1.visible:=true;
speedbutton1.visible:=false;
w następnym to samo ale inne nazwy:
if p=true then p:=false else then:=true;
if p=true then x2.visible:=true else o2.visible:=true;
speedbutton2.visible:=false;
obrazki kólka i krzyzyka musisz mieć ustawione na visible :=false
(i muszą znajdować się w komponencie TImage)
a speedbuttony na true
a żeby sprawdzić wygraną(do tego co podałem wcześniej):
procedure wygrana;
if x1.visible=true then
if x2.visible=true then
if x3.visible=true then begin
Showmesage('wygrał krzyżyk');
...
i tak wszystkie przypadki (będzie chyba 16)
jeżeli chcesz to sprawdzić to tą procedure musisz dać do 'ONPaint' Formy
Stworzenie gry X O jest opisane w kursie (chyba, ten w formacie *.htm, ale nie pamiętam dobrze). Tam masz opisane jak sie sprawdza, czy jest wygrana itp itd. Możesz wstawiać także dźwięki, ale poczytaj najpierw kurs! B-|
Ten temat jest tak popularny, że postanowiłem dodać moje kółko i
krzyżyk, pisane na zaliczenie tam dla kogoś, na serwer. Jest pod
http://www.4programmers.net/download.php?id=990