Strona Główna - Artykuły - Galeria - Szukaj - Dziennik Lekcyjny
Nawigacja
Portal
  Strona Główna
  Artykuły
  Galeria
  Kontakt
  Linki
  SZOK
  Szukaj

O nas
  Historia
  Kadra
  Kierunki kształcenia
  Patroni
  Polska i Litwa
  Prasa o szkole
  Projekty Unijne

Dla uczniów
  Informatyka
  Konkursy
  Pedagog
  Pobierz
  Sport
  Druki

Dla rodziców
  Dziennik Lekcyjny

Rekrutacja
  Kierunki kształcenia
  Nabór 2011/2012

Różne

Reklama

Spacerkiem po Myśliborzu

Wirtualny Myślibórz

Matura z OPERONEM

Powiat Myśliborski

Wyższa Szkoła Integracji Europejskiej

Gimnazjum im. Dariusa i Girenasa w Kownie

Angielski
Wpisz wyrażenie polskie lub angielskie:

Niemiecki
Wpisz wyrażenie polskie lub niemieckie:

Delphi - cz 5

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 są 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. Są 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ę strzałka - 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 :)

Dodane przez Root dnia marzec 08 2008 00:20:40 · 0 Komentarzy · 94 Czytań · Drukuj
Komentarze
Brak komentarzy.
Dodaj komentarz
Zaloguj się, żeby móc dodawać komentarze.
Oceny
Dodawanie ocen dostępne tylko dla zalogowanych Użytkowników.

Proszę się zalogować lub zarejestrować, żeby móc dodawać oceny.

Brak ocen.
Ulubione i Startowa
Licznik
29 czerwca

KONIEC ROKU SZKOLNEGO
Ostatnie Artykuły
Powtorka z gramatyki...
Powtorka z gramatyki...
Nauka jezyka Angiels...
Delphi - cz 18
Delphi - cz 17
Delphi - cz 16
Delphi - cz 15
Delphi - cz 14
Delphi - cz 13
Delphi - cz 12
Najchętniej pobierane
Delphi 7 Personal 1359
C++Builder 6 Personal 1011
Kalkulator okienkowy 963
Podstawy JavaScript 856
Kalkulator Konsolowy 795
WebBrowser 2.0 Beta 705
Kalkulator w C# 703
Szyfrator 689
Screenshots 635
Renamer v1.0 by David23 634
Zegar & Kalendarz
Logowanie
Nazwa Użytkownika

Hasło

Zapamiętaj mnie



Rejestracja
Zapomniane hasło?