200 lines
6.1 KiB
Python
200 lines
6.1 KiB
Python
import pygame
|
||
from random import choice
|
||
from domino import Domino
|
||
from time import time
|
||
import settings as s
|
||
from screens import Hand_screen, Game_screen, Button
|
||
|
||
from pygame.locals import (
|
||
K_ESCAPE,
|
||
KEYDOWN,
|
||
QUIT,
|
||
MOUSEBUTTONDOWN,
|
||
MOUSEBUTTONUP
|
||
)
|
||
|
||
pygame.init()
|
||
|
||
pygame.font.init()
|
||
my_font = pygame.font.SysFont('Calibri (Body)', 60)
|
||
|
||
# инициализируем настроки экрана и домино
|
||
SCREEN_WIDTH = s.SCREEN_WIDTH
|
||
SCREEN_HEIGHT = s.SCREEN_HEIGHT
|
||
DOMINO_W = s.DOMINO_W
|
||
DOMINO_H = s.DOMINO_H
|
||
# screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
|
||
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
|
||
|
||
# создаем группы руки и игры
|
||
|
||
dominos = pygame.sprite.Group()
|
||
group_hand_screen = pygame.sprite.Group()
|
||
group_game_screen = pygame.sprite.Group()
|
||
|
||
game_screen = Game_screen()
|
||
|
||
group_game_screen.add(game_screen)
|
||
|
||
hand_screen = Hand_screen()
|
||
group_hand_screen.add(hand_screen)
|
||
|
||
get_button = Button()
|
||
group_hand_screen.add(get_button)
|
||
|
||
x = 100
|
||
y = SCREEN_HEIGHT - DOMINO_H / 2 - 25
|
||
|
||
# стартовая рука
|
||
for i in range(6):
|
||
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)
|
||
|
||
pygame.display.flip()
|
||
run = True
|
||
|
||
mouse_down = False
|
||
|
||
mouse_old_pos = [pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]]
|
||
r_click_cd = 0.2
|
||
r_click_time = 0
|
||
|
||
win = False
|
||
|
||
while run:
|
||
|
||
for event in pygame.event.get():
|
||
# Did the user hit a key?
|
||
if event.type == KEYDOWN:
|
||
# Was it the Escape key? If so, stop the loop.
|
||
if event.key == K_ESCAPE:
|
||
run = False
|
||
|
||
|
||
elif event.type == MOUSEBUTTONDOWN:
|
||
if event.button == 1:
|
||
mouse_down = "left"
|
||
elif event.button == 3:
|
||
mouse_down = "right"
|
||
|
||
elif event.type == MOUSEBUTTONUP:
|
||
mouse_down = False
|
||
|
||
# Did the user click the window close button? If so, stop the loop.
|
||
elif event.type == QUIT:
|
||
run = False
|
||
|
||
if mouse_down:
|
||
move = False
|
||
|
||
# получаем координаты мыши, и её parvietojums
|
||
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:
|
||
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, 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)
|
||
|
||
# если мы кликнули на кнопку, добaвляем в руку новые домино
|
||
if not move and mouse_down == "left":
|
||
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))
|
||
|
||
|
||
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)
|
||
|
||
mouse_old_pos = [pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]]
|
||
|
||
# print(len(dominos), len(s.DOMINOS))
|
||
# если у игрока на руке не осталось фишек, и в колоде тоже, то он побеждает, и программа выходит из while
|
||
if len(dominos) <= 0 and len(s.DOMINOS) <= 0:
|
||
win = True
|
||
break
|
||
elif game_screen.lives <= 0:
|
||
break
|
||
|
||
print(game_screen.lives)
|
||
|
||
pygame.display.flip()
|
||
|
||
# экран победы
|
||
|
||
|
||
if win:
|
||
text = "You win!"
|
||
else:
|
||
text = ":("
|
||
|
||
text = my_font.render(text, True, (255, 255, 255))
|
||
|
||
run = True
|
||
while run:
|
||
for event in pygame.event.get():
|
||
# Did the user hit a key?
|
||
if event.type == KEYDOWN:
|
||
# Was it the Escape key? If so, stop the loop.
|
||
if event.key == K_ESCAPE:
|
||
run = False
|
||
|
||
|
||
elif event.type == MOUSEBUTTONDOWN:
|
||
run = False
|
||
|
||
surf = pygame.Surface((500, 200))
|
||
color = (255, 50, 50)
|
||
surf.fill(color)
|
||
|
||
rect = surf.get_rect(center=(s.SCREEN_WIDTH / 2, s.SCREEN_HEIGHT / 2))
|
||
screen.blit(surf, rect)
|
||
|
||
screen.blit(text, (s.SCREEN_WIDTH / 2 - 250, s.SCREEN_HEIGHT / 2 - 100))
|
||
|
||
pygame.display.flip()
|