ZŁAP ZNAKI

Transkrypt

ZŁAP ZNAKI
ZŁAP ZNAKI
napis – kontrolka klasy wxStaticText , zawiera losowo
wybrany znak, który porusza się od lewej do prawej
krawędzi okna.
właściwości:
name: napis
label: A
czcionka: Arial pogrubiona, rozmiar 72, czerwona
podglad– kontrolka klasy wxStaticText , zawiera znak,
który ostatnio został wprowadzony z klawiatury
właściwości:
name: podglad
label: A
czcionka: Arial pogrubiona, rozmiar 28, zielona
WxTimer1– komponent klasy wxTimer z palety
Components , cyklicznie odmierza czas, po którym
następuje wykonanie poleceń jego metody obsługi
zdarzenia OnTimer.
właściwości:
Autostart: true
Interval: 50 (czas jest podany w milisekundach)
Klasa okienka – w pliku Okno.h
class Okno : public wxFrame {
public: Project1Frm(…dużo parametrów…);
virtual ~Project1Frm();
void WxTimer1Timer(wxTimerEvent& event);
void Project1FrmChar(wxKeyEvent& event);
// konstruktor
// destruktor
// metoda obsługujaca zdarzenie Timera
// metoda obsługujaca wprowadzenie
//
znaku z klawiatury
private: wxStaticText *napis;
wxStaticText *podglad;
wxTimer *WxTimer1;
enum { ID_NAPIS = 1001, ID_PODGLAD = 1003, ID_WXTIMER1 = 1002 };
void OnClose(wxCloseEvent& event);
void CreateGUIControls();
void NowyZnak();
DECLARE_EVENT_TABLE();
};
Implementacja metod klasy Okno – w pliku Okno.cpp
BEGIN_EVENT_TABLE(Okno, wxFrame)
EVT_CLOSE(Okno::OnClose)
EVT_CHAR(Okno::Project1FrmChar)
EVT_TIMER(ID_WXTIMER1, Okno::WxTimer1Timer)
END_EVENT_TABLE()
// statyczna tabela zdarzeń
char Okno::NowyZnak() { int kod = return (char) rand()%60+65; } // zwraca znaki o kodach <65:125>
Okno::Okno(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const
wxSize& size, long style) : wxFrame(parent, id, title, position, size, style) {
CreateGUIControls();
// wpisz losowy znak do kontrolki napis
napis->SetLabel(NowyZnak());
}
Okno::~ Okno () { }
void Okno::CreateGUIControls() {
napis = new wxStaticText(this, ID_NAPIS, “A", wxPoint(4, 50), wxDefaultSize, 0, "napis");
napis->SetForegroundColour(wxColour(wxT("RED")));
napis->SetFont(wxFont(72, wxSWISS, wxNORMAL, wxNORMAL, false, wxT("Arial Rounded MT Bold")));
podglad = new wxStaticText(this, ID_PODGLAD, "A", wxPoint(196, 194), wxDefaultSize, 0, "podglad”);
podglad->SetForegroundColour(wxColour(wxT("GREEN")));
podglad->SetFont(wxFont(28, wxSWISS, wxNORMAL, wxNORMAL, false, wxT("Arial Rounded MT Bold")));
WxTimer1 = new wxTimer();
WxTimer1->SetOwner(this, ID_WXTIMER1);
WxTimer1->Start(50);
SetTitle("Złap znaki");
Center();
}
void Okno::OnClose(wxCloseEvent& event) { Destroy(); }
void Okno::WxTimer1Timer(wxTimerEvent& event) { // obsługa zdarzenia OnTimer obiektu Timer1
int a=napis->GetPosition().x+5;
// przesuń kontrolkę napis o 5 pixeli w prawo
if (a> this->GetSize().x) { a=0; // jeżeli uciekła za prawą krawędź okna, umieść ją z lewej strony okna
napis->SetLabel(NowyZnak());
// i umieść w niej nowy losowy znak
}
int b=napis->GetPosition().y;
napis->SetPosition(wxPoint(a,b));
// wyświetl kontrolkę napis w nowym położeniu
}
int licznik = 0;
// licznik złapanych znaków
void Okno::OknoChar(wxKeyEvent& event) {
// obsługa zdarzenia OnChar okienka
char c = event.GetKeyCode();
// odczytaj kod znaku wprowadzonego z klawiatury
podglad->SetLabel((char)event.GetKeyCode());
// i wyświetl ten znak w kontrolce podglad
char z=napis->GetLabel()[0];
// odczytaj znak z kontrolki napis
if (c==z) {
// porównaj te dwa znaki
wxBell();
// sygnał dźwiękowy
licznik++;
// zwiększ licznik złapanych znaków
this->SetTitle("Liczba złapanych znaków = "+wxString::Format("%i",licznik));
napis->SetLabel(NowyZnak());
// wpisz nowy losowy znak do kontrolki napis
int b =napis->GetPosition().y;
napis->SetPosition(wxPoint(0,b)); // umieść kontrolkę napis przy lewej krawędzi okna
}
}