From 4656f1cc17a065e00b65663b12d49f24696a80cd Mon Sep 17 00:00:00 2001
From: Erkki Kaila <ertaka@utu.fi>
Date: Fri, 23 Sep 2022 11:20:42 +0300
Subject: [PATCH] added some comments

---
 starfield.py | 80 ++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 56 insertions(+), 24 deletions(-)

diff --git a/starfield.py b/starfield.py
index 2d74379..091bd5d 100644
--- a/starfield.py
+++ b/starfield.py
@@ -1,6 +1,7 @@
 import pygame, random
 
-
+# Yksinkertainen esimerkki Pygame-kirjastolla tehdystä pelistä
+# 2022 / Erkki Kaila (ertaka@utu.fi)
 
 
 def init():
@@ -10,7 +11,7 @@ def init():
     return scr
 
 
-
+# Luokka mallintaa "avaruusalusta" ruudulla
 class StarShip:
     def __init__(self, x, y, color: tuple):
         self.x = x
@@ -23,6 +24,7 @@ class StarShip:
         self.going_up = False
         self.going_down = False
 
+    # Piirtää aluksen ruudulle nykyiseen paikkaansa
     def draw(self, screen):
         color2 = tuple([x * 1.3 for x in self.color])
         size = self.size
@@ -35,6 +37,7 @@ class StarShip:
         y4 = int(y3 + 20 * size)
         y5 = int(y4 + 10 * size)
 
+        # Ylös- tai alaspäin liikkuva alus piirretään eri kulmassa
         if self.going_up:
             y3 -= 5
 
@@ -56,6 +59,7 @@ class StarShip:
     def right(self):
         self.x += 1
 
+# Mallintaa yhtä avaruusaluksen ampumaa "luotia"
 class Bullet:
     def __init__(self, x, y):
         self.x = x
@@ -71,6 +75,7 @@ class Bullet:
         if self.x > 640:
             is_out = True
 
+# Mallintaa yhtä taustalla liikkuvan tähtikentän tähteä
 class Star:
     def __init__(self, x, y, level: int):
         self.x = x
@@ -93,6 +98,7 @@ class Star:
                 self.y = random.randint(5,475)
     
 
+# Mallintaa pyramidia, jotka toimivat vihollisina
 class Pyramid:
     def __init__(self, y, rgb: tuple):
         self.x = 640
@@ -188,7 +194,7 @@ class Tile:
         pygame.draw.line(screen, self.shadow, (x + size,y + 1), (x+size, y+size))
         pygame.draw.line(screen, self.shadow, (x,y + size), (x+size, y+size))
 
-
+# Mallintaa ruudun alalaidassa rullaavaa "lattiaa"
 class Floor:
     def __init__(self, color1: tuple, color2: tuple, y = 448):
         self.color1 = color1
@@ -212,7 +218,7 @@ class Floor:
 
         
 
-
+# Tarkistaa onko joku luodeista osunut viholliseen
 def check_bullet_hits(bullets: list, enemies: list):
     global score
     for bullet in bullets:
@@ -222,6 +228,7 @@ def check_bullet_hits(bullets: list, enemies: list):
                 bullet.is_out = True
                 score += 100
 
+# Tarkistaa onko joku vihollisista osunut alukseen
 def check_enemy_hit(starship, enemies: list):
     right = starship.x + 60
     bottom = starship.y + 80
@@ -230,9 +237,9 @@ def check_enemy_hit(starship, enemies: list):
             return True
 
 
+# Alustaa pelin
 scr = init()
 timer = pygame.time.Clock()
-ball_img = pygame.image.load("pallo.png")
 
 high = 0
 lives = 3
@@ -241,8 +248,9 @@ score = 0
 
     
 
-
+# Silmukka, jossa peli pyörii uudelleen ja uudelleen
 while True:
+    # Lista, jossa ovat kaikki taustalla rulllavat tähdet
     stars = []
     ri = random.randint
     rc = random.choice
@@ -251,7 +259,10 @@ while True:
         for j in range(20):
             stars.append(Star(ri(0,640), ri(5,475), i))
 
+    # Kaikki ruudulla näkyvät ammukset
     bullets = []
+
+    # Kaikki ruudulla näkyvät viholliset
     enemies = []
 
     font = pygame.font.SysFont("Arial", 24)
@@ -260,6 +271,9 @@ while True:
 
     ship = StarShip(250, 200, (128, 128, 0))
 
+    # Muuttujat kertovat onko alus liikkumassa johonkin
+    # näistä suunnista; alus voi liikkua samanaikaisesti 
+    # kahteen eri suuntaan (esim. yläoikealle)
     left = False
     right = False
     up = False
@@ -268,38 +282,38 @@ while True:
     floor = Floor((0,128,0), (0,64,0))
 
 
-
+    # Varsinainen pelisilmukka, joka pyörii kunnes alus tuhoutuu
     while True:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 exit()
 
+            # Kun näppäin painetaan alas, alus lähtee ko. suuntaan
             elif event.type == pygame.KEYDOWN:
-                value = True
                 if event.key == pygame.K_LEFT:
-                    left = value
+                    left = True
                 elif event.key == pygame.K_RIGHT:
-                    right = value
+                    right = True
                 elif event.key == pygame.K_UP:
-                    up = value
+                    up = True
                     ship.going_up = True
                 elif event.key == pygame.K_DOWN:
-                    down = value
+                    down = True
                     ship.going_down = True
                 elif event.key == pygame.K_SPACE:
                     bullets.append(Bullet(ship.x + 60, ship.y + 30))
 
+            # Kun näppäin nostetaan ylös, aluksen liike ko. suuntaan loppuu
             elif event.type == pygame.KEYUP:
-                value = False
                 if event.key == pygame.K_LEFT:
-                    left = value
+                    left = False
                 elif event.key == pygame.K_RIGHT:
-                    right = value
+                    right = False
                 elif event.key == pygame.K_UP:
-                    up = value
+                    up = False
                     ship.going_up = False
                 elif event.key == pygame.K_DOWN:
-                    down = value
+                    down = False
                     ship.going_down = False
 
         if left:
@@ -311,20 +325,27 @@ while True:
         if down:
             ship.down()
 
+        # Alustetaan uusi vihollinen - määrää voi muuttaa muuttamalla satunnaisluvun
+        # parametreja
         if random.randint(1,150) == 1:
             enemies.append(Pyramid(ri(5,420), (ri(0,128), ri(0,128), ri(0,128))))   
 
-        
+        # Tyhjentää ruudun - tämän jälkeen voidaan piirtää tilanne uudestaan
         scr.fill((0,0,0))
 
-
+        # Piirretään kaikki tähdet - kaikki muu piirretään tähtien päälle,
+        # siksi tämän pitää olla ensin
         for star in stars:
             star.draw(scr)
 
+        # Piirretään lattia
         floor.draw(scr)
         
+        # Piirretään alus
         ship.draw(scr)
 
+        # Piirretään luodit, poistetaan listalta luodit jotka ovat
+        # menneet ulos vasemmasta reunasta
         index = 0
         while index < len(bullets):
             bullets[index].draw(scr)
@@ -334,6 +355,8 @@ while True:
             else:
                 index += 1
 
+        # Piirretään viholliset, poistetaan listalta viholliset jotka
+        # ovat menneet ulos vasemmasta reunasta
         index = 0
         while index < len(enemies):
             enemies[index].draw(scr)
@@ -342,11 +365,15 @@ while True:
                 enemies.pop(index)
             else:
                 index += 1
-
+        
+        # Tarkastetaan osuiko viholliseen
         check_bullet_hits(bullets, enemies)
+
+        # Jos vihollinen osui alukseen, silmukka päättyy
         if check_enemy_hit(ship, enemies):
             break
 
+        # Piirretään pistetilanne yläreunaan
         text1 = font.render("Score: " + (str(score).zfill(7)), True, (255,255,255))
         text2 = font.render("Score: " + (str(score).zfill(7)), True, (128,128,128))
 
@@ -359,6 +386,9 @@ while True:
         scr.blit(text2, (250,5))    
         scr.blit(text1, (247,2))
 
+        # Piirretään elämien määrää kuvaavat pikkualuksen yläreunaan
+        # Huomaa, että tässä käytetään samaa luokkaa kuin varsinaisen aluksen
+        # piirrossa mutta skaalattuna 0.3 kokoiseksi
         for live in range(lives):
             sh = StarShip(450 + live*30, 10, (128,128,0))
             sh.size = 0.3
@@ -367,26 +397,28 @@ while True:
         if score > high:
             high = score
 
+        # Tämä piirtää muutokset ruudulle
         pygame.display.flip()
 
+        # Liikutetaan tähtiä listassa
         for star in stars:
             star.move()
 
         floor.move()
         
-        #textx += texta
-        #if textx == 0 or textx == 335:
-        #    texta = -texta
-
+        # Tämä määrää pelin nopeuden - kokeile pienentää tai suurentaa arvoa
         timer.tick(200) 
 
+    # Jos peli loppuu, väläytetään ruuutu valkoisesta mustaksi...
     for i in range(222, 1, -1):
         scr.fill((i,i,i))
         pygame.display.flip()
         timer.tick(300)
 
+    # ...ja vähennetään yksi elämä
     lives -= 1
 
+    # Jos elämät loppuivat, peli loppuu
     if lives == 0:
 
         for i in range(0, 255):
-- 
GitLab