Advertisement
L4zzur

Pygame Fast Clicker

May 29th, 2023 (edited)
2,070
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.42 KB | Source Code | 0 0
  1. # импортируем нужные модули
  2. import pygame
  3. import time
  4. from random import randint
  5.  
  6. pygame.init()
  7.  
  8. back = (200, 255, 255) # цвет фона
  9. window = pygame.display.set_mode((500, 500)) # окно игры
  10. window.fill(back) # закрашиваем фон
  11. clock = pygame.time.Clock() # внутриигровые часы
  12.  
  13. # класс для карточек
  14. class Area():
  15.     # конструктор, задаем начальные параметры
  16.     # место карточки x y, её ширина и высота width и height
  17.     # и цвет color
  18.     def __init__(self, x=0, y=0, width=10, height=10, color=None):
  19.         self.rect = pygame.Rect(x, y, width, height) # прямоугольная область
  20.         self.fill_color = color # цвет карточки
  21.  
  22.     # изменение цвета карточки
  23.     def color(self,new_color):
  24.         self.fill_color = new_color
  25.  
  26.     # закрашивание карточки цветом
  27.     def fill(self):
  28.         pygame.draw.rect(window, self.fill_color, self.rect)
  29.  
  30.     # отрисовка рамки у карточки
  31.     def outline(self, frame_color, size):
  32.         pygame.draw.rect(window, frame_color, self.rect, size)
  33.  
  34.     # проверка на нажатие на карточку
  35.     def collidepoint(self, x, y):
  36.         return self.rect.collidepoint(x, y)
  37.  
  38. # класс-наследник для карточек с текстом
  39. class Label(Area):
  40.     # установить текст для карточки
  41.     def set_text(self, text, fsize=12, color=(0,0,0)):
  42.         self.font = pygame.font.SysFont('verdana', fsize) # создание шрифта с размером fsize
  43.         self.image = self.font.render(text,True, color) # картинка с текстом цвета text_color
  44.  
  45.     # отрисовка карточки и текста
  46.     def draw(self, shift_x=0, shift_y=0):
  47.         self.fill() # заливаем цветом карточку
  48.         window.blit(self.image,(self.rect.x + shift_x, self.rect.y + shift_y)) # отображаем текст со смещением вправо вниз
  49.  
  50. # цвета для карточек
  51. YELLOW = (255, 255, 0)
  52. DARK_BLUE = (0, 0, 100)
  53. BLUE = (80, 80, 255)
  54. RED = (255, 0, 0)
  55. GREEN = (0, 255, 0)
  56. LIGHT_RED = (250, 128, 114)
  57. LIGHT_GREEN = (200, 255, 200)
  58.  
  59. cards = [] # список карточек
  60. num_cards = 4 # количество карточек
  61. x = 70 # координата первой карточки
  62.  
  63. start_time = time.time() # время запуска игры
  64. cur_time = start_time
  65.  
  66. # генерация карточек
  67. for i in range(num_cards):
  68.     card = Label(x, 170, 70, 100,YELLOW) # карточка
  69.     card.outline(BLUE, 10) # синяя рамка карточки
  70.     card.set_text('CLICK', 26) # надпись на карточке
  71.     cards.append(card) # добавляем карточку в список
  72.     x += 100 # смещаемся вправо
  73.  
  74. time_text = Label(0, 0, 50, 50, back) # надпись "Время"
  75. time_text.set_text('Время:', 40, DARK_BLUE)
  76. time_text.draw(20, 20) # отрисовываем
  77. score_text = Label(380, 0, 50, 50, back) # надпись "Счёт"
  78. score_text.set_text('Счёт:', 45, DARK_BLUE)
  79. score_text.draw(20, 20) # отрисовываем
  80.  
  81. timer = Label(50, 55, 50, 40, back) # надпись с временем
  82. timer.set_text('0', 40, DARK_BLUE)
  83. timer.draw(0, 0) # отрисовываем
  84.  
  85. score = Label(430, 55, 50, 40, back) # надпись с счетом
  86. score.set_text('0', 40, DARK_BLUE)
  87. score.draw(0, 0) # отрисовываем
  88.  
  89. wait = 0 # время ожидания для смены карточки с CLICK
  90. points = 0 # счет
  91.  
  92. """ Игровой цикл """
  93. while True:
  94.     # если вышло время для надписи CLICK
  95.     if wait == 0:
  96.         wait = 20 # восстанавливаем таймер
  97.         num = randint(0, num_cards - 1) # номер случайной карточки
  98.         for i in range(num_cards):
  99.             cards[i].color(YELLOW) # каждую карточку закрашиваем желтым
  100.            
  101.             # если карточка с нужным номером
  102.             if i == num:
  103.                 cards[i].draw(10, 40) # устанавливаем текст CLICK
  104.             # иначе
  105.             else:
  106.                 cards[i].fill() # просто закрашиваем карточку
  107.     # если не вышло
  108.     else:
  109.         wait -= 1 # уменьшаем время
  110.    
  111.     # перебираем список событий
  112.     for event in pygame.event.get():
  113.         # если тип события "Нажата клавиша мыши" и клавиша мыши это Левая
  114.         if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
  115.             x, y = event.pos # координаты нажатия мышкой
  116.             for i in range(num_cards):
  117.                 if cards[i].collidepoint(x, y): # если нажатие попало в карточку
  118.                     if i == num:                # и эта карточка с текстом CLICK
  119.                         cards[i].color(GREEN)   # закрашиваем зеленым
  120.                         points += 1             # прибавляем одно очко
  121.                     else:                       # иначе если НЕ с текстом CLICK
  122.                         cards[i].color(RED)     # закрашиваем красным
  123.                         points -= 1             # отнимаем одно очко
  124.                     cards[i].fill() # закрашиваем карточку
  125.                     score.set_text(str(points), 40, DARK_BLUE) # обновляем текст с счетом
  126.                     score.draw(0, 0)
  127.  
  128.     new_time = time.time() # фиксируем текущее время
  129.  
  130.     # если с начала игры прошло 11 или более секунд
  131.     if new_time - start_time >= 11:
  132.         # отображаем надпись "Время вышло!!!"
  133.         lose = Label(0, 0, 500, 500, LIGHT_RED)
  134.         lose.set_text('Время вышло!!!',60,DARK_BLUE)
  135.         lose.draw(110,180)
  136.         # и ломаем игровой цикл
  137.         break
  138.  
  139.     # если прошла одна секунда
  140.     if int(new_time) - int(cur_time) == 1:
  141.         timer.set_text(str(int(new_time - start_time)), 40, DARK_BLUE) # обновляем текст с временем
  142.         timer.draw(0, 0)
  143.         cur_time = new_time # обновляем время
  144.    
  145.     # если счет больше или равен 5
  146.     if points >= 5:
  147.         # отображаем надпись "Ты победил!!!"
  148.         win = Label(0, 0, 500, 500,LIGHT_GREEN)
  149.         win.set_text('Ты победил!!!',60,DARK_BLUE)
  150.         win.draw(140, 180)
  151.         # и отображаем надпись с временем прохождения игры
  152.         result_time = Label(90, 230, 250, 250, LIGHT_GREEN)
  153.         result_time.set_text('Время прохождения: '+ str(int(new_time - start_time)) + ' сек ', 40, DARK_BLUE)
  154.         result_time.draw(0, 0)
  155.         # и ломаем игровой цикл
  156.         break
  157.     # обновляем все окно игры
  158.     pygame.display.update()
  159.     clock.tick(30)
  160. pygame.display.update()
Tags: python pygame
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement