diff --git a/domino.py b/domino.py index 8788af2..bd843fe 100644 --- a/domino.py +++ b/domino.py @@ -3,16 +3,6 @@ from time import time from random import randint import settings as s from screens import Empty_domino -from pygame.locals import ( - K_UP, - K_DOWN, - K_LEFT, - K_RIGHT, - K_ESCAPE, - KEYDOWN, - QUIT, - -) pygame.font.init() my_font = pygame.font.SysFont('Calibri (Body)', 50) @@ -21,7 +11,7 @@ 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): + def __init__(self, x, y, values, index): super().__init__() self.type = "domino" self.w = s.DOMINO_W @@ -31,14 +21,30 @@ class Domino(pygame.sprite.Sprite): 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.start_pos = [x - self.w / 2, y - self.h / 2] - self.values = [randint(0, 6), randint(0, 6)] + 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 - def blit_domino(self, screen, hand, hand_group): screen.blit(self.surf, self.rect) @@ -67,7 +73,7 @@ class Domino(pygame.sprite.Sprite): 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): + 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: @@ -81,19 +87,20 @@ class Domino(pygame.sprite.Sprite): elif self.type_pos == "hand": - self.update_type_pos(hand, group_hand, game) + 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): + 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): - move = False if empty.pos == "up": if not game.value_up or game.value_up == self.values[1]: move = True @@ -106,10 +113,14 @@ class Domino(pygame.sprite.Sprite): 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 diff --git a/main.py b/main.py index 3096990..124959e 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,11 @@ import pygame -import random +from random import choice from domino import Domino from time import time import settings as s -from screens import Hand_screen, Game_screen +from screens import Hand_screen, Game_screen, Button from pygame.locals import ( - K_UP, - K_DOWN, - K_LEFT, - K_RIGHT, K_ESCAPE, KEYDOWN, QUIT, @@ -25,7 +21,6 @@ DOMINO_H = s.DOMINO_H # screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN) screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) - all_sprites = pygame.sprite.Group() dominos = pygame.sprite.Group() group_hand_screen = pygame.sprite.Group() @@ -36,25 +31,28 @@ all_sprites.add(game_screen) group_game_screen.add(game_screen) hand_screen = Hand_screen() +group_hand_screen.add(hand_screen) all_sprites.add(hand_screen) - - +get_button = Button() +group_hand_screen.add(get_button) +all_sprites.add(get_button) x = 100 y = SCREEN_HEIGHT - DOMINO_H / 2 - 25 + +# print(len(all_sprites)) + for i in range(6): - domino = Domino(x, y) - x += DOMINO_W+10 + values = choice(s.DOMINOS) + domino = Domino(x, y, values, i) + s.DOMINOS.remove(values) + x += DOMINO_W + 10 dominos.add(domino) group_hand_screen.add(domino) all_sprites.add(domino) - - - - pygame.display.flip() run = True @@ -92,34 +90,50 @@ while run: mouse_new_pos = pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1] mouse_move = [mouse_old_pos[0] - mouse_new_pos[0], mouse_old_pos[1] - mouse_new_pos[1]] - for domino in group_hand_screen: - domino.update_color(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]) + if domino.type == "domino": + domino.update_color(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]) - if mouse_down == "left": - move = domino.update_pos(move, mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1], hand_screen, group_hand_screen, game_screen) - - elif mouse_down == "right" and time() - r_click_time >= r_click_cd: - r_click_time = domino.update_rotation(mouse_new_pos[0], mouse_new_pos[1], r_click_time) + if mouse_down == "left": + move = domino.update_pos(move, mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1], + hand_screen, group_hand_screen, game_screen, dominos) + elif mouse_down == "right" and time() - r_click_time >= r_click_cd: + r_click_time = domino.update_rotation(mouse_new_pos[0], mouse_new_pos[1], r_click_time) if not move and mouse_down == "left": - game_screen.update_pos(mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1]) - - - + values = False + if time() - r_click_time >= r_click_cd and len(dominos) != 0: + r_click_time, values, coor = get_button.active_button(mouse_new_pos[0], mouse_new_pos[1], r_click_time, dominos) + if values: + domino_new = Domino(coor[0], coor[1], values, len(dominos) - 1) + dominos.add(domino_new) + group_hand_screen.add(domino_new) + else: + game_screen.update_pos(mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1]) + else: + for domino in group_hand_screen: + if domino.type == "domino": + domino.update_color(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]) + domino.update_type_pos(hand_screen, group_hand_screen, game_screen, dominos) screen.fill((230, 230, 230)) - for entity in all_sprites: - if entity.type == "domino": - entity.blit_domino(screen, hand_screen, group_hand_screen) - elif entity.type == "game_screen": - game_screen.blit_g_screen(screen) + def blit_group(group): + for entity in group: + if entity.type == "domino": + entity.blit_domino(screen, dominos) + elif entity.type == "button": + entity.blit_button(screen) + + else: + screen.blit(entity.surf, entity.rect) + + # blit_group(group_game_screen) + game_screen.blit_g_screen(screen, dominos) + blit_group(group_hand_screen) - else: - screen.blit(entity.surf, entity.rect) mouse_old_pos = [pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]] diff --git a/main_copy.py b/main_copy.py new file mode 100644 index 0000000..e69de29 diff --git a/screens.py b/screens.py index c6cccfb..cf3315d 100644 --- a/screens.py +++ b/screens.py @@ -1,7 +1,13 @@ import pygame import settings as s +from time import time +from random import choice +# from domino import Domino +pygame.font.init() +my_font = pygame.font.SysFont('Calibri (Body)', 50) + class Hand_screen(pygame.sprite.Sprite): def __init__(self): super().__init__() @@ -15,10 +21,46 @@ class Hand_screen(pygame.sprite.Sprite): self.rect = self.surf.get_rect(center=(self.pos[0] + s.SCREEN_WIDTH / 2, self.pos[1] + self.h / 2)) +class Button(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.type = "button" + self.w = 300 + self.h = 50 + self.color = (101, 71, 60) + self.surf = pygame.Surface((self.w, self.h)) + self.surf.fill(self.color) + self.pos = (s.SCREEN_WIDTH-30, s.SCREEN_HEIGHT - 350) + self.rect = self.surf.get_rect(center=(self.pos[0] - self.w / 2, self.pos[1])) + self.text = "take new domino" + + + def blit_button(self, screen): + + screen.blit(self.surf, self.rect) + + text = my_font.render(f"{self.text}", True, (255, 255, 255)) + screen.blit(text, + (self.rect.x + (self.w / 2) - text.get_width() / 2, self.rect.y + (self.h / 2) - text.get_height() / 2)) + # print(self.rect.x + (self.w / 2) - v_up.get_width(), self.rect.y + (self.h / 4) - v_up.get_height()) + + + def active_button(self, mouse_x, mouse_y, r_click_time, dominos): + 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) + x = 110 * len(dominos) - 1 + y = s.SCREEN_HEIGHT - s.DOMINO_H / 2 - 25 + values = choice(s.DOMINOS) + # domino = Domino(x, y, values, len(dominos) - 1) + s.DOMINOS.remove(values) + + return time(), values, [x, y] + return r_click_time, False, False + class Empty_domino(pygame.sprite.Sprite): def __init__(self, x, y, pos): super().__init__() - self.type = "domino" + self.type = "empty domino" self.w = s.DOMINO_W * 1.1 self.h = s.DOMINO_H * 1.1 self.surf = pygame.Surface((self.w, self.h)) @@ -34,7 +76,7 @@ class Game_screen(pygame.sprite.Sprite): self.type = "game_screen" self.w = s.SCREEN_WIDTH * 10 self.h = s.SCREEN_HEIGHT * 10 - self.color = (230, 0, 230) + self.color = (220, 220, 220) self.surf = pygame.Surface((self.w, self.h)) self.surf.fill(self.color) self.rect = self.surf.get_rect(center=(0, 0)) @@ -59,11 +101,14 @@ class Game_screen(pygame.sprite.Sprite): self.empty_up = empty_both self.empty_down = empty_both - def blit_g_screen(self, screen): + def blit_g_screen(self, screen, dominos): # add_empty() for entity in self.group: - screen.blit(entity.surf, entity.rect) + if entity.type == "domino": + entity.blit_domino(screen, dominos) + else: + screen.blit(entity.surf, entity.rect) def update_pos(self, mouse_x, mouse_y, mouse_new_x, mouse_new_y): # check if mouse colide with domino @@ -72,3 +117,6 @@ class Game_screen(pygame.sprite.Sprite): for entity in self.group: entity.rect.x -= mouse_x entity.rect.y -= mouse_y + + + diff --git a/settings.py b/settings.py index 7fcc10c..b6933d8 100644 --- a/settings.py +++ b/settings.py @@ -1,5 +1,20 @@ # Define constants for the screen width and height +from random import choice + SCREEN_WIDTH = 1200 -SCREEN_HEIGHT = 900 +SCREEN_HEIGHT = 1000 DOMINO_W = 100 -DOMINO_H = 200 \ No newline at end of file +DOMINO_H = 200 + +DOMINOS = [] + +values = range(7) +for v_up in values: + for v_down in values: + if not [v_up, v_down] in DOMINOS and not [v_down, v_up] in DOMINOS: + DOMINOS.append([v_up, v_down]) + +# for _ in range(10): +# DOMINOS.append([1, 1]) + +# print(DOMINOS) \ No newline at end of file