Add: dominos take button. Layer order changed, game end add.

master
IljaP 2024-04-12 11:10:56 +03:00
parent c77457fb98
commit 1a17d4aa84
5 changed files with 145 additions and 57 deletions

View File

@ -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

80
main.py
View File

@ -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]]

0
main_copy.py 100644
View File

View File

@ -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

View File

@ -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
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)