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