delphi kurs Lekcja05

Delphi, cz. 5


Tak jak mówiłem w tym rozdziale zajmiemy się czymś innym, a mianowicie napiszemy grę: "Kolko i Krzyżyk". Myślisz, ze to trudne? Wcale nie. Zacznijmy wiec. Aha, na stronie: www.programowanie.of.pl możesz ściągnąć kilka gier Kolko i Krzyżyk wraz z kodami źródłowymi.


Pierwsze kroki


Stwórz nowy formularz ( "File" -> "New Application" ). Teraz zapisz projekt ( "File" -> "Save All" ) pod nazwa "kik.dpr" i "MainForm.pas" jako nazwa formularza. W Inspektor Obiektów zmień właściwość "Name" formy na "MainFrm", a "Caption" na "Kolko i Krzyżyk 1.0". Na początek na formularzu potrzebować będziemy 9 przycisków typu "TSpeedButton" ( zakładka: "Additional" ). Umieść te 9 przycisków obok siebie. Teraz obrysuj myszka te 9 przycisków - wszystkie przyciski zostaną zaznaczone. Teraz w Inspektor Obiektów zmień właściwość "Height" i "Width" tych przycisków na 30. Na formularzu umieść jeszcze dwa przyciski typu "SpeedButton" (zakładka: "Additional" ). Te dwa przyciski symbolizować będą gracza pierwszego i drugiego. Zmień właściwość "Name" pierwszego z przycisków na "Player1", a drugiego na "Player2". Teraz zmień właściwość "Caption" pierwszego z przycisków na "Gracz 1", a drugiego na "Gracz 2". Rozciągnij trochę te dwa przyciski tak, aby mieścił się w nich napis.

Teraz ponownie zaznacz dwa przyciski "Gracz 1" i "Gracz 2". W Inspektor Obiektów we właściwości "GroupIndex" wpisz cyfrę 1. Ta właściwość określa tzw. grupę. Przekonasz się o tym później. Teraz zaznacz jedynie pierwszy z przycisków i w Inspektor Obiektów zmień jego właściwość "Down" na "True". Od tej pory jeden z przycisków będzie "wciśnięty". Po naciśnięciu na jeden przycisk drugi zostanie "wciśnięty", a drugi "wciśnięty". Dzieje się tak, dlatego, ze właściwość "GroupIndex" tych dwóch przycisków jednakowe.


Pisanie kodu


Teraz zajmiemy się pisaniem kodu. Przełącz się do edytora kodu ( F12 ). Pod słowem "private" dopisz taka linie:


procedure Change;


Teraz uzupełnij procedure ( jak to zrobić - pisałem w poprzednich rozdziałach ) i wpisz w niej taki kod:


{

Ta procedura zmienia ustawienia "Down" przycisków

}

if Player1.Down then //Jezeli wcisniety jest klawisz Player1

Player2.Down := True //Wcisnij klawisz Player2

else //Jezeli jest odwrotnie....

Player1.Down := True; //...wcisnij klawisz Player1



Właściwie to, co najważniejsze zostało opisane w komentarzach. Procedura zmienia kolejność "wciśnięcia" przycisków - najpierw jeden potem drugi :) Teraz do sekcji "private" dopisz jeszcze jedna linie:


procedure CheckIt;


Ta procedura będzie sprawdzać wygrane. Tak jak poprzednio uzupełnij procedure w ten sposób:


{

Ta procedura sprawdza czy padla wygrana czy tez nie.

Konstrukcja tej peoceury jest bardzo prosta. Calosc polega

na sprawdzaniu czy na klawiszu jest napis 'X', czy 'O'.

Nastepnie nastepuje sprawdzenie, czy ten sam napis jest takze

na innych przyciskach. Jezeli tak generowana jest procedura Winner

}


if (b1.Caption = 'X') and (b2.Caption = 'X') and

(b3.Caption = 'X') or (b1.Caption = 'O') and

(b2.Caption = 'O') and (b3.Caption = 'O') then

Winner;


if (b1.Caption = 'X') and (b5.Caption = 'X') and

(b9.Caption = 'X') or (b1.Caption = 'O') and

(b5.Caption = 'O') and (b9.Caption = 'O') then

Winner;


if (b1.Caption = 'X') and (b4.Caption = 'X') and

(b7.Caption = 'X') or (b1.Caption = 'O') and

(b4.Caption = 'O') and (b7.Caption = 'O') then

Winner;


if (b4.Caption = 'X') and (b5.Caption = 'X') and

(b6.Caption = 'X') or (b4.Caption = 'O') and

(b5.Caption = 'O') and (b6.Caption = 'O') then

Winner;


if (b7.Caption = 'X') and (b8.Caption = 'X') and

(b9.Caption = 'X') or (b7.Caption = 'O') and

(b8.Caption = 'O') and (b9.Caption = 'O') then

Winner;


if (b2.Caption = 'X') and (b5.Caption = 'X') and

(b8.Caption = 'X') or (b2.Caption = 'O') and

(b5.Caption = 'O') and (b8.Caption = '0') then

Winner;


if (b3.Caption = 'X') and (b6.Caption = 'X') and

(b9.Caption = 'X') or (b3.Caption = 'O') and

(b6.Caption = 'O') and (b9.Caption = 'O') then

Winner;


if (b3.Caption = 'X') and (b5.Caption = 'X') and

(b7.Caption = 'X') or (b3.Caption = 'O') and

(b5.Caption = 'O') and (b7.Caption = 'O') then

Winner;


end;


Jak widisz procedura jest trochę dluga, dlatego, ze musi uwzgledniac wszystkie warianty wygranej. Rozumiesz, wszystkie ixy w lini poziomej, pionowej, ukośnie itp., itd.

W przypadku, gdy ktoś wygra wywoływana będzie procedura "Winne", która później napiszemy. Pewnie zauważyłeś "tajemnicze" "b1", "b2" itp. to nazwy naszych 9 przycisków, na których umieszczane będą symbole X i O. A wiec przełącz się do formularza ( F12 ). Zmień właściwość "Name" tych przycisków na "b1" do "b9".


Co teraz? Teraz musisz napisać procedure, która generowana będzie po naciśnięciu na klawisz. Kliknij na pierwszy z przycisków ( b1 ) - zostaniesz przeniesiony do edytora kodu. Musisz do tej procedury wpisać kod:


{

To jest taka sama procedura dla wszytkich

przycisków. Jezeli przycisk "Gracz1" jest wciśnięty

to postawiony jest 'X', w przeciwenym wypadku 'O'

}

if Player1.Down then

TSpeedButton(Sender).Caption := 'X'

else

TSpeedButton(Sender).Caption := 'O';


CheckIt;

Change;

{ Procedura, ktora jest wywolywana po kazdorazowym

naciśnięciu przycisku sluzy do zmian wartosci "Down"

przyciskow Player1, Player2

}


Widzisz powiązanie z tym, co robiliśmy w poprzednim rozdziale? Już omawiam, o co chodzi w tej procedurze. Najpierw następuje sprawdzanie, czy naciśnięty jest przycisk "Player1". Jeżeli tak jest to wartość "Down" przybierze wartość "true". A jeżeli się tak stanie to na aktywnym przycisku typu "TSpeedButton" wartość "Caption" zmieni się na "X". Jeżeli jest inaczej tzn., ze wciśnięty jest przycisk "Player2". Jeżeli tak jest to na przycisku "TSpeedButton" będzie widniał napis symbolizujący kolko ( "O" ). Jeżeli czegoś w tej procedurze nie rozumiesz to zerknij do poprzedniego rozdziału. Na samym końcu wywołane zostaną dwie procedury, które już napisaliśmy wcześniej. Teraz znów przełącz się do formularza. Kliknij pojedynczo na przycisku "b2". Teraz w Inspektor Obiektów kliknij na zakładce "Events". Odnajdź pole "OnClick" - zaznacz je. Po prawej stronie pojawi się strzka - kliknij ja - rozwinie się menu, w którym odszukaj pozycje "b1Click" i kliknij je. Od tej pory po kliknieciu na przycisku "b2" zostanie wywołana procedura "b1Click". Zrób tak z pozostałymi przyciskami przypisując im te sama procedure ( "b1" ). Do zakończenia pisania programu pozostało jeszcze napisanie procedury "Winne".

Dodaj do sekcji "private" linie:


procedure Winne;


Uzupełnij procedure w ten sposób:


{

Procedura wyswietla okienko w przypadku, gdy ktos

wygral.

}

if Player1.Down then

ShowMessage(Format('Jest OK, wygral gracz %s', [Player1.Caption]))

else

ShowMessage(Format('Jest OK, wygrał gracz %s', [Player2.Caption]));


Nowością w tej procedurze jest funkcja "Format". Najpierw omówię funkcje "Format". Mogłem oczywiście napisać tak:


ShowMessage('Jest OK, wygral gracz ' + Player1.Caption);


Mogłem, ale w tym kursie chodzi o uczenie się nowych rzeczy, a wiec zdecydowałem się użyć funkcji "Format". Spójrz na poniższy kod:


var

I : Integer;

begin

I := 20;

ShowMessage('Tak ta liczba to: ' + IntToStr(i));

end;


W tym wypadku następuje konwersja ze zmiennej "Integer" na "String". Funkcja "Format" robi to samo lecz bez użycia funkcji "IntToStr". Można to napisać tak:


var

I : Integer;

begin

I := 20;

ShowMessage(Format('Tak ta liczba to %d', [i]);

end;


Ta funkcja podobna jest do C++. Po prostu w miejscu gdzie znajduje się znak "%d" ma się znaleźć zmienna "Integer" ( tak to tłumaczy kompilator ).Następnie po przecinku i nawiasie klamrowym wpisana zostanie zmienna, właśnie "Integer". Zamiast znaku "%d" można wstawić:


%d - liczba "Integer"

%s -zmienna "String"

%c - zmienna "Char"

%f - zmienna typu "Double"



Procedura "Winne" jest prosta. W zależności od tego, który przycisk jest wciśnięty wyświetlony zostaje komunikat o wygranej.

Właściwie napisałeś już grę. Możesz teraz już ja uruchomić ( F9 ). Dla poprawienia wyglądu możesz jeszcze w każdym z 9 przycisków zmienić w Inspektor Obiektów właściwość "Flat" na "True". Spowoduje to "spłaszczenie" przycisków. Możesz także zmienić czcionkę na tych 9 przyciskach. W Inspektor Obiektów pod nazwa "Font". Możesz ja pogrubić i zmienić rozmiar.


Jeżeli będą Ci występować błędy, czegoś nie będziesz wiedział to pisz do mnie ( boduch@poland.com ) albo najlepiej ściągnij sobie te grę z Internetu ze strony: www.programowanie.of.pl. [ dział "Źródła" ].


Nie obawiaj się jeżeli czegoś nie rozumiesz. Z czasem pojmiesz o co chodzi - wiesz mi :)


Jak zawsze czekam na listy.






Wyszukiwarka

Podobne podstrony:
delphi kurs Lekcja03
delphi kurs Lekcja07
delphi kurs Lekcja04
delphi kurs Lekcja08
delphi kurs Lekcja06
(Delphi) - Delphi - Kurs, Doc01
delphi 7 0 kurs 4GNJNMPSG24R322W2DJOTEOF4OCTOKUGOVHJMSQ
LINGO ROSYJSKI raz a dobrze Intensywny kurs w 30 lekcjach PDF nagrania audio audio kurs
AutoCAD - Kurs zaawansowany - Lekcja 09, autocad kurs, Zaawansowany
[lekcja 20] Funkcje, a słowo kluczowe return Kurs C++ » Poziom 2
[lekcja 11] Operacje porównania Kurs C++ » Poziom 1
[lekcja 13] Instrukcja warunkowa if else Kurs C++ » Poziom 1
AutoCAD - Kurs podstawowy - Lekcja 09, autocad kurs, Podstawowy
AutoCAD - Kurs zaawansowany - Lekcja 05, autocad kurs, Zaawansowany
AutoCAD - Kurs zaawansowany - Lekcja 11, autocad kurs, Zaawansowany
[lekcja 12] Operacje logiczne Kurs C++ » Poziom 1
Kurs dal początkujących- 10 lekcji, Lekcja 10-Wytłaczanie metodą GetShape, Wytłaczanie metodą GetSha
Kurs dal początkujących- 10 lekcji, Lekcja 8-Operacje logiczne, Operacje logiczne