Pygame-RKG-domino/main.py

204 lines
6.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
elif entity.type == "hand_screen":
entity.hand_blit(screen, game_screen.lives)
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 = "Game Over :("
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
elif event.type == QUIT:
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 - 100, s.SCREEN_HEIGHT / 2))
pygame.display.flip()