Pygame-RKG-domino/domino.py

152 lines
5.6 KiB
Python

import pygame
from time import time
from random import randint
import settings as s
from screens import Empty_domino
pygame.font.init()
my_font = pygame.font.SysFont('Calibri (Body)', 50)
# Define a Player object by extending pygame.sprite.Sprite
# The surface drawn on the screen is now an attribute of 'player'
class Domino(pygame.sprite.Sprite):
def __init__(self, x, y, values, index):
super().__init__()
self.type = "domino"
self.w = s.DOMINO_W
self.h = s.DOMINO_H
self.surf = pygame.Surface((self.w, self.h))
self.color = (0, 0, 0)
self.select_color = (100, 100, 100)
self.surf.fill(self.color)
self.rect = self.surf.get_rect(center=(x, y))
self.index = index
self.type_pos = "hand"
self.start_pos = [x - self.w / 2, y - self.h / 2]
self.values = values
def blit_domino(self, screen, dominos):
movement = self.w + 10
i = 0
for domino in dominos:
if i == 0:
domino.start_pos[0] -= domino.index * movement
domino.index = 0
else:
domino.start_pos[0] -= (domino.index - i) * movement
domino.index = i
i += 1
screen.blit(self.surf, self.rect)
v_up = my_font.render(f"{self.values[0]}", True, (255, 255, 255))
v_down = my_font.render(f"{self.values[1]}", True, (255, 255, 255))
screen.blit(v_up,
(self.rect.x + (self.w / 2) - v_up.get_width(), self.rect.y + (self.h / 4) - v_up.get_height()))
# print(self.rect.x + (self.w / 2) - v_up.get_width(), self.rect.y + (self.h / 4) - v_up.get_height())
screen.blit(v_down, (
self.rect.x + (self.w / 2) - v_down.get_width(), self.rect.y + (self.h / 4) * 3 - v_down.get_height()))
# screen.blit(v_up,
# (310, 16))
def update_color(self, mouse_x, mouse_y):
# check if mouse colide with domino
if self.rect.x <= mouse_x <= self.rect.x + self.w and self.rect.y <= mouse_y <= self.rect.y + self.h:
self.surf.fill(self.select_color)
else:
self.surf.fill(self.color)
def update_rotation(self, mouse_x, mouse_y, r_click_time):
if self.rect.x <= mouse_x <= self.rect.x + self.w and self.rect.y <= mouse_y <= self.rect.y + self.h:
# pygame.transform.rotate(self.surf, 90)
self.values = self.values[::-1]
return time()
return r_click_time
def update_pos(self, move, mouse_x, mouse_y, mouse_new_x, mouse_new_y, hand, group_hand, game, dominos):
# check if mouse colide with domino
if self.rect.x <= mouse_new_x <= self.rect.x + self.w and self.rect.y <= mouse_new_y <= self.rect.y + self.h:
self.rect.x -= mouse_x
self.rect.y -= mouse_y
# self.rect.x = mouse_x
# self.rect.y = mouse_y
# print(self.rect.x, self.rect.y, mouse_x, mouse_y)
return True
elif self.type_pos == "hand":
self.update_type_pos(hand, group_hand, game, dominos)
# if self.type_pos == "hand":
# self.rect.x = self.start_pos[0]
# self.rect.y = self.start_pos[1]
return move
def update_type_pos(self, hand, group_hand, game, dominos):
if self.type_pos == "hand":
if not hand.rect.colliderect(self.rect):
move = False
for empty in game.empty_group:
if empty.rect.colliderect(self.rect):
if empty.pos == "up":
if not game.value_up or game.value_up == self.values[1]:
move = True
elif empty.pos == "down":
if not game.value_down or game.value_down == self.values[0]:
move = True
elif empty.pos == "both":
move = True
if move:
self.surf.fill(self.color)
self.type_pos == "game"
group_hand.remove(self)
dominos.remove(self)
game.group.add(self)
self.rect.x = empty.rect.x
self.rect.y = empty.rect.y
if empty.pos == "up":
game.value_up = self.values[0]
game.empty_up.rect.y -= game.empty_up.h + 10
elif empty.pos == "down":
game.value_down = self.values[1]
game.empty_down.rect.y += game.empty_down.h + 10
elif empty.pos == "both":
game.value_up = self.values[0]
game.value_down = self.values[1]
game.empty_up = Empty_domino(empty.rect.x, empty.rect.y - (s.DOMINO_W * 1.1 * 2 + 10), "up")
game.group.add(game.empty_up)
game.empty_group.add(game.empty_up)
game.empty_down = Empty_domino(empty.rect.x, empty.rect.y + (s.DOMINO_W * 1.1 * 2 + 10), "down")
game.group.add(game.empty_down)
game.empty_group.add(game.empty_down)
empty.kill()
else:
self.rect.x = self.start_pos[0]
self.rect.y = self.start_pos[1]