Menu

  • Home
  • Flask Tutorial
  • WebGL
  • Kontakt

Alicja | Theme by Theme in Progress | Proudly powered by WordPress

Alicja & IT
  • Home
  • Flask Tutorial
  • WebGL
  • Kontakt

Gra w Pythonie – PyGame – Hello World- #1

February 23, 2017PyGame Standard

Korzystając z wolnego dnia, stwierdziłam, że spróbuję czegoś nowego i zabiorę się za napisanie prostej gry. Już od jakiegoś czasu chodzi za mną taki mały projekcik – rekonstrukcja Dino Game z Chrome’a w różnych językach programowania. Jako że chcę poćwiczyć jeszcze trochę Pythona przed zmierzeniem się z projektem licencjackim (dobra wymówka:P), zdecydowałam się zacząć właśnie od niego. I biblioteki PyGame.

Instalacja PyGame

Na początek potrzebny będzie oczywiście Python. Polecam wersję 3.5 – działa dobrze pod Windowsem i nie sprawia żadnych problemów. Tutorial, w którym opisałam jak najprościej go zainstalować, znajdziecie pod tym linkiem.

Pamiętaj, aby zaznaczyć pole z pip, bo zaraz się przyda :)

Po instalacji, upewnij się, że Python został zainstalowany poprawnie (np. poleceniem python --version ) i uruchom komendę pip install pygame:

I tak tak naprawdę tyle.

Hello World?

Pisząc program w czystym Pythonie, naszym jedynym wejściem i wyjściem jest konsola. PyGame daje nam do dyspozycji GUI – stworzona z jego pomocą aplikacja powinna otwierać się w ładnym graficznym okienku.

Napiszmy więc nasze pierwsze Hello World.

Utwórz nowy plik – mój nazywa się game.py. Umieść w nim kod:

1
2
3
4
5
6
import pygame, sys
from pygame.locals import *
 
pygame.init()
DISPLAY_SURFACE = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Hello World!')

Teraz chwila przerwy – co ten kod robi?

Pierwsza linijka importuje nam moduły, z których funkcje będziemy wykorzystywać tak naprawdę w każdej stworzonej z PyGame grze. Drugi wers pozwoli nam korzystać ze zmiennych umieszczonych w pygame.locals bez używania pygame.locals.function(), tylko samego function(). Oczywiście nie jest to rzecz niezbędna, ale na pewno sprawi, że kod będzie czytelniejszy.

pygame.init() inicjalizuje PyGame’owe funkcje – jest potrzebna i już :).

Kolejna zmienna, DISPLAY_SURFACE, przechowuje obiekt pygame.Surface, wywołany przez pygame.display.set_mode. Jak łatwo się domyślić, krotka w nawiasie przekazuje wymiar okna, które otworzy się po wywołaniu programu, a ostatni wers pozwala określić jego tytuł. Warto tutaj zwrócić uwagę właśnie na fakt, że jest to krotka, a nie dwa integery – tylko w ten sposób będzie działać.

Uruchom aplikację poleceniem python game.py. Co się dzieje? Okno otwiera się, lecz od razu zamyka (prawie jak pierwsze programy w Pascalu, gdy nie wiedziało się, że trzeba dopisać readln’ea na końcu;)).

Aby okno działało, dopóki nie zamkniemy go X, będziemy potrzebować jeszcze kilku linijek kodu:

1
2
3
4
5
6
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()

Wystarczy rzut oka na ten skrypt, żeby zauważyć, że jest to pętla, która wczytuje wszystkie “dziejące się” eventy i gdy natrafi na typ równy QUIT (albo pygame.locals.QUIT, jeśli zapomnieliśmy o drugim imporcie), dezaktywuje PyGame i kończy działanie programu.

Oczywiście typy eventów mogą być bardzo różne: kliknięcie myszą, naciśnięcie klawisza itp. Tutaj rozpatrujemy absolutnie najprostszy przypadek – w końcu to Hello World.

Ostatnia, tajemnicza linijka pygame.display.update() rysuje naszą planszę na nowo, z uwzględnieniem ewentualnych zmian stanów. U nas nic się nie dzieje, więc cały czas będzie wyświetlać jedynie czarne okienko.

Czas na uruchomienie:

Twoja pierwsza gra będzie wyglądać właśnie tak :). Pięknie, prawda?

Uzupełnijmy puste okno

Dopracujmy nasze Hello World jeszcze trochę – tak, aby gra coś wyświetlała. Posłużymy się tak zwanymi drawing primitives (rysowanymi prymitywami?), czyli prostymi kształtami, których położenie zdefiniujemy co do piksela. Dosłownie :).

Najpierw zdefiniujemy sobie kilka kolorów, z których będziemy korzystać:

1
2
3
4
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (129, 187, 129)
GRAY = (225, 225, 225)

A następnie utworzymy kilka kształtów:

1
2
3
4
5
DISPLAY_SURFACE.fill(GRAY)
pygame.draw.line(DISPLAY_SURFACE, BLACK, (60, 60), (120, 60), 4)
pygame.draw.line(DISPLAY_SURFACE, WHITE, (60, 70), (120, 70), 4)
pygame.draw.circle(DISPLAY_SURFACE, WHITE, (300, 50), 20, 0)
pygame.draw.rect(DISPLAY_SURFACE, GREEN, (200, 150, 100, 50))

Na początek wypełniamy całe okno kolorem szarym. Później tworzymy dwie linie – wybieramy kolor, współrzędne punktu rozpoczęcia rysowania linii, współrzędne punktu zakończenia i jej grubość. Kolejne powstaje koło, ze środkiem o współrzędnych (300,50) i o promieniu 20. Ostatnia zmienna pozwala zdefiniować, czy będzie ono wypełnione (gdy jest 0), lub czy będzie okręgiem o konkretnej grubości. Na koniec opisujemy jeszcze zielony prostokąt z czterema zmiennymi: XY lewego górnego rogu, szerokością i wysokością.

Wygląda to tak:

O rysowaniu kształtów można więcej poczytać w dokumentacji.

Na koniec dodajmy jeszcze piękny napis “Hello World” na środku planszy:

1
2
3
4
myfont = pygame.font.SysFont("monospace", 30)
 
label = myfont.render("Hello World!", 1, BLACK)
DISPLAY_SURFACE.blit(label, (100, 100))

I podziwiajmy jak się prezentuje :).

  • Robert Kowalski

    nie dziala ten kod dalej ciemne tlo w okienku pewie zabrakoło paru while i for kod dosc haotycznie napisany

PyGame:

  • Gra w Pythonie – PyGame – Hello World- #1
  • Gra w Pythonie – PyGame – Animacje – #2
  • Gra w Pythonie – PyGame – Poruszanie się postaci – #3
  • Gra w Pythonie – PyGame – Ruchome tło – #4
  • Gra w Pythonie – PyGame – Przeszkody – #5

Facebook

Kontakt

kontakt[at]alicja.it

Kategorie

  • Flask (12)
  • Luźne (2)
  • PyGame (5)
  • Relacje z wydarzeń (3)
  • WebGL (3)