Advertisement
jee7

TIA Tetris - Versioon 9

Nov 18th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.87 KB | None | 0 0
  1. import pygame, random
  2.  
  3.  
  4. def joonistaRuut(x, y, värv):
  5.     alumineVärv = (max(0, värv[0] - 10), max(0, värv[1] - 10), max(0, värv[2] - 10))
  6.     pygame.draw.rect(ekraan, alumineVärv, (x * ruuduLaius, y * ruuduLaius, ruuduLaius, ruuduLaius))
  7.  
  8.     ülemineVärv = [min(üksVärv + 10, 255) for üksVärv in värv]
  9.     pygame.draw.rect(ekraan, ülemineVärv, (x * ruuduLaius, y * ruuduLaius, ruuduLaius - 1, ruuduLaius - 1))
  10.  
  11.     pygame.draw.rect(ekraan, värv, (x * ruuduLaius + 1, y * ruuduLaius + 1, ruuduLaius - 2, ruuduLaius - 2))
  12.  
  13.    
  14.  
  15. #See klass hoiab väljaku seisu ja oskab seda joonistada
  16. class Kaart:
  17.     laius = 20  #niipalju ruute laiuses
  18.     kõrgus = 40 #niipalju ruute kõrguses
  19.  
  20.     def __init__(self):
  21.         #Teeme 2-mõõtmelise listi
  22.         self.kaart = []
  23.         for x in range(Kaart.laius):
  24.             self.kaart.append([])
  25.             for y in range(Kaart.kõrgus):
  26.                 self.kaart[x].append(0)
  27.  
  28.     def joonista(self):
  29.         #Joonistame ruudud
  30.         for x, rida in enumerate(self.kaart):
  31.             for y, lahter in enumerate(rida):
  32.                 if lahter != 0:
  33.                     if isinstance(lahter, Kujund):
  34.                         kasJoonistas = lahter.joonista(x, y)
  35.                     else:
  36.                         joonistaRuut(x, y, lahter)
  37.                         kasJoonistas = True
  38.                    
  39.                 if lahter == 0 or not kasJoonistas:
  40.                     pygame.draw.rect(ekraan, (20, 20, 20), (x * ruuduLaius, y * ruuduLaius, ruuduLaius, ruuduLaius))
  41.                     pygame.draw.rect(ekraan, (0, 0, 0), (x * ruuduLaius + 1, y * ruuduLaius + 1, ruuduLaius - 2, ruuduLaius - 2))
  42.  
  43.  
  44.     def lisaKujund(self, kujund):
  45.         for lokaalneX, rida in enumerate(kujund.kujund):
  46.             for lokaalneY, lahter in enumerate(rida):
  47.                 self.kaart[kujund.x + lokaalneX][kujund.y + lokaalneY] = kujund;
  48.  
  49.     def uuenda(self, kujund):
  50.         #Kui kujundi all on veel tühjasi ridu:
  51.         if (kujund.y < len(self.kaart[0]) - len(kujund.kujund[0])):
  52.            
  53.             #Uuendame kaardi peal kujundi ruute
  54.             for x in range(kujund.x, kujund.x + len(kujund.kujund)):
  55.                 for y in range(len(kujund.kujund[x - kujund.x]) + kujund.y, kujund.y - 1, -1):
  56.                     self.kaart[x][y] = self.kaart[x][y - 1]
  57.  
  58.             #Liigutame kujundi 1 ruut allapoole
  59.             kujund.y += 1
  60.  
  61.         else:
  62.             kujund.kasElus = False
  63.             for x in range(len(kujund.kujund)):
  64.                 for y in range(len(kujund.kujund[0])):
  65.                     if (kujund.kujund[x][y]):
  66.                         self.kaart[kujund.x + x][kujund.y + y] = kujund.värv
  67.                     else:
  68.                         self.kaart[kujund.x + x][kujund.y + y] = 0
  69.        
  70. #Klass, mille objektid on erinevad kujundid
  71. class Kujund:
  72.  
  73.     def __init__(self, x, y, kujund, värv):
  74.         self.x = x             #Kujundi asukoht kaardil
  75.         self.y = y          
  76.         self.kujund = kujund   #2-mõõtmeline list, mis hoiab kujundit
  77.         self.värv = värv
  78.         self.kasElus = True
  79.  
  80.     def joonista(self, kaardiX, kaardiY):
  81.         #Joonistame kujundi vastavatele kordinaatidele, kui kujund on seal
  82.         x = kaardiX - self.x
  83.         y = kaardiY - self.y
  84.         if self.kujund[x][y]:
  85.             joonistaRuut(kaardiX, kaardiY, self.värv)
  86.  
  87.             return True
  88.         else:
  89.  
  90.             return False
  91.  
  92.  
  93. class KujundiGeneraator:
  94.  
  95.     def __init__(self):
  96.         self.kujundid = [
  97.             [[False, False], [True, True], [False, False]],
  98.             [[True, False], [True, True], [False, False]],
  99.             [[False, False], [True, True], [False, True]],
  100.             [[True, False], [True, False], [True, False]]
  101.         ]
  102.         self.värvid = [
  103.             (100, 0, 0),
  104.             (0, 100, 0),
  105.             (0, 0, 100)
  106.         ]
  107.  
  108.     def genereeri(self):
  109.  
  110.         return Kujund(10, 10, random.choice(self.kujundid), random.choice(self.värvid))
  111.    
  112.        
  113. #Globaalne ruudu laius/kõrgus
  114. ruuduLaius = 15
  115. #Vastava suurusega aken
  116. ekraan = pygame.display.set_mode([ruuduLaius * Kaart.laius, ruuduLaius * Kaart.kõrgus])
  117. #Meie kaart
  118. kaart = Kaart()
  119.  
  120. kujundiGeneraator = KujundiGeneraator()
  121. kujund = kujundiGeneraator.genereeri()
  122. kaart.lisaKujund(kujund)
  123.  
  124. UUENDUS = pygame.USEREVENT + 1
  125. pygame.time.set_timer(UUENDUS, 100)
  126.  
  127.  
  128. while True:
  129.     ekraan.fill((0,0,0))
  130.  
  131.     kaart.joonista()
  132.    
  133.  
  134.     pygame.display.flip()
  135.     pygame.time.delay(10)
  136.  
  137.     events = pygame.event.get()
  138.     for oneEvent in events:
  139.         if oneEvent.type == UUENDUS:
  140.             kaart.uuenda(kujund)
  141.             if not kujund.kasElus:
  142.                 kujund = kujundiGeneraator.genereeri()
  143.                 kaart.lisaKujund(kujund)
  144.            
  145.         if oneEvent.type == pygame.QUIT:
  146.             #quit()
  147.             exit()
  148.             break;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement