Kolko i krzyzyk

0

Chce żeby zamias X i O pojawiał się rysunek i żeby procedura sprawdzająca czy jest wygrana dobrze działała. Co zrobić??

0

Weź sobie TImage'i i postawiaj tak jak należy (odpowiednie pozycje) a potem LoadFromFile odpowiedni obrazek.

0

Łatwiej załadować obrazek, a później operować przez Imagex.Visible

0

A co z procedurą??

//No musisz ja napisac przecieŻ,,,

0

Chłopie jak myślisz po co są KODY ŹRÓDŁOWE!? Zobacz tam a gwarantuje ci że znajdziesz to co chcesz.

0

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;

0

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?

0

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...

0

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??

0

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.

0

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 :)

0

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 :).

0

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

0

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?

0

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.

0

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

0

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;

0

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??

0

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

0

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

0

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-|

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1