SFML. (Simple and Fast Multimedia Library)

Podobne dokumenty
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Microsoft Management Console

Programowanie proceduralne w języku C++ Podstawy

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Programowanie niskopoziomowe

Informatyka I : Tworzenie projektu

Programowanie Komputerów 3FZ

WPROWADZENIE DO INFORMATYKI

Wprowadzenie do środowiska Visual Studio

Przeniesienie lekcji SITA z płyt CD na ipoda touch

Krótki wstęp do biblioteki OpenCV. Jak wykorzystać kamerkę internetową do przetwarzania obrazów.

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Platforma zamówień personelu JOBMAN.pl

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

I - Microsoft Visual Studio C++

enova Workflow Obieg faktury kosztowej

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Instrukcja instalacji winbgim

Instrukcja programu PControl Powiadowmienia.

DrawCut Label Studio

Praca na wielu bazach danych część 2. (Wersja 8.1)

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

I. Zakładanie nowego konta użytkownika.

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Instrukcja Jak złożyć dokument elektroniczny

INSTRUKCJA Panel administracyjny

Pobieranie edytora CodeLite

Jak spersonalizować wygląd bloga?

Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy

INSTALACJA OPROGRAMOWANIA...3 PRZYGOTOWANIE OPROGRAMOWANIA DO PRACY...3 DEFINICJA ZAPYTAŃ DO BAZ DANYCH...11 EKRAN GŁÓWNY...15

Wykład IX. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

ZASADY REPRODUKCJI SYMBOLI GRAFICZNYCH PRZEDMOWA

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Algorytmy i Struktury Danych.

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

INSTRUKCJA KORZYSTANIA Z ELEKTRONICZNEJ ŚCIEŻKI WYKAZÓW

DEMERO Automation Systems

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

Specyfikacja techniczna banerów Flash

EGZAMIN MATURALNY Z INFORMATYKI 19 MAJA 2015

Przyk ad konfiguracja MRP przy pomocy IO kontrolera Simatic S7-300 i switchy Scalance X

Użytkowanie elektronicznego dziennika UONET PLUS.

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

InsERT GT Własne COM 1.0

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

raceboard-s Szybki start

Instalacja programu. Omówienie programu. Jesteś tu: Bossa.pl

INFORMATOR TECHNICZNY WONDERWARE. Konfiguracja komputera klienckiego do łączenia się z serwerem IndustrialSQL

Mmfpga12. Instrukcja uruchomienia aplikacji testowych REV 1.0. Many ideas one solution

1. Program Skype można pobrać ze strony producenta :

dbsamples.udl lub przygotowany wcześniej plik dla Excela) i OK,

GRAFIKA PROGRAMOWANA W PASCALU ==================================

Wtedy wystarczy wybrać właściwego Taga z listy.

Firma Informatyczna JazzBIT

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

CELAB. System Informatyczny. Punkt przyjęć krok po kroku LTC 1

Tomasz Greszata - Koszalin

PERSON Kraków

Programowanie 2. Język C++. Wykład 2.

INTEGRATOR Instrukcja instalacji, konfiguracji.

Wymiana du ych plików instrukcja dla klientów Grontmij Polska Sp z o. o.

Zad.1 Pokazać pierwszeństwo trybu odmów przed zezwalaj.

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

JMMS Instrukcja użytkowania kont Autor oraz Recenzent

Polecenie HYPERLINK wstawia hiperpołączenia, umożliwia ich modyfikację oraz usuwanie

Ćwiczenia IV - Kontenery (pojemniki)

Podstawowe zasady tworzenia projektu w środowisku uvision 4.0, pisanie programów w asemblerze 8051

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

Języki i metody programowania Java Lab2 podejście obiektowe

SINAMICS G120C STARTER. Tworzenie nowego projektu w trybie online.

Instalacja i konfiguracja automatu synchronizacji CDN OFFLINE

Zmiany w programie C GEO v. 6.5

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Jak zaprogramować procesor i. wgrać firmwar-e do yampp3usb. Copyright SOFT COM sp. z o. o.

Spring MVC Andrzej Klusiewicz 1/18

Programowanie mikrokontrolerów w praktyce

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Wprowadzenie do środowiska Qt Creator

Konfiguracja Wyszukiwarki

Wstęp do programowania

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Archiwum Prac Dyplomowych

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Komunikacja sterownika z rodziny Micro800 z Falownikiem PowerFlex40 przy pomocy sieci DeviceNet.

Kurs WWW. Paweł Rajba.

Programowanie 2. Język C++. Wykład 1.

1.Wstęp. 2.Generowanie systemu w EDK

INSTRUKCJA PROGRAMU BHM SPIS TREŚCI

Karta sieciowa musi być zainstalowana. Sprawdzamy to poprzez uruchomienie menadŝera sprzętu.

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

Transkrypt:

SFML (Simple and Fast Multimedia Library) I Przygotowanie do tworzenia programów z użyciem biblioteki SFML w środowisku Code::Blocks.... 2 II Struktura programu... 3 III Obiekty graficzne... 3 1. Podstawowe kształty, figury... 3 2. Kolory i przezroczystość... 4 3. Pozycja, obrót, skalowanie,... 5 4. Przykłady programów (odbicie od ścianek, podbijanie obiektu, odbijanie paletkami)... 8-1 -

I Przygotowanie do tworzenia programów z użyciem biblioteki SFML w środowisku Code::Blocks. 1. Otwarcie strony internetowej projektu: www.sfml-dev.org. 2. Wybór i pobranie najnowszej wersji biblioteki SFML (XII 2013 - wersja 2.1): GCC 4.7 TDM (SJLJ) - 32 bits [15.0MB] - dla środowiska Code::Blocks. 3. Rozpakowanie biblioteki (powstanie katalog o nazwie SFML-2.1) i umieszczenie w odpowiednim miejscu na dysku; przykładowa struktura katalogów: sfml SFML-2.1 (katalog biblioteki) p01_struktura (katalog projektu pierwszego) p02_kszt-graf (katalog projektu drugiego) 4. Konfiguracja Code::Blocks: a) Uruchomienie środowiska i utworzenie pustego projektu: File New Project Empty project Next > - wprowadzamy tytuł projektu [Project title] (np. struktura), który będzie później widoczny jako katalog projektu, - wskazujemy miejsce zapisu projektu [Folder to create project in] (np. katalog struktura), - zostanie utworzona nazwa startowego pliku projektu [Project filename]: struktura.cbp, - zostanie uzupełniona ścieżka jego umieszczenia [Resulting filename]. Next > Zostawiamy standardowe ustawienia: - kompilatora [Compiler] GNU GCC Compiler, - tworzonej konfiguracji [ Release, Debug ]. Finish. b) Tworzymy nowy pusty plik i dołączamy go do naszego (aktywnego) projektu pod nazwą main.cpp : File New Empty file [Add file to project] - Potwierdzamy Poprawiamy nazwę na main.cpp. Po lewej stronie na karcie Projects zostanie dodany katalog Sources z utworzonym przez nas plikiem main.cpp. c) Dostosowanie projektu i środowiska do pracy z biblioteką SFML: Ustalenie czy ma się pojawiać okienko tekstowe: Project Properties zakładka [Builds targets] dla trybu kompilacji Release oraz Debug - ustawienie [Type] na [GUI application] zamiast [Console application]. Wskazanie na odpowiednie katalogi w bibliotece SFML: Project Build options zakładka [Search directories] dla trybu kompilacji Release oraz Debug, przycisk [Add]: - w zakładce [Compiler] - ścieżka do katalogu include biblioteki SFML, - w zakładce [Linker] - ścieżka do katalogu lib biblioteki SFML; proponuję wybrać ścieżkę względną [ relative path]. Wskazanie na dołączane pliki bibliotek (*.dll) do naszych projektów: Project Build options zakładka [Linker settings], przycisk [Add]: - dla trybu kompilacji Release : sfml-graphics, sfml-window, sfml-system,, - dla trybu kompilacji Debug : sfml-graphics-d, sfml-window-d, sfml-system-d,. Przekopiowanie plików: - dla trybu kompilacji Release : sfml-system-2.dll, sfml-window-2.dll, sfml-graphics-2.dll,, - dla trybu kompilacji Debug : sfml-system-d-2.dll, sfml-window-d-2.dll, sfml-graphics-d-2.dll,, znajdujących się w katalogu bin (będącym podkatalogiem SFML-2.1) do katalogu naszego projektu. Jeśli pliki bibliotek mają być włączane na stałe do pliku wykonywalnego, dołączamy je w postaci statycznej: - dla trybu kompilacji Release : sfml-graphics-s, sfml-window-s, sfml-system-s,, - dla trybu kompilacji Debug : sfml-graphics-s-d, sfml-window-s-d, sfml-system-s-d,. oraz w podanym niżej miejscu dodajemy wpis: SFML_STATIC: Project Build options zakładka [Compiler settings], zakładka [#defines]. d) Teraz możemy już wkleić treść programu z następnej strony do pliku main.cpp, zapisać program i po kompilacji i uruchomieniu zobaczyć efekt naszej pracy. Jeśli pojawi się okienko z wypełnionym na zielono kółeczkiem wszystko poszło OK. Jesteśmy przygotowani do korzystania z biblioteki SFML. - 2 -

II Struktura programu [p01_struktura] 4 RenderWindow okno(videomode(200,200),"okienko SFML!"); 5 CircleShape kolo(100); 6 kolo.setfillcolor(color::green); 7 while (okno.isopen()) { 8 Event zdarz; 9 while (okno.pollevent(zdarz)) { 10 if (zdarz.type == Event::Closed) okno.close(); 11 } 12 okno.clear(); 13 okno.draw(kolo); 14 okno.display(); 15 } 16 return 0; 17 } III Obiekty graficzne 1. Podstawowe kształty, figury [p02_kszt-graf] 4 RenderWindow okno(videomode(640,480),"okienko SFML!"); 5 CircleShape kolo1(240); kolo1.setfillcolor(color::cyan); 6 CircleShape kolo2(200,100); kolo2.setfillcolor(color::blue); 7 CircleShape trojkat(200,3); trojkat.setfillcolor(color::green); 8 CircleShape czworokat(200,4); czworokat.setfillcolor(color::red); 9 CircleShape pieciokat(200,5); pieciokat.setfillcolor(color::magenta); 10 RectangleShape prostokat(vector2f(160,70)); prostokat.setfillcolor(color::cyan); 11 RectangleShape kwadrat(vector2f(100,100)); kwadrat.setfillcolor(color::blue); 12 RectangleShape linia(vector2f(140,2)); linia.setfillcolor(color::magenta); 13 ConvexShape wielokat; 14 wielokat.setpointcount(5); 15 wielokat.setpoint(0,vector2f(470,360)); 16 wielokat.setpoint(1,vector2f(630,370)); 17 wielokat.setpoint(2,vector2f(580,450)); 18 wielokat.setpoint(3,vector2f(510,460)); 19 wielokat.setpoint(4,vector2f(470,420)); - 3 -

20 wielokat.setfillcolor(color::yellow); 21 while (okno.isopen()) { 22 Event zdarz; 23 while (okno.pollevent(zdarz)) { 24 if (zdarz.type == Event::Closed) okno.close(); 25 } 26 okno.clear(); 27 okno.draw(kolo1); 28 okno.draw(kolo2); 29 okno.draw(pieciokat); 30 okno.draw(czworokat); 31 okno.draw(trojkat); 32 prostokat.setposition(460,20); okno.draw(prostokat); 33 kwadrat.setposition(500,110); okno.draw(kwadrat); 34 linia.setposition(480,320); okno.draw(linia); 35 okno.draw(wielokat); 36 okno.display(); 37 } 38 return 0; 39 } 2. Kolory i przezroczystość [p03_kolor-przezr] 4 RenderWindow okno(videomode(400,400),"okienko SFML!"); 5 CircleShape kolo1(200,100); 6 kolo1.setfillcolor(color::cyan); 7 // Black, White, Red, Green, Blue, Cyan, Magenta, Yellow, Transparent 8 kolo1.setoutlinecolor(color(50,150,75)); 9 // zakres liczb: 0..255 (udzial: Red-50, Green-150, Blue-75) 10 kolo1.setoutlinethickness(5); 11 CircleShape kolo2(150,100); 12 kolo2.setfillcolor(color::transparent); 13 kolo2.setoutlinecolor(color::red); 14 kolo2.setoutlinethickness(3); 15 CircleShape kolo3(100,100); 16 kolo3.setfillcolor(color(0,0,200,75)); 17 kolo3.setoutlinecolor(color::blue); 18 kolo3.setoutlinethickness(1); 19 while (okno.isopen()) { 20 Event zdarz; 21 while (okno.pollevent(zdarz)) { 22 if (zdarz.type == Event::Closed) okno.close(); 23 } 24 okno.clear(); 25 okno.draw(kolo1); okno.draw(kolo2); okno.draw(kolo3); - 4 -

26 okno.display(); 27 } 28 return 0; 29 } 3. Pozycja, obrót, skalowanie, [p04_poz-przes] 4 RenderWindow okno(videomode(800,700),"okienko SFML!"); 5 CircleShape kolo1(40); 6 kolo1.setfillcolor(color::red); kolo1.setposition(20,20); 7 CircleShape kolo2(40); 8 kolo2.setfillcolor(color::green); kolo2.setposition(20,120); 9 CircleShape kolo3(40); kolo3.setfillcolor(color::blue); 10 CircleShape kolo4(40); kolo4.setfillcolor(color::magenta); 11 while (okno.isopen()) { 12 Event zdarz; 13 while (okno.pollevent(zdarz)) { 14 if (zdarz.type == Event::Closed) okno.close(); 15 } 16 okno.clear(); 17 okno.draw(kolo1); 18 kolo2.move(1,0); okno.draw(kolo2); 19 kolo3.setposition(20,120); 20 for (int i=0;i<5;i++) { kolo3.move(100,0); okno.draw(kolo3); } 21 kolo3.setposition(20,220); 22 for (int i=0;i<5;i++) { kolo3.move(i*10+100,0); okno.draw(kolo3); } 23 kolo3.setposition(20,320); 24 for (int i=0;i<5;i++) { 25 kolo3.move(i*10+100,0); kolo3.setradius(40-i*8); okno.draw(kolo3); } 26 kolo3.setposition(20,420); 27 for (int i=0;i<5;i++) { 28 kolo3.move(i*10+100,8); kolo3.setradius(40-i*8); okno.draw(kolo3); } 29 kolo3.setradius(40); 30 kolo4.setposition(20,520); 31 for (int i=0;i<5;i++) { 32 kolo4.move(i*10+100,0); kolo4.setpointcount(i+3); okno.draw(kolo4); } 33 okno.display(); 34 } 35 return 0; 36 } - 5 -

[p04a_los-obiekty] 4 int szer=1024, wys=768; 5 const int N=100; 6 int r[n], x[n], y[n], R[N], G[N], B[N]; 7 srand(time(null)); 8 for (int i=0;i<n;i++) { 9 r[i]=rand()%50; 10 x[i]=rand()%szer; y[i]=rand()%wys; 11 R[i]=rand()%256; G[i]=rand()%256; B[i]=rand()%256; } 12 RenderWindow okno(videomode(szer,wys),"okienko SFML!"); 13 CircleShape kolo(0); 14 kolo.setoutlinethickness(1); 15 while (okno.isopen()) { 16 Event zdarz; 17 while (okno.pollevent(zdarz)) { 18 if (zdarz.type == Event::Closed) okno.close(); } 19 okno.clear(); 20 for (int i=0;i<n;i++) { 21 kolo.setradius(r[i]); 22 kolo.setposition(x[i],y[i]); 23 kolo.setoutlinecolor(color(g[i],b[i],r[i])); 24 kolo.setfillcolor(color(r[i],g[i],b[i])); 25 okno.draw(kolo); } 26 okno.display(); 27 } 28 return 0; 29 } - 6 -

[p05_rozm-obrot] 4 RenderWindow okno(videomode(800,360),"okienko SFML!"); 5 RectangleShape prostokat(vector2f(160,80)); 6 prostokat.setfillcolor(color::green); 7 RectangleShape kwadrat1(vector2f(80,80)); 8 kwadrat1.setfillcolor(color::blue); 9 kwadrat1.setoutlinecolor(color::magenta); 10 kwadrat1.setoutlinethickness(1); 11 kwadrat1.setposition(140,220); 12 RectangleShape kwadrat2(vector2f(80,80)); 13 kwadrat2.setfillcolor(color::red); 14 kwadrat2.setoutlinecolor(color::yellow); 15 kwadrat2.setoutlinethickness(1); 16 kwadrat2.setposition(400,220); 17 while (okno.isopen()) { 18 Event zdarz; 19 while (okno.pollevent(zdarz)) { 20 if (zdarz.type == Event::Closed) okno.close(); 21 } 22 okno.clear(); 23 prostokat.setposition(20,20); 24 prostokat.setsize(vector2f(160,80)); okno.draw(prostokat); 25 for (int i=0;i<5;i++) { 26 prostokat.move(180-i*20,i*20); prostokat.setsize(vector2f(140-i*20,80)); 27 okno.draw(prostokat); } 28 for (int i=1;i<=6;i++) { kwadrat1.setrotation(i*60); okno.draw(kwadrat1); } 29 kwadrat2.rotate(2); okno.draw(kwadrat2); 30 okno.display(); 31 } 32 return 0; 33 } [p06_oryg-skal] 4 RenderWindow okno(videomode(640,480),"okienko SFML!"); 5 CircleShape kolo1(40,100); 6 kolo1.setfillcolor(color::red); kolo1.setposition(20,20); 7 kolo1.setscale(3.5,1.5); 8 CircleShape kolo2(4,100); 9 kolo2.setfillcolor(color::green); kolo2.setposition(320,240); 10 kolo2.setorigin(4,4); 11 while (okno.isopen()) { 12 Event zdarz; 13 while (okno.pollevent(zdarz)) { 14 if (zdarz.type == Event::Closed) okno.close(); 15 } 16 okno.clear(); 17 okno.draw(kolo1); 18 kolo2.scale(1.001,1.001); okno.draw(kolo2); - 7 -

19 okno.display(); 20 } 21 return 0; 22 } 4. Przykłady programów (odbicie od ścianek, podbijanie obiektu) [p07_odbicie] 4 int szer=600, wys=400; 5 RenderWindow okno(videomode(szer,wys),"okienko SFML!"); 6 int r=20, minx=0, miny=0, maxx=szer-2*r, maxy=wys-2*r; 7 float px=0.2, py=0.2, lp=px, gd=py; 8 CircleShape kolo(r,100); 9 kolo.setfillcolor(color::transparent); 10 kolo.setoutlinecolor(color::cyan); 11 kolo.setoutlinethickness(1); 12 Vector2f poz; 13 while (okno.isopen()) { 14 Event zdarz; 15 while (okno.pollevent(zdarz)) { 16 if (zdarz.type == Event::Closed) okno.close(); 17 } 18 poz=kolo.getposition(); 19 if (poz.x>=maxx) lp=-px; else if (poz.x<=minx) lp=px; 20 if (poz.y>=maxy) gd=-py; else if (poz.y<=miny) gd=py; 21 kolo.move(lp,gd); 22 okno.clear(); 23 okno.draw(kolo); 24 okno.display(); 25 } 26 return 0; 27 } - 8 -

[p07a_podbicie] 4 int szer=640, wys=400; 5 RenderWindow okno(videomode(szer,wys),"okienko SFML!"); 6 int r=20, minx=0, miny=0, maxx=szer-2*r, maxy=wys-2*r; 7 float px=0.2, py=0.2, lp=px, gd=py; 8 CircleShape kolo(r,100); 9 kolo.setfillcolor(color::transparent); 10 kolo.setoutlinecolor(color::green); 11 kolo.setoutlinethickness(1); 12 int szer_p=100, wys_p=5; 13 RectangleShape paletka(vector2f(szer_p,wys_p)); 14 paletka.setfillcolor(color::yellow); 15 paletka.setposition(szer/2-szer_p/2,wys-wys_p*2); 16 Vector2f poz_k, poz_p; 17 while (okno.isopen()) { 18 Event zdarz; 19 while (okno.pollevent(zdarz)) { 20 if (zdarz.type == Event::Closed) okno.close(); 21 } 22 23 poz_k=kolo.getposition(); 24 if (poz_k.x>=maxx) lp=-px; else if (poz_k.x<=minx) lp=px; 25 if (poz_k.y>=maxy) gd=-py; else if (poz_k.y<=miny) gd=py; 26 kolo.move(lp,gd); 27 28 poz_k=kolo.getposition(); 29 poz_p=paletka.getposition(); 30 if (poz_k.y+2*r >= poz_p.y && 31 poz_k.x+r >= poz_p.x && poz_k.x-r <= poz_p.x+szer_p) gd=-py; 32 33 if (Keyboard::isKeyPressed(Keyboard::Left)) paletka.move(-px,0); 34 if (Keyboard::isKeyPressed(Keyboard::Right)) paletka.move(px,0); 35 36 okno.clear(); 37 okno.draw(kolo); 38 okno.draw(paletka); 39 okno.display(); 40 } 41 return 0; 42 } [p07b_odbijanie-gra] 2 #include <sstream> 3 using namespace sf; 4 using namespace std; 5 string na_string(int n) { ostringstream stm; stm << n; return stm.str(); } - 9 -

6 7 int main() { 8 int szer=640, wys=400; 9 RenderWindow okno(videomode(szer,wys),"okienko SFML!"); 10 int r=20, minx=0, miny=0, maxx=szer-2*r, maxy=wys-2*r; 11 float px=0.2, py=0.2, lp=px, gd=py; 12 int punkty1=0, punkty2=0; 13 CircleShape kolo(r,100); 14 kolo.setfillcolor(color::transparent); 15 kolo.setoutlinecolor(color::green); 16 kolo.setoutlinethickness(1); 17 kolo.setposition(szer/4+r,wys/4-r); 18 int szer_p=100, wys_p=5; 19 RectangleShape paletka(vector2f(szer_p,wys_p)); 20 paletka.setfillcolor(color::yellow); 21 paletka.setposition(szer/2-szer_p/2,wys-wys_p*2); 22 RectangleShape paletka2(vector2f(szer_p,wys_p)); 23 paletka2.setfillcolor(color::cyan); 24 paletka2.setposition(szer/2-szer_p/2,wys_p); 25 Vector2f poz_k, poz_p, poz_p2, poz; 26 Font czcionka; 27 czcionka.loadfromfile("arial.ttf"); 28 Text tekst_p1, tekst_p2, gracz1, gracz2; 29 gracz1.setfont(czcionka); 30 gracz1.setcharactersize(20); gracz1.setcolor(color::yellow); 31 gracz1.setposition(20,wys-40); gracz1.setstring("gracz 1: "); 32 gracz2.setfont(czcionka); 33 gracz2.setcharactersize(20); gracz2.setcolor(color::cyan); 34 gracz2.setposition(20,30); gracz2.setstring("gracz 2: "); 35 tekst_p1.setfont(czcionka); tekst_p1.setcharactersize(30); 36 tekst_p1.setcolor(color::red); tekst_p1.setposition(105,wys-50); 37 tekst_p2.setfont(czcionka); tekst_p2.setcharactersize(30); 38 tekst_p2.setcolor(color::red); tekst_p2.setposition(105,20); 39 while (okno.isopen()) { 40 Event zdarz; 41 while (okno.pollevent(zdarz)) { 42 if (zdarz.type == Event::Closed) okno.close(); 43 } 44 45 poz_k=kolo.getposition(); 46 if (poz_k.x>=maxx) lp=-px; else if (poz_k.x<=minx) lp=px; 47 if (poz_k.y>=maxy) { gd=-py; punkty1--; } 48 else if (poz_k.y<=miny) { gd=py; punkty2--; } 49 kolo.move(lp,gd); 50 51 poz_k=kolo.getposition(); 52 poz_p=paletka.getposition(); 53 if (poz_k.y+2*r>=poz_p.y && poz_k.x+r>=poz_p.x && poz_k.x+r<=poz_p.x+szer_p) 54 { gd=-py; punkty1++; } 55 poz_p2=paletka2.getposition(); 56 if (poz_k.y<=poz_p2.y+wys_p && poz_k.x+r>=poz_p2.x && poz_k.x+r<=poz_p2.x+szer_p) 57 { gd=py; punkty2++; } 58 59 tekst_p1.setstring(na_string(punkty1)); 60 tekst_p2.setstring(na_string(punkty2)); 61 62 if (Keyboard::isKeyPressed(Keyboard::Left)) paletka.move(-px,0); 63 if (Keyboard::isKeyPressed(Keyboard::Right)) paletka.move(px,0); 64 if (Keyboard::isKeyPressed(Keyboard::A)) paletka2.move(-px,0); 65 if (Keyboard::isKeyPressed(Keyboard::D)) paletka2.move(px,0); 66 67 okno.clear(); 68 okno.draw(kolo); 69 okno.draw(paletka); 70 okno.draw(paletka2); 71 okno.draw(gracz1); 72 okno.draw(gracz2); 73 okno.draw(tekst_p1); - 10 -

74 okno.draw(tekst_p2); 75 okno.display(); 76 } 77 return 0; 78 } - 11 -