Add: dominos take button. Layer order changed, game end add.
parent
c77457fb98
commit
1a17d4aa84
47
domino.py
47
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
|
||||
|
||||
|
|
80
main.py
80
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]]
|
||||
|
||||
|
|
56
screens.py
56
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
|
||||
|
||||
|
||||
|
||||
|
|
19
settings.py
19
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
|
||||
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)
|
Loading…
Reference in New Issue