PyGame to biblioteka przeznaczona do tworzenia gier 2d w pythonie. Kurs wymaga znajomości podstaw pythona.
Instalacja biblioteki PyGame
Instalacja jest bardzo prosta. Biblioteka PyGame zostanie zainstalowana po wpisaniu komendy pip install pygame w cmd.
Tworzenie okna gry
Na początku musimy zaimportować 2 potrzebne moduły pygame i sys.
import pygame, sys #importujemy potrzebne modułyNastępnie, niezbędną rzeczą, będzie zainicjowanie pygame. Aby to zrobić należy wywołać funkcję pygame.init().
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygameFunkcja pygame.display.set_mode( (,) ) pozwala na utworzenie okna gry.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # dowolna szerokość okna
Y = 600 # dowolna wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametramiPętla głowna gry
Jak można było zauważyć w poprzednim przykładzie okno nie odpowiadało. Nie zamykało się kiedy próbowaliśmy je zamknąć, ani nie dało się go dowolnie przesuwać. Aby to zmienić należy dodać pętle która będzie zbierać wszystkie zdarzenia.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
while True: # Pętla główna programu
	for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
		if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
			pygame.quit() # wychodzimy z pygame
			sys.exit()# kończymy działanie programuJak nazwać okno?
Standardową nazwą okna jest pygame window, w celu zmiany nazwy należy użyć funkcji pygame.display.set_caption('Nazwa').
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
pygame.display.set_caption('Game') #nazywamy nasze okno
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programuRysowanie figur
Aby narysować prostokąt w pygame należy użyć funkcji pygame.draw.rect( okno_gry , kolor, (x,y,w,h) ). Funkcja przyjmuje parametry w kolejności: okno, kolor (RGB), pozycja na osi x, pozycja na osi y, szerokość, wysokość. 
Następną ważną rzeczą jaka tu się pojawi to SCREEN.fill( [0,0,0] ) i pygame.display.update(). Pierwsza z powyższych dwóch funkcji służy do czyszczenia okna, a druga do odświeżania go np. po wykonaniu jakiegoś rysunku.
Sposób nr. 1:
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
pygame.display.set_caption('Gra') #nazywamy nasze okno
rectangle_position_x = 100 # pozycja na oknie oś X
rectangle_position_y = 100 # pozycja na oknie oś Y
rectangle_width = 100 #szerokość prostokąta
rectangle_height = 100 #wysokość prostokąta
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    pygame.draw.rect(SCREEN,[255,0,0],(rectangle_position_x, rectangle_position_y, rectangle_width, rectangle_height)) # rysujemy prostokąt
    pygame.display.update() #odświeżamy okno po narysowaniuSposób nr. 2, używający pygame.Rect()
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
pygame.display.set_caption('Gra') #nazywamy nasze okno
rectangle = pygame.Rect(100, 100, 100, 100) # pygame udostępnia nam już wbudowaną klasę gdzie możemy zrobić to samo tylko krócej
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    pygame.draw.rect(SCREEN,[255,0,0],rectangle) # rysujemy prostokąt w kolorze czerwonym (RGB)
    pygame.display.update() #odświeżamy okno po narysowaniuJak chcesz wiedzieć jak narysować inne figury to odwiedź tą stronę:
Jak narysować własną grafikę?
Jest to bardzo proste, do tego potrzebna będzie nam funkcja:
pygame.image.load('sciezka') i SCREEN.blit(zmienna_z_grafika, (150,100))gdzie 150 w tym przypadku oznacza miejsce na osi x, a 100 miejsce na osi y.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
pygame_logo = pygame.image.load('pygame_logo.png') # wczytujemy grafikę do zmiennej 
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wsyzstkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    SCREEN.blit(pygame_logo, (100,100)) #rysujemy grafikę na określonej pozycji (OŚ X, OŚ y)
    pygame.display.update() #odświeżamy okno po narysowaniuRysowanie tekstu
Aby narysować tekst w oknie naszej gry, będą potrzebne dwie nowe funkcje.
pygame.font.SysFont('comicsans', 40) – parametry jakie przyjmuje funkcja to: nazwa czcionki i wielkość tekstu. 
font.render('Example text', 1, (255, 255, 255)) – parametry jakie przyjmuje ta funkcja to: tekst jaki chcemy narysować, antyaliasing( true / false) i kolor.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
font = pygame.font.SysFont('comicsans', 40) # wybieramy czcionkę i ustalamy jej wielkość
text = font.render('Example text', 1, (255, 255, 255)) # generujemy tekst
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    SCREEN.blit(text, (100, 100)) #rysujemy nasz tekst
    pygame.display.update() #odświeżamy okno po narysowaniu Ruch za pomocą klawiszy W,S,A,D
Żeby poruszać się po oknie będziemy musieli sprawdzać dodatkowe zdarzenia. np. Sprawdzać czy dany klawisz klawiatury został wciśnięty.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
SCREEN = pygame.display.set_mode( (600, 600) ) #tworzymy okno z podanymi parametrami
class Block:
    def  __init__(self,x,y,img): #inicjalizujemy klasę
        self.x = x
        self.y = y
        self.img = img
    def go_right(self): 
        self.x += 1
    def go_left(self):
        self.x -= 1
    def go_up(self):
        self.y -= 1
    def go_down(self):
        self.y += 1
    def draw(self):
        SCREEN.blit(self.img, (self.x,self.y)) # rysujemy obiekt
rectangle = Block(0,0,pygame.image.load('sciezka_do_pliku_graficznego')) #tworzymy obiekt
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        key = pygame.key.get_pressed() # zbieramy wszystkie naciśnięte klawisze
        if key[pygame.K_w]: # jeżeli klawisz w jest naciśnięty idziemy do góry
            rectangle.go_up()
        elif key[pygame.K_s]: # jeżeli klawisz s jest naciśnięty idziemy w dół
            rectangle.go_down()
        elif key[pygame.K_a]: # jeżeli klawisz a jest naciśnięty idziemy w lewo
            rectangle.go_left()
        elif key[pygame.K_d]: # jeżeli klawisz d jest naciśnięty idziemy w prawo
            rectangle.go_right()
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
        
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    rectangle.draw() # wywołujemy metodę draw()
    
    pygame.display.update() #odświeżamy okno po narysowaniuJak dodać FPS’y do swojej gry
Jak można było zauważyć w poprzednim przykładzie, komputer zaczynał się grzać. Było to spowodowane brakiem ustalenia klatek na sekundę. Aby każdy gracz, grający w twoją grę miał równą rozgrywkę, warto jest dodać określoną liczbę klatek na sekundę. W kodzie poniżej zobaczysz jak można to zrobić.
import pygame, sys #importujemy potrzebne moduły
pygame.init() #inicjujemy pygame
X = 600 # szerokość okna
Y = 600 # wysokość okna
SCREEN = pygame.display.set_mode( (X,Y) ) #tworzymy okno z podanymi parametrami
pygame_logo = pygame.image.load('pygame_logo.png') # wczytujemy grafikę do zmiennej 
clock = pygame.Clock()
while True: # Pętla główna programu
    for event in pygame.event.get(): #iterujemy się po wszystkich zebranych zdarzeniach
        if event.type == pygame.QUIT: # sprawdzamy czy podane zdarzenie dotyczy zamknięcia okna
            pygame.quit() # wychodzimy z pygame
            sys.exit()# kończymy działanie programu
    SCREEN.fill([0,0,0]) #czyścimy okno wypełniając je czarnym kolorem (RGB)
    SCREEN.blit(pygame_logo, (100,100)) #rysujemy grafikę w określonych pozycjach (OŚ X, OŚ y)
    pygame.display.update() #odświeżamy okno po narysowaniu
    clock.tick(30) #ustawiamy 30 FPS'ów w grzePrzykład programu napisanego z pomocą pygame
from math import sqrt
import pygame, random, sys
MAIN_COLOR = [255,0,0]
DOTS_AMOUNT = 30
DOTS_WIDTH = 3
LINES_WIDTH = 1
BACKGROUND_COLOR = [0,0,0]
SPEED = 1
pygame.init()
class Board:
    def __init__( self, x, y ):
        self.x = x
        self.y = y
        self.background_color = BACKGROUND_COLOR
        self.screen = pygame.display.set_mode( ( self.x, self.y ) )
    
class Dot( Board ):
    def __init__(self):
        super().__init__( 600 , 600 )
        self.dot_thickness = DOTS_WIDTH
        self.starting_pos = [ random.randint(  1, self.x ), random.randint(1, self.y ) ]
        self.speed = random.uniform(1.3123, 2.3123 + SPEED)
    def second_init(self):
        self.starting_pos = [ random.randint(  1, self.x ), 0 ]
        self.speed = random.uniform(1.3123, 2.3123 + SPEED)
    def move(self):
        self.starting_pos[1] +=  self.speed
        self.starting_pos[0] += 0.5
        if self.starting_pos[1] >= self.y:
            self.second_init()
    def find_near_friend(self, brothers_list ):
        for dot in brothers_list:
            one = ( self.starting_pos[0] - dot.starting_pos[0] ) * ( self.starting_pos[0] - dot.starting_pos[0] )
            two = ( self.starting_pos[1] - dot.starting_pos[1] ) * ( self.starting_pos[1] - dot.starting_pos[1] )
            dot_range =  sqrt(  one + two )
            if dot_range < 250:
                pygame.draw.line(self.screen, MAIN_COLOR, self.starting_pos, dot.starting_pos, LINES_WIDTH )
    def represent(self):
        pygame.draw.circle(self.screen,  MAIN_COLOR, self.starting_pos, self.dot_thickness )
dots = []
for _ in range(DOTS_AMOUNT):
    d = Dot()
    dots.append( d )
clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    dots[0].screen.fill( dots[0].background_color )
    
    for dot in dots:
        dot.move()
        dot.find_near_friend( dots )
        dot.represent()
    
    pygame.display.update()
    clock.tick(100)Autor kursu: Novy#5564 (github, youtube)
Oryginalna strona kursu: https://pygamekurs.pl/
