borland cpp builder cw11 id 920 Nieznany (2)

background image

Programowanie obiektowe. Ćwiczenie 11. 1

______________________________________________________________________










PROGRAMOWANIE OBIEKTOWE

ĆWICZENIE 11





Projektowanie prostej gry planszowej

Implementacja algorytmu minimax

Aplikacja GRA „Kółko i krzyzyk”

















background image

2

Programowanie obiektowe. Ćwiczenie 11.

______________________________________________________________________

______________________________________________________________________

I.

Wstęp

Zanim rozpoczniesz ćwiczenie, utwórz podkatalog KK w katalogu Projects oraz

utwórz następujące trzy pliki – użyj dowolnego edytora graficznego – możesz użyć
Tools







ImageEditor w środowisku Builder’a:

kolo.bmp

krzyz.bmp

puste.bmp






Parametry ww. plików:
Szerokość : 50 pikseli
Wysokość : 50 pikseli
Kolory: VGA(16)

Utwórz ikonę aplikacji i zapisz ją w pliku kk.ico

Uruchom Buildera

File







New





Application

File







Save All

W katalogu KK zapisz: kk.bpr, kk.cpp, kkUnit1.h, kkUnit1.cpp,
kkUnit1.dfm

II.

Tworzenie interfejsu gry


Teraz zaprojektuj interfejs graficzny gry:

background image

Programowanie obiektowe. Ćwiczenie 11. 3

______________________________________________________________________

Utwórz panel główny o nazwie PG (klasa TPanel)
W panelu PG umieść następujące obiekty:

Obiekty

Klasa

Linia1, Linia2, Linia3, Linia4, Linia5,
Linia6, Linia7, Linia8
– czarne linie
rozdzielające pola

TShape

Image0, Image1, Image2, Image3,
Image4, Image5, Image6, Image7,
Image8
– obrazy ‘O’ i ‘X’

TImage


Utwórz panel sterujący o nazwie PS (klasa TPanel)
W panelu PS umieść następujące obiekty:

Obiekty

Klasa

ButtonStart, ButtonKoniec – przyciski
aplikacji

TButton

Label11

TLabel

StaticTextCzlowiek = ‘CZŁOWIEK’
StaticTextKomputer = ‘KOMPUTER’
StaticTextStatus;

TStaticText


ImageCzlowiek = ‘KOLO.BMP’
ImageKomputer = ‘KRZYZ.BMP’

TImage

UWAGA:

W obiekcie StaticTextStatus będziemy wyświetlać stan aktualny gry.


Utwórz obiekt nazwie GroupBox1 (klasa TGroupBox)
W obiekcie GroupBox1 umieść następujące obiekty:

Obiekty

Klasa

LabelLastStatus,
Label10=’Kto poprzednio wygrał:’

TLabel

UWAGA:

W obiekcie LabelLastStatus będziemy wyświetlać stan ostatniej gry w

formacie tekstowym – stan należy pobierać z pliku KK_CONFIG.DAT.

Tworzenie metod do zdarzeń

Każde kliknięcie obiektu: Image0, Image1, Image2, Image3, Image4, Image5,
Image6, Image7, Image8
spowoduje odpowiednią reakcję aplikacji:

Np. kliknięcie w obraz Image0, czyli wybranie pola nr 0, spowoduje uruchomienie
algorytmu zapisanego w funkcji kontrola().

void __fastcall TForm1::Image0Click(TObject *Sender)
{
nr_pola = 0;
kontrola();
}



background image

4

Programowanie obiektowe. Ćwiczenie 11.

______________________________________________________________________

______________________________________________________________________


Utwórz metody dla pozostałych obrazów: ,Image1, Image2, Image3, Image4, Image5,
Image6, Image7, Image8.


III.

Implementowanie algorytmu

Wykonaj aplikację w Borland C++ realizującą poniższe założenia:

GRA PLANSZOWA – KÓŁKO I KRZYśYK

ZAŁOśENIA

Plansza

3 x 3

(Liczba pól na planszy: 9)

Pola numerowane są od 0 do 8.

Pierwszy ruch należy do człowieka

.

Cel algorytmu:

Algorytm (komputer) nie może przegrać z człowiekiem,

może wygrać bądź zremisować.

Przykład działania gotowej aplikacji

Start gry

background image

Programowanie obiektowe. Ćwiczenie 11. 5

______________________________________________________________________

Przebieg gry

Biblioteki:

#include <fstream.h>
#include <iostream.h>

Stałe:

#define TITLE1 " Kółko i krzyżyk "
#define TITLE2 " PRZETWARZAM INFORMACJE ......... "
#define SIZE 9
#define CZLOWIEK 0 // POLE KÓŁKO - człowiek
#define KOMPUTER 1 // POLE KRZYśYK - komputer
#define PUSTE 2 // POLE PUSTE
#define WIN_CZLOWIEK "CZŁOWIEK" // wygrał człowiek
#define WIN_KOMPUTER "KOMPUTER" // wygrał komputer
#define WIN_REMIS "REMIS" // remis
#define KK_CONFIG "KK_CONFIG.DAT"

Zmienne globalne:

int plansza[SIZE] = {PUSTE,PUSTE,PUSTE,PUSTE,PUSTE,PUSTE,PUSTE,PUSTE,PUSTE};
int aktualny_gracz = CZLOWIEK; // rozpoczyna CZŁOWIEK
int nr_pola = -1; // nr klikniętego pola









background image

6

Programowanie obiektowe. Ćwiczenie 11.

______________________________________________________________________

______________________________________________________________________

Funkcje obsługujące interfejs graficzny

AnsiString get_obraz(int stan)
{
AnsiString FileName;
switch (stan)
{
case PUSTE : { FileName="puste.bmp"; break; };
case CZLOWIEK : { FileName="kolo.bmp"; break; };
case KOMPUTER : { FileName="krzyz.bmp"; break; };
default : FileName="";
};
return FileName;
}

// Funkcja rysuje plansz

ę

gry w kółko i krzy

ż

yk.

// Plansza przechowywana jest w tablicy plansza[] o rozmiarze 9 x 9
// w elementach o nast

ę

puj

ą

cych indeksach:

// plansza[0] plansza[1] plansza[2]
// plansza[3] plansza[4] plansza[5]
// plansza[6] plansza[7] plansza[8]
void plansza_wyswietl(void)
{
if (plansza[0]==PUSTE)
{
Form1->Image0->Enabled = true;
Form1->Image0->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image0->Enabled = false;
Form1->Image0->Picture->LoadFromFile(get_obraz(plansza[0]));
};
if (plansza[1]==PUSTE)
{
Form1->Image1->Enabled = true;
Form1->Image1->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image1->Enabled = false;
Form1->Image1->Picture->LoadFromFile(get_obraz(plansza[1]));
};
if (plansza[2]==PUSTE)
{
Form1->Image2->Enabled = true;
Form1->Image2->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image2->Enabled = false;
Form1->Image2->Picture->LoadFromFile(get_obraz(plansza[2]));
};
if (plansza[3]==PUSTE)
{
Form1->Image3->Enabled = true;
Form1->Image3->Picture->LoadFromFile("puste.bmp");
}

background image

Programowanie obiektowe. Ćwiczenie 11. 7

______________________________________________________________________

else
{
Form1->Image3->Enabled = false;
Form1->Image3->Picture->LoadFromFile(get_obraz(plansza[3]));
};
if (plansza[4]==PUSTE)
{
Form1->Image4->Enabled = true;
Form1->Image4->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image4->Enabled = false;
Form1->Image4->Picture->LoadFromFile(get_obraz(plansza[4]));
};
if (plansza[5]==PUSTE)
{
Form1->Image5->Enabled = true;
Form1->Image5->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image5->Enabled = false;
Form1->Image5->Picture->LoadFromFile(get_obraz(plansza[5]));
};
if (plansza[6]==PUSTE)
{
Form1->Image6->Enabled = true;
Form1->Image6->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image6->Enabled = false;
Form1->Image6->Picture->LoadFromFile(get_obraz(plansza[6]));
};
if (plansza[7]==PUSTE)
{
Form1->Image7->Enabled = true;
Form1->Image7->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image7->Enabled = false;
Form1->Image7->Picture->LoadFromFile(get_obraz(plansza[7]));
};
if (plansza[8]==PUSTE)
{
Form1->Image8->Enabled = true;
Form1->Image8->Picture->LoadFromFile("puste.bmp");
}
else
{
Form1->Image8->Enabled = false;
Form1->Image8->Picture->LoadFromFile(get_obraz(plansza[8]));
};
}




background image

8

Programowanie obiektowe. Ćwiczenie 11.

______________________________________________________________________

______________________________________________________________________


// Funkcja resetuje plansz

ę

gry w kółko i krzy

ż

yk.

void plansza_reset(void)
{
for (int i=0; i<SIZE; i++)
plansza[i] = PUSTE;
plansza_wyswietl();
}


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron