PyGame Gra w Ponga. Spis treści



Podobne dokumenty
PyGame Gra w Kółko i Krzyżyk

PyGame Gra w Życie Conwaya

Zaawansowany kurs języka Python

Pong to dwuwymiarowy symulator tenisa sportowego. Gracz, poruszając prostokątem symulującym paletkę, stara się zdobyć punkt poprzez posłanie piłki

WASM AppInventor Lab 3. Rysowanie i animacja po kanwie PODSTAWY PRACY Z KANWAMI

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

FINCH PONG. Realizator: Partner: Patronat:

Jak zrobić klasyczny button na stronę www? (tutorial) w programie GIMP

Opis implementacji: Poznanie zasad tworzenia programów komputerowych za pomocą instrukcji języka programowania.

Spadające jabłuszka. licencja CC-BY-SA Uznanie autorstwa Na tych samych warunkach 3.0 Polska. Strona 51

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Simba 3D LOGO. Cele zajęć: - Poznanie zasad i sposobów tworzenia procedur z parametrami. - Poznanie zasad wywoływania procedur z parametrami.

Skaner Mustek Scan Express

Maskowanie i selekcja

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Prezentacje multimedialne w Powerpoint

Obsługa programu Paint. mgr Katarzyna Paliwoda

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

3.4. Opis konfiguracji layoutów.

Sieciowe Technologie Mobilne. Laboratorium 2

Microsoft Small Basic

dla gastronomii i hoteli S4H W PRAKTYCE DOPASUJ NASZE PROGRAMY DO POTRZEB TWOJEJ FIRMY S4H POS MODYFIKACJE EKRANU BONOWANIA

Grafika w aplikacjach lp. Jak zmienić kolor tła?

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny

Programowanie w języku Python. Grażyna Koba

Architektura interfejsu użytkownika

Misja#3. Robimy film animowany.

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu

WSTĘP; NARZĘDZIA DO RYSOWANIA

Komputery I (2) Panel sterowania:

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe

Pokaz slajdów na stronie internetowej

Ping-Pong. Gra dla dwóch graczy.

Praktyka programowania projekt

Rysowanie punktów na powierzchni graficznej

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3

Podręcznik użytkownika programu. Ceremonia 3.1

Scenariusz lekcji. Scenariusz lekcji. opisać działanie narzędzi przybornika. korzystać z Edytora postaci programu Logomocja;

Nazwa implementacji: Pong. Autor: Jarosław Żok. Opis implementacji: Zmiany w skryptach gry Pong, dodające kolejny element zmieniający jej zasady.

Obsługa programu Paint materiały szkoleniowe

Baner internetowy w standardzie GIF - metoda tworzenia tandemem aplikacji Illustrator - ImageReady.

Grafika komputerowa. Zajęcia 7

Narzędzia programu Paint

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

1. Opis okna podstawowego programu TPrezenter.

Ćwiczenie 14 Dmuchawce

Visual Basic w programie Excel dla Windows

learningpanel - materiały pomocnicze - JAK ZROBIĆ... Jak zrobić...

Systemy multimedialne 2015

PROSTY PROGRAM DO MALOWANIA

INFORMATYKA KLASA IV

2.1. Duszek w labiryncie

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa 4 Wymagania edukacyjne na poszczególne oceny szkolne dla klasy 4

Dodanie nowej formy do projektu polega na:

Programowanie na poziomie sprzętu. Programowanie w Windows API

BAZY DANYCH Panel sterujący

Przewodnik po obszarze roboczym

Kolory elementów. Kolory elementów

Edytor tekstu OpenOffice Writer Podstawy

Jak dodać własny szablon ramki w programie dibudka i dilustro

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie II. Tworzenie nowej karty pracy a. Obiekty b. Nauka pisania...

Warsztaty dla nauczycieli

1. Wchodzimy w adres 2. Wybieramy Stwórz

Metaliczny button z deseniem.

Wstęp... 3 Win BOSS, czyli SM-Boss pod Windows... 4 SM-Boss w środowisku Windows... 4 Obsługa myszy... 4 Definiowanie drukarek... 4 Wymagania...

Dodawanie grafiki i obiektów

Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod

Fajerwerki. Wstęp. Krok 1: Stwórz rakietę, która leci w kierunku kursora myszki

Kraków, ver

1 TEMAT LEKCJI: 2 CELE LEKCJI: 3 METODY NAUCZANIA 4 ŚRODKI DYDAKTYCZNE. Scenariusz lekcji. Scenariusz lekcji. 2.1 Wiadomości: 2.

1. Pobieranie i instalacja FotoSendera

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa IV

Aplikacje WWW - laboratorium

Projekt Śnieżna wojna

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

8. Dynamiczne generowanie grafiki, cz. 2

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

ActionFX oprogramowanie do sterowania efektami platform i kin 7D V1.0.1

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

CorelDRAW. wprowadzenie

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Menu Plik w Edytorze symboli i Edytorze widoku aparatów

Ćwiczenie 5 Animacja tekstu

Program V-SIM tworzenie plików video z przebiegu symulacji

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

Edytor tekstu MS Word podstawy

DARMOWA PRZEGLĄDARKA MODELI IFC

Site Installer v2.4.xx

Metody SI w grach komputerowych Gra Policjanci i złodziej (Algorytmy przeszukiwania grafów)

INTERAKTYWNA KOMUNIKACJA WIZUALNA. Flash - podstawy

Pierwsze kroki z easy Soft CoDeSys Eaton Corporation. All rights reserved.

Animacje z zastosowaniem suwaka i przycisku

ROZKŁADY MATERIAŁU PRZEDMIOT ELEMENTY INFORMATYKI KLASA IV, V I VI.

Jarosław Kuchta Podstawy Programowania Obiektowego. Podstawy grafiki obiektowej

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy.

1. Przypisy, indeks i spisy.

Transkrypt:

- 1 - PyGame Gra w Ponga Opis implementacji: Używając biblioteki PyGame oraz języka Python, stworzymy prostą grę Pong. Autorzy: Łukasz Zarzecki, Robert Bednarz Czas realizacji: 90 min Poziom trudności: Poziom 3 Biblioteka PyGame ułatwia tworzenie aplikacji multimedialnych, w tym gier. Poniższy scenariusz prezentuje implementację prostej gry Pong. Spis treści PyGame Gra w Ponga...1 I. Zmienne i plansza gry...2 Kod I.1...2 II. Obiekty graficzne...2 Kod II.1...2 III. Wyświetlanie tekstu...3 Kod III.1...3 IV. Główna pętla programu...4 Kod IV.1...4 Kod IV.2...4 POĆWICZ SAM...7

- 2 - I. Zmienne i plansza gry Tworzymy plik pong.py w terminalu lub w wybranym edytorze i zaczynamy od zdefiniowania zmiennych określających właściwości obiektów w naszej grze. #! /usr/bin/env python # -*- coding: utf-8 -*- Kod I.1 import pygame, sys from pygame.locals import * # Przygotowanie zmiennych opisujących okno gry oraz obiekty gry i ich właściwości (paletki, piłeczka) # Inicjacja modułu i obiektów Pygame'a # inicjacja modułu pygame pygame.init() # liczba klatek na sekundę FPS = 30 # obiekt zegara, który pozwala śledzić czas i odświeżać fpsclock = pygame.time.clock() # szerokość i wysokość okna gry OKNOGRY_SZER = 800 OKNOGRY_WYS = 400 # przygotowanie powierzchni do rysowania, czyli inicjacja okna gry OKNOGRY = pygame.display.set_mode((oknogry_szer, OKNOGRY_WYS), 0, 32) # tytuł okna gry pygame.display.set_caption('prosty Pong') # kolory wykorzystywane w grze, których składowe RGB zapisane są w tuplach LT_BLUE = (230, 255, 255) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) W instrukcji pygame.display.set_mode() inicjalizujemy okno gry o rozmiarach 800x400 pikseli i 32 bitowej głębi kolorów. Tworzymy w ten sposób powierzchnię główną do rysowania zapisaną w zmiennej OKNOGRY. Definujemy również kolory w formacie RGB (Red, Green, Blue) podając składowe poszczegónych kanałów w tuplach, np. (0,0,255). II. Obiekty graficzne W dalszej kolejności zajmiemy się określeniem właściwości I inicjalizacją paletek i piłki. # szerokość, wysokość i pozycja paletek PALETKA_SZER = 100 PALETKA_WYS = 20 # Inicjacja PALETEK: # utworzenie powierzchni dla obrazka, wypełnienie jej kolorem, # pobranie prostokątnego obszaru obrazka i ustawienie go na wstępnej pozycji PALETKA_1_POZ = (350, 360) # początkowa pozycja paletki gracza paletka1_obr = pygame.surface([paletka_szer, PALETKA_WYS]) paletka1_obr.fill(blue) paletka1_prost = paletka1_obr.get_rect() Kod II.1

paletka1_prost.x = PALETKA_1_POZ[0] paletka1_prost.y = PALETKA_1_POZ[1] - 3 - PALETKA_2_POZ = (350, 20) # początkowa pozycja paletki komputera paletka2_obr = pygame.surface([paletka_szer, PALETKA_WYS]) paletka2_obr.fill(red) paletka2_prost = paletka2_obr.get_rect() paletka2_prost.x = PALETKA_2_POZ[0] paletka2_prost.y = PALETKA_2_POZ[1] # szybkość paletki 1 (AI ang. artificial intelligence, sztuczna inteligencja), czyli komputera AI_PREDKOSC = 3 # Inicjacja PIŁKI # szerokość, wysokość, prędkość pozioma (x) i pionowa (y) PIŁKI # utworzenie powierzchni dla piłki, narysowanie na niej koła, ustawienie pozycji początkowej PILKA_SZER = 20 PILKA_WYS = 20 PILKA_PREDKOSC_X = 6 PILKA_PREDKOSC_Y = 6 pilka_obr = pygame.surface([pilka_szer, PILKA_WYS], pygame.srcalpha, 32).convert_alpha() pygame.draw.ellipse(pilka_obr, GREEN, [0, 0, PILKA_SZER, PILKA_WYS]) pilka_prost = pilka_obr.get_rect() pilka_prost.x = OKNOGRY_SZER/2 pilka_prost.y = OKNOGRY_WYS/2 Schemat dodawania obiektów graficznych jest prosty. Po określeniu wymiarów obiektu (szerokości i wysokości), tworzymy powierzchnię (np. pygame.surface([paletka_szer, PALETKA_WYS])), którą wypełniamy odpowiednim kolorem (.fill()). W przypadku piłki do metody Surface() przekazujemy dodatkowe argumenty (pygame.srcalpha) umożliwiające uzyskanie powierzchni z przezroczystymi pikselami (z kanałem alpha), na której rysujemy koło (pygame.draw.ellipse()) o podanym kolorze, środku i rozmiarach. W kolejnym kroku pobieramy prostokąt (np. paletka1_prost = paletka1_obr.get_rect()) zajmowany przez obiekt, za pomocą którego łatwiej ustawić wstępne położenie obiektu, a później nim manipulować (właściwości.x i.y obiektu Rect zwróconego przez metodę.get_rect()). III. Wyświetlanie tekstu W grze chcemy wyświetlać punkty zdobywane przez graczy. Dopisujemy więc poniższy kod: # Rysowanie komunikatów tekstowych # ustawienie początkowych wartości liczników punktów # utworzenie obiektu czcionki z podanego pliku o podanym rozmiarze GRACZ_1_PKT = '0' GRACZ_2_PKT = '0' fontobj = pygame.font.font('freesansbold.ttf', 64) # funkcje wyświetlające punkty gracza # tworzą nowy obrazek z tekstem, pobierają prostokątny obszar obrazka, # pozycjonują go i rysują w oknie gry def drukuj_punkty_p1(): tekst_obr1 = fontobj.render(gracz_1_pkt, True, (0,0,0)) tekst_prost1 = tekst_obr1.get_rect() tekst_prost1.center = (OKNOGRY_SZER/2, OKNOGRY_WYS*0.75) OKNOGRY.blit(tekst_obr1, tekst_prost1) def drukuj_punkty_p2(): Kod III.1

- 4 - tekst_obr2 = fontobj.render(gracz_2_pkt, True, (0,0,0)) tekst_prost2 = tekst_obr2.get_rect() tekst_prost2.center = (OKNOGRY_SZER/2, OKNOGRY_WYS/4) OKNOGRY.blit(tekst_obr2, tekst_prost2) Po zdefiniowaniu zmiennych przechowujących punkty graczy, tworzymy obiekt czcionki z podanego pliku (pygame.font.font()) 1. Następnie definujemy funkcje, których zadaniem jest rysowanie punktacji graczy. Na początku tworzą one nową powierzchnię z punktacją gracza (.render()), pobierają jej prostokąt (.get_rect()), pozycjonują go (.center()) i rysują na głównej powierzchni gry (.blit()). IV. Główna pętla programu Programy interaktywne, w tym gry, reagujące na działania użytkownika, takie jak ruchy czy kliknięcia myszą, działają w pętli, której zadaniem jest: 1. przechwycenie i obsługa działań użytkownika, czyli tzw. zdarzeń (ruchy, kliknięcia myszą, naciśnięcie klawiszy), 2. aktualizacja stanu gry (przesunięcia elementów, aktualizacja planszy), 3. aktualizacja wyświetlanego okna (narysowanie nowego stanu gry). Dopisujemy więc do kodu główną pętlę wraz z obsługą zdarzeń: # pętla główna programu while True: # obsługa zdarzeń generowanych przez gracza for event in pygame.event.get(): # przechwyć zamknięcie okna if event.type == QUIT: pygame.quit() sys.exit() # przechwyć ruch myszy if event.type == MOUSEMOTION: # pobierz współrzędne x, y kursora myszy myszax, myszay = event.pos # przesunięcie paletki gracza przesuniecie = myszax-(paletka_szer/2) # jeżeli wykraczamy poza okno gry w prawo if przesuniecie > OKNOGRY_SZER-PALETKA_SZER: przesuniecie = OKNOGRY_SZER-PALETKA_SZER # jeżeli wykraczamy poza okno gry w lewo if przesuniecie < 0: przesuniecie = 0 paletka1_prost.x = przesuniecie Kod IV.1 W obrębie głównej pętli programu pętla for odczytuje kolejne zdarzenia zwracane przez metodę pygame.event.get(). Jak widać, za pomocą instrukcji warunkowych (if event.type ==) obsługujemy wydarzenia typu QUIT, czyli zakończenie aplikacji, oraz MOUSEMOTION, a więc ruch myszy. W tym drugim przypadku pobieramy współrzędne kursora (event.pos) i obliczamy przesunięcie myszy w poziomie. Kolejne instrukcje uniemożliwiają wyjście paletki gracza poza okno gry. 1 Plik wykorzystywany do wyświetlania tekstu (freesansbold.ttf) musi znaleźć się w katalogu ze skryptem.

- 5 - Do pętli głównej musimy dopisać jeszcze kod kontrolujący paletkę komputera, piłkę i jej interakcje ze ścianami okna gry oraz paletkami, a także rysujący poszczególne obiekty: # AI (jak gra komputer) # jeżeli środek piłki jest większy niż środek paletki AI # przesuń w prawo paletkę z ustawioną prędkością if pilka_prost.centerx > paletka2_prost.centerx: paletka2_prost.x += AI_PREDKOSC # w przeciwnym wypadku przesuń w lewo elif pilka_prost.centerx < paletka2_prost.centerx: paletka2_prost.x -= AI_PREDKOSC # przesuń piłkę po zdarzeniu pilka_prost.x += PILKA_PREDKOSC_X pilka_prost.y += PILKA_PREDKOSC_Y # Sprawdzamy kolizje piłki z obiektami # Ściany: jeżeli piłka wykracza poza okno z lewej lub prawej strony odbij ją od ściany if pilka_prost.right >= OKNOGRY_SZER: PILKA_PREDKOSC_X *= -1 if pilka_prost.left <= 0: PILKA_PREDKOSC_X *= -1 # Piłka i paletki # Jeżeli piłka dotknie paletki, skieruj ją w przeciwną stronę if pilka_prost.colliderect(paletka1_prost): PILKA_PREDKOSC_Y *= -1 # uwzględnij nachodzenie paletki na piłkę (przysłonięcie) pilka_prost.bottom = paletka1_prost.top if pilka_prost.colliderect(paletka2_prost): PILKA_PREDKOSC_Y *= -1 # uwzględnij nachodzenie paletki na piłkę (przysłonięcie) pilka_prost.top = paletka2_prost.bottom # jeżeli piłka wyszła poza pole gry u góry lub z dołu ustaw domyślną pozycję piłki # i przypisz punkt odpowiedniemu graczowi if pilka_prost.top <= 0: pilka_prost.x = OKNOGRY_SZER/2 pilka_prost.y = OKNOGRY_WYS/2 GRACZ_1_PKT = str(int(gracz_1_pkt)+1) if pilka_prost.bottom >= OKNOGRY_WYS: pilka_prost.x = OKNOGRY_SZER/2 pilka_prost.y = OKNOGRY_WYS/2 GRACZ_2_PKT = str(int(gracz_2_pkt)+1) # Rysowanie obiektów OKNOGRY.fill(LT_BLUE) # kolor okna gry drukuj_punkty_p1() # wyświetl punkty komputera drukuj_punkty_p2() # wyświetl punkty gracza # narysuj w oknie gry paletki OKNOGRY.blit(paletka1_obr, paletka1_prost) OKNOGRY.blit(paletka2_obr, paletka2_prost) # narysuj w oknie piłkę OKNOGRY.blit(pilka_obr, pilka_prost) # zaktualizuj okno i wyświetl pygame.display.update() Kod IV.2

# zaktualizuj zegar po narysowaniu obiektów fpsclock.tick(fps) - 6 - #KONIEC Komentarze w kodzie wyjaśniają kolejne czynności. Warto zwrócić uwagę na sposób odczytywania pozycji obiektów klasy Rect (prostokątów), czyli właściwości.x,.y,.centerx,.right,.left,.top,.bottom; oraz na sprawdzanie kolizji piłki z paletkami, czyli metodę.colliderect(). Ostatnie linie kodu rysują okno gry i obiekty (tekst z wynikami graczy, paletki i piłkę) ze zmienionymi właściwościami (liczba punktów, położenie). Funkcja pygame.display.update(), która musi być wykonywana na końcu rysowania, aktualizuje obraz gry na ekranie. Ostatnia linia natomiast (fpsclock.tick()) blokuje grę na 30 klatek na sekundę, aby nie działała tak szybko jak pozwala sprzęt, lecz ze stałą prędkością. Grę możemy uruchomić poleceniem wpisanym w terminalu: python pong.py. Słownik Klatki na sekundę (FPS) liczba klatek wyświetlanych w ciągu sekundy, czyli częstotliwość, z jaką statyczne obrazy pojawiają się na ekranie. Jest ona miarą płynności wyświetlania ruchomych obrazów. Kanał alfa (ang. alpha channel) w grafice komputerowej jest kanałem, który definiuje przezroczyste obszary grafiki. Jest on zapisywany dodatkowo wewnątrz grafiki razem z trzema wartościami barw składowych RGB. Inicjalizacja proces wstępnego przypisania wartości zmiennym i obiektom. Każdy obiekt jest inicjalizowany różnymi sposobami zależnie od swojego typu. Iteracja czynność powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa się także operacje wykonywane wewnątrz takiej pętli. Zdarzenie (ang. event) zapis zajścia w systemie komputerowym określonej sytuacji, np. poruszenie myszką, kliknięcie, naciśnięcie klawisza. pygame.time.clock() tworzy obiekt do śledzenia czasu;.tick() kontroluje ile milisekund upłynęło od poprzedniego wywołania. pygame.display.set_mode() inicjuje okno lub ekran do wyświetlania, parametry: rozdzielczość w pikselach = (x,y), flagi, głębia koloru. pygame.display.set_caption() ustawia tytuł okna, parametr: tekst tytułu. pygame.surface() obiekt reprezentujący dowolny obrazek (grafikę), który ma określoną rozdzielczość (szerokość i wysokość) oraz format pikseli (głębokość, przezroczystość); SRCALPHA oznacza, że format pikseli będzie zawierać ustawienie alfa (przezroczystości);.fill() wypełnia obrazek kolorem;.get_rect() zwraca prostokąt zawierający obrazek, czyli obiekt Rect;.convert_alpha() zmienia format pikseli, w tym przezroczystość;.blit() rysuje jeden obrazek na drugim, parametry: źródło, cel. pygame.draw.ellipse() rysuje okrągły kształt wewnątrz prostokąta, parametry: przestrzeń, kolor, prostokąt. pygame.font.font() tworzy obiekt czcionki z podanego pliku;.render() tworzy nową powierzchnię z podanym tekstem, parametry: tekst, antyalias, kolor, tło.

- 7 - pygame.event.get() pobiera zdarzenia z kolejki zdarzeń; event.type() zwraca identyfikator SDL typu zdarzenia, np. KEYDOWN, KEYUP, MOUSEMOTION, MOUSEBUTTONDOWN, QUIT. SDL (Simple DirectMedia Layer) międzyplatformowa biblioteka ułatwiająca tworzenie gier i programów multimedialnych. pygame.rect obiekt pygame przechowujący współrzędne prostokąta;.centerx,.x,.y,.top,.bottom,.left,.right wirtualne własności obiektu prostokąta określające jego położenie;.colliderect() metoda sprawdza czy dwa prostokąty nachodzą na siebie. POĆWICZ SAM Zmodyfikuj właściwości obiektów (paletek, piłki) takie jak rozmiar, kolor, początkowa pozycja. Zmień położenie paletek tak aby znalazły przy lewej i prawej krawędzi okna, wprowadź potrzebne zmiany w kodzie, aby umożliwić rozgrywkę. Dodaj trzecią paletkę, która co jakiś czas będzie "przelatywać" przez środek planszy i zmieniać w przypadku kolizji tor i kolor piłki.