SHARE
TWEET

Untitled

a guest Jun 18th, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import pygame, sys
  2. from copy import deepcopy
  3. from random import randint
  4.  
  5. screen_height = 540
  6. screen_width = 720
  7. screen = pygame.display.set_mode([screen_width,screen_height])
  8. figures = []
  9. pygame.init()
  10. score = 0
  11. def check_lines():
  12.     a = 0
  13.     for y in range(1,30):
  14.         numb = 0
  15.         delete = []
  16.  
  17.         for figure in figures:
  18.  
  19.             for cell in figure.cells:
  20.                 if cell.y < 0:
  21.                     sys.exit()
  22.                 if cell.y == y:
  23.                     numb += 1
  24.                     delete.append(cell)
  25.         if numb >= 15:
  26.             a += 15
  27.             for fig in figures:
  28.                 fig.cells = list(set(fig.cells) - set(delete))
  29.     return a
  30.  
  31. def check_collide(figure, figures): #sprawdzanie czy figura nie styka się z jakimś elementem
  32.     for cell in figure.cells:
  33.         if cell.y >= 29:
  34.             figure.collide = True
  35.             return True
  36.         for fig in figures:
  37.             if figure != fig:
  38.                 for cell1 in fig.cells:
  39.                     for cell2 in figure.cells:
  40.                         if cell2.y + 1 == cell1.y and cell2.x == cell1.x:
  41.                             figure.collide = True
  42.                             return True
  43.     figure.collide = False
  44.     return False
  45.  
  46.  
  47.  
  48.  
  49. class Cell:
  50.     def __init__(self, posx, posy, color, startX, startY):
  51.         self.startX = startX
  52.         self.startY = startY
  53.         self.x = posx
  54.         self.y = posy
  55.         self.color = color
  56.     def draw(self):
  57.         pygame.draw.rect(screen, self.color, [51 + 15 * self.x, 31 + 15*self.y, 14, 14])
  58. class Figure:
  59.  
  60.     def __init__(self, shape:list, collide:bool, posx, posy, color, rotation):
  61.         self.cells = []
  62.         self.centerCell = Cell
  63.         self.collide = collide
  64.         yIndex = 0
  65.         self.rot = rotation;
  66.         self.color = color
  67.         self.x = posx
  68.         self.y = posy
  69.         for y in shape:     #Tworzenie figury na podstawie listy znaków  _
  70.             xIndex = 0      #każde # to część figury np. ['-#'         _| |
  71.                             #                             '##'] to    |___|
  72.             for x in y:
  73.                 if x == "#":
  74.                     if len(self.cells) == 0:
  75.                         self.centerCell = Cell(xIndex + posx, yIndex + posy, self.color, xIndex, yIndex)
  76.                     if Cell(xIndex + posx, yIndex + posy, color, xIndex, yIndex) == self.centerCell: #centerCell to klocek wokół ktorego
  77.                         self.cells.append(Cell(xIndex + posx, yIndex + posy, self.color))            #obracają sie wszystkie inne klocki
  78.                     else:                                               #początkowe obrócenie figury
  79.                         if self.rot == 0:
  80.                             self.cells.append(Cell(xIndex + posx, yIndex + posy, self.color, xIndex, yIndex))
  81.                         if self.rot == 1:
  82.                             self.cells.append(Cell(yIndex + posx, -xIndex + posy, self.color, xIndex, yIndex))
  83.                         if self.rot == 2:
  84.                             self.cells.append(Cell(-xIndex + posx, -yIndex + posy, self.color, xIndex, yIndex))
  85.                         if self.rot == 3:
  86.                             self.cells.append(Cell(-yIndex + posx, xIndex + posy, self.color, xIndex, yIndex))
  87.  
  88.                 xIndex += 1
  89.             yIndex += 1
  90.  
  91.     def rotate(self): #obrót figury o 90stopni wokół klocka CenterCell
  92.         if not self.collide:
  93.             self.rot += 1;
  94.             for cell in self.cells:
  95.                 if cell != self.centerCell:
  96.                     if self.rot % 4 == 0:
  97.                         cell.x = cell.startX + self.x
  98.                         cell.y = cell.startY + self.y
  99.                     if self.rot % 4 == 1:
  100.                         cell.x = cell.startY + self.x
  101.                         cell.y = -cell.startX + self.y
  102.                     if self.rot % 4 == 2:
  103.                         cell.x = -cell.startX + self.x
  104.                         cell.y = -cell.startY + self.y
  105.                     if self.rot % 4 == 3:
  106.                         cell.x = -cell.startY + self.x
  107.                         cell.y = cell.startX + self.y
  108.  
  109.  
  110.     def draw(self):
  111.         for cell in self.cells:
  112.             cell.color = self.color
  113.             cell.draw()
  114.     def move(self, direction):
  115.         if direction == 0: #ruch w dół
  116.             self.y += 1
  117.         if direction == 1: #ruch w prawo
  118.             self.x += 1
  119.         if direction == 2: #ruch w lewo
  120.             self.x -= 1
  121.         for cell in self.cells:
  122.             if direction == 0 and not self.collide:
  123.                 cell.y += 1
  124.             if direction == 1:
  125.                 cell.x += 1
  126.             if direction == 2:
  127.                 cell.x -= 1
  128.  
  129.  
  130.  
  131.  
  132. def can(figure, whatMove): #sprawdzanie czy figura może wykonać dany ruch
  133.     start = deepcopy(figure)
  134.     if whatMove == "rotate":
  135.         start.rotate()
  136.     if whatMove == "moveLeft":
  137.         start.move(2)
  138.     if whatMove == "moveRight":
  139.         start.move(1)
  140.     for cell1 in start.cells:
  141.         if cell1.x > 14 or cell1.x < 0 or cell1.y > 29:
  142.             return False
  143.         for figure2 in figures:
  144.             if figure2 != figure:
  145.                 for cell in figure2.cells:
  146.                     if cell.x == cell1.x and cell.y == cell1.y:
  147.                         return False
  148.     del(start)
  149.     return True
  150.  
  151. shapes = [["##", "#-"], ['#', '#', '#'], ['##', '#-', '#-']] #kształty figur
  152. exist = False
  153.  
  154. font_name = pygame.font.match_font('arial')
  155. def draw_text(surface, text, size, x, y):
  156.     font = pygame.font.Font(font_name, size)
  157.     text_surface = font.render(text, True, [255, 255, 255])
  158.     text_rect = text_surface.get_rect()
  159.     text_rect.midtop = (x, y)
  160.     surface.blit(text_surface, text_rect)
  161.  
  162.  
  163. clock = pygame.time.Clock()
  164. frame_count = 0
  165. frame_rate = 30
  166.  
  167. while True:
  168.     screen.fill((0, 0, 0))
  169.     pygame.draw.rect(screen, [255, 255, 255], [50, 30, 225, 450], 2) ##rysowanie planszy
  170.     for x in range(1, 15):
  171.         pygame.draw.line(screen, [255, 255, 255], [50 + 15 * x, 30], [50 + 15 * x, 480], 1)
  172.     for x in range(1, 30):
  173.         pygame.draw.line(screen, [255, 255, 255], [50, 30 + 15 * x], [275, 30 + 15 * x], 1)
  174.     if exist == 0 : #tworzenie klocka jesli aktywny nie istnieje
  175.         figures.insert(0, Figure(shapes[randint(0, len(shapes)- 1)], False, 7, 0, [randint(0,255), randint(0,255),randint(0,255)], randint(0,3)))
  176.         exist = 1
  177.     for figure in figures:
  178.         check_collide(figure, figures)
  179.         if frame_count % 5 == 0: #co kazde 5 klatek figura spada
  180.             figure.move(0)
  181.         figure.draw()
  182.  
  183.     if figures[0].collide and exist: #jesli klocek uderzy exist na początku petli while stworzy nowy klocek
  184.         exist = False
  185.         score += check_lines()
  186.  
  187.  
  188.  
  189.     for event in pygame.event.get():
  190.         if event.type == pygame.KEYDOWN: #Sterowanie
  191.             if event.key == pygame.K_SPACE:
  192.                 if can(figures[0], "rotate"):
  193.                     figures[0].rotate()
  194.             if event.key == pygame.K_LEFT and exist:
  195.                 if can(figures[0], "moveLeft"):
  196.                     figures[0].move(2)
  197.             if event.key == pygame.K_RIGHT and exist:
  198.                 if can(figures[0], "moveRight"):
  199.                     figures[0].move(1)
  200.         if event.type == pygame.QUIT:
  201.             sys.exit(0)
  202.     draw_text(screen, str(score), 72, 450, 320)
  203.     clock.tick(frame_rate)
  204.     frame_count += 1
  205.     pygame.display.flip()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top