Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from random import randint
- from inspect import currentframe, getframeinfo
- class Block(pygame.sprite.Sprite):
- def __init__(self, blocks):
- super().__init__()
- self.random_block = randint(1,7)
- self.image = blocks[self.random_block]
- self.image = pygame.transform.scale(self.image,(self.image.get_width()*.4, self.image.get_height()*.4))
- self.rect = self.image.get_rect()
- self.rect.topleft = (300,0)
- self.mask = pygame.mask.from_surface(self.image)
- def replace(self, block_colours):
- image_pixel_array = pygame.PixelArray(self.image)
- colour = block_colours[self.random_block]
- image_pixel_array.replace(colour,(0,0,0))
- del image_pixel_array
- def handle_keys(self, board_s, block, unactive_blocks):
- keys = pygame.key.get_pressed()
- if keys[pygame.K_LEFT] or keys[pygame.K_a]:
- if self.rect.left - 60 >= 0:
- self.replace(block_colours)
- self.rect.x -= 60
- self.draw(block_group, board_s)
- elif keys[pygame.K_RIGHT] or keys[pygame.K_d]:
- if self.rect.right + 60 <= 600:
- self.replace(block_colours)
- self.rect.x += 60
- self.draw(block_group, board_s)
- elif keys[pygame.K_UP] or keys[pygame.K_w]:
- self.replace(block_colours)
- topleft = self.rect.topleft
- self.image = pygame.transform.rotate(self.image, 90)
- self.rect = self.image.get_rect()
- self.rect.topleft = topleft
- self.mask = pygame.mask.from_surface(self.image)
- self.draw(block_group, board_s)
- elif keys[pygame.K_DOWN] or keys[pygame.K_s]:
- if self.rect.bottom + 60 <= 1200:
- self.replace(block_colours)
- self.rect.y += 60
- if pygame.sprite.spritecollide(block,unactive_blocks,False,pygame.sprite.collide_mask):
- self.rect.y -= 60
- block_sprite(blocks, block)
- self.draw(block_group, board_s)
- else:
- block_sprite(blocks, block)
- def move_every_second(self, block, unactive_blocks):
- if self.rect.bottom + 60 <= 1200:
- self.replace(block_colours)
- self.rect.y += 60
- if pygame.sprite.spritecollide(block,unactive_blocks,False,pygame.sprite.collide_mask):
- self.rect.y -= 60
- block_sprite(blocks, block)
- self.draw(block_group, board_s)
- else:
- block_sprite(blocks, block)
- def draw(self, block_group, board_s):
- print(self.rect.x,self.rect.y)
- block_group.draw(board_s)
- pygame.init()
- pygame.display.set_caption('Tetris')
- screen = pygame.display.set_mode((720,1280))
- board_s = pygame.Surface((600,1200))
- screen.fill((0,0,0))
- board_s.fill((0,0,0))
- blocks = {
- 1: pygame.image.load('O.png').convert_alpha(),
- 2: pygame.image.load('I.png').convert_alpha(),
- 3: pygame.image.load('S.png').convert_alpha(),
- 4: pygame.image.load('Z.png').convert_alpha(),
- 5: pygame.image.load('L.png').convert_alpha(),
- 6: pygame.image.load('J.png').convert_alpha(),
- 7:pygame.image.load('T.png')}
- block_colours = {
- 1: (0,136,255),
- 2: (0,255,64),
- 3: (208,0,255),
- 4: (0,4,255),
- 5: (255,106,0),
- 6: (102,0,255),
- 7: (255,0,42)
- }
- unactive_blocks = pygame.sprite.Group()
- def block_sprite(blocks, unactive_block):
- if unactive_block != 0:
- unactive_blocks.add(unactive_block)
- global block, block_group
- block = Block(blocks)
- block_group = pygame.sprite.Group()
- block_group.add(block)
- return unactive_blocks
- block_sprite(blocks, 0)
- block.draw(block_group, board_s)
- MOVE_EVERY_SECOND = pygame.USEREVENT
- pygame.time.set_timer(MOVE_EVERY_SECOND, 1000)
- clock = pygame.time.Clock()
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- exit()
- if event.type == MOVE_EVERY_SECOND:
- block.move_every_second(block, unactive_blocks)
- block.handle_keys(board_s, block, unactive_blocks)
- screen.blit(board_s,(0,80))
- pygame.display.flip()
- ticks = clock.tick(60)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement