class Control(object): def __init__(self): self.screen = pg.display.set_mode((500, 500)) self.screen_rect = self.screen.get_rect() self.clock = pg.time.Clock() self.done = False self.fps = 60.0 self.color = WHITE message = "Change the screen color." self.button = Button((0, 0, 200, 50), RED, self.change_color, text=message, **BUTTON_STYLE) self.button.rect.center = (self.screen_rect.centerx, 100) def change_color(self): self.color = [random.randint(0, 255) for _ in range(3)] def event_loop(self): for event in pg.event.get(): if event.type == pg.QUIT: self.done = True self.button.check_event(event) def main_loop(self): while not self.done: self.event_loop() self.screen.fill(self.color) self.button.update(self.screen) pg.display.update() self.clock.tick(self.fps)
def redraw_home(win: pygame.Surface, code: str, color: tuple, input_rect: pygame.Rect, go: Button, lobby: Button): win.fill(WHITE) pygame.draw.rect(win, color, input_rect) code_surface = font.render(code, True, BLACK) win.blit(code_surface, (input_rect.x + 5, input_rect.y + 5)) go.update(win) lobby.update(win) input_rect.w = max(150, code_surface.get_width() + 10)
def __init__(self): self.screen = pg.display.set_mode((500, 500)) self.screen_rect = self.screen.get_rect() self.clock = pg.time.Clock() self.done = False self.fps = 60.0 self.color = WHITE message = "Change the screen color." self.button = Button((0, 0, 200, 50), RED, self.change_color, text=message, **BUTTON_STYLE) self.button.rect.center = (self.screen_rect.centerx, 100)
def setup(): global screen, game, clock, buttons, game_surface, board_image pygame.init() pygame.mixer.init() clock = pygame.time.Clock() S_WIDTH = GetSystemMetrics(0) S_HEIGHT = GetSystemMetrics(1) screen = pygame.display.set_mode( (int(S_WIDTH * 0.5), int(S_HEIGHT * 0.75))) pygame.display.set_caption("michess") pygame.display.set_icon(ICON) game = Game() buttons = [ Button((20, 30, 200, 50), LIGHT_GREY, new_game, text="New Game", **BUTTON_STYLE) ] buttons.append( Button((20, 100, 200, 50), LIGHT_GREY, undo, text="Undo", **BUTTON_STYLE)) buttons.append( Button((20, 170, 200, 50), LIGHT_GREY, game.random_move, text="Random Move", **BUTTON_STYLE)) game_surface = pygame.Surface((512, 512)) board_image = pygame.image.load(join("assets", "board.png"))
def __init__(self): # инициализация окна pygame.init() # задание название окна pygame.display.set_caption('игра жизнь') # задание размеров окна self.screen = pygame.display.set_mode((500, 700)) # буфер в котором определяется жива клетка или нет (0 мертва, 1 жива) self.data = [[0 for j in range(50)] for i in range(50)] # переменная отвечающая за запуск программы self.run = True # переменная времени self.clock = pygame.time.Clock() # запуск игры self.start = False # переменная инициализации self.initial = True self.startButton = Button((0, 0, 100, 100), GREEN, self.set_start, text='Старт', **BUTTON_STYLE) self.randomButton = Button((0, 0, 100, 100), RED, self.set_random, text='Рандом', **BUTTON_STYLE) self.resetButton = Button((0, 0, 100, 100), BLUE, self.set_clear, text='Очистка', **BUTTON_STYLE) self.screen_rect = self.screen.get_rect() self.startButton.rect.center = (self.screen_rect.centerx + 100, 600) self.randomButton.rect.center = (self.screen_rect.centerx, 600) self.resetButton.rect.center = (self.screen_rect.centerx - 100, 600)
def main(): pygame.init() # prepare the pygame module for use # Create a new surface and window. surface_size = 1024 main_surface = pygame.display.set_mode((surface_size, surface_size)) my_clock = pygame.time.Clock() # set up the buttons quit_btn = Button((0, 0, 200, 50), RED, end, text='Quit', **BUTTON_STYLE) pause_btn = Button((200, 0, 200, 50), RED, pause, text='Play/Pause', **BUTTON_STYLE) while True: theta = 0 while not done: # Handle evente from keyboard, mouse, etc. # Handle evente from keyboard, mouse, etc. ev = pygame.event.poll() if ev.type == pygame.QUIT: #break; pygame.quit() quit() quit_btn.check_event(ev) pause_btn.check_event(ev) if state == RUNNING: '''Draw the tree''' # Updates - change the angle theta += 0.01 # Draw everything main_surface.fill((255, 255, 0)) draw_tree(9, theta, surface_size * 0.9, (surface_size // 2, surface_size - 50), -math.pi / 2) elif state == PAUSE: """Draw the pause screen""" # put text to screen pygame.font.init() bigfont = pygame.font.SysFont('Comic Sans MS', 90) textsurface = bigfont.render('Paused', False, (0, 0, 0)) # center the text on the screen main_surface.blit( textsurface, ((surface_size // 2) - textsurface.get_width() // 2, surface_size // 2)) littlefont = pygame.font.SysFont('Comic Sans MS', 25) textsurface = littlefont.render( 'Press Quit to Quit, Press Play/Pause to Continue.', False, (0, 0, 0)) # center the text on the screen main_surface.blit( textsurface, ((surface_size // 2) - textsurface.get_width() // 2, (surface_size // 2) + textsurface.get_height() * 4)) quit_btn.update(main_surface) # add the quit button to the surface pause_btn.update( main_surface) # add the pause button to the surface pygame.display.flip() # show the surface my_clock.tick(120) continue pygame.quit() quit()
class gameoflife(object): def __init__(self): # инициализация окна pygame.init() # задание название окна pygame.display.set_caption('игра жизнь') # задание размеров окна self.screen = pygame.display.set_mode((500, 700)) # буфер в котором определяется жива клетка или нет (0 мертва, 1 жива) self.data = [[0 for j in range(50)] for i in range(50)] # переменная отвечающая за запуск программы self.run = True # переменная времени self.clock = pygame.time.Clock() # запуск игры self.start = False # переменная инициализации self.initial = True self.startButton = Button((0, 0, 100, 100), GREEN, self.set_start, text='Старт', **BUTTON_STYLE) self.randomButton = Button((0, 0, 100, 100), RED, self.set_random, text='Рандом', **BUTTON_STYLE) self.resetButton = Button((0, 0, 100, 100), BLUE, self.set_clear, text='Очистка', **BUTTON_STYLE) self.screen_rect = self.screen.get_rect() self.startButton.rect.center = (self.screen_rect.centerx + 100, 600) self.randomButton.rect.center = (self.screen_rect.centerx, 600) self.resetButton.rect.center = (self.screen_rect.centerx - 100, 600) def getData(self): return self.data def set_random(self): for i in range(len(self.data)): for j in range(len(self.data[i])): self.data[i][j] = random.randint(0, 1) def set_start(self): # если запуск уже произведен, т.е. значение self.start = true, то меняем значение на false, иначе true if self.start: self.start = False self.initial = True else: self.start = True self.initial = False def set_clear(self): # передаем новый массив с нулям self.data = [[0 for j in range(50)] for i in range(50)] # выводим в консоль для отслеживания действий print("очистка поля") # указываем что игра заверщена в этот момент self.start = False # указываем что пользователь может расставлять клетки, эта переменная активирует действия в функции сверху self.initial = True # функция поиска соседей def get_neighbour(self, i, j): neighbour = [[i + 1, j], [i - 1, j], [i, j + 1], [i, j - 1], [i + 1, j + 1], [i - 1, j + 1], [i + 1, j - 1], [i - 1, j - 1]] neighbour = [i for i in neighbour if 0 <= i[0] < 50 and 0 <= i[1] < 50] return neighbour # функция новой эволюции клетки def next_generation(self): # возвращаем прошлую версию массива self.last_generation = copy.deepcopy(self.data) # проходимся по массиву for i in range(len(self.data)): for j in range(len(self.data[i])): # ищем количество соседних клеток self.count = [ self.last_generation[k[0]][k[1]] for k in self.get_neighbour(i, j) ].count(1) # в зависимости от количества соседних, оживляем if self.last_generation[i][j] == 1: self.data[i][j] = 1 if self.count in range(2, 4) else 0 elif self.last_generation[i][j] == 0: self.data[i][j] = 1 if self.count == 3 else 0 # обновление окна def update(self): # закрашивание окна черным self.screen.fill((0, 0, 0)) # установка кнопок # вывод клеток for i in range(len(self.data)): for j in range(len(self.data[i])): if self.data[i][j] == 1: pygame.draw.rect(self.screen, ORANGE, (j * 10, i * 10, 10, 10)) self.resetButton.update(self.screen) self.startButton.update(self.screen) self.randomButton.update(self.screen) # функция действий пользователя - расстановка клеток и удаление def user_initial(self): if self.initial: x, y = pygame.mouse.get_pos() # до 500 по Y расположено окно игры if y < 500: if pygame.mouse.get_pressed()[0]: self.data[math.floor(y / 10)][math.floor(x / 10)] = 1 if pygame.mouse.get_pressed()[2]: self.data[math.floor(y / 10)][math.floor(x / 10)] = 0 self.clock.tick(60) def event_loop(self): for event in pygame.event.get(): # если окно закрыто, программа завершается if event.type == pygame.QUIT: self.run = False self.randomButton.check_event(event) self.resetButton.check_event(event) self.startButton.check_event(event) # функция запуска def start_game(self): while self.run: # обработка событий окна self.event_loop() # обновление объектов в окне self.update() # вызов функции в которой происходит расположение пользователем клеток, в случае initial = True self.user_initial() # если игра начата if self.start: # происходит вызов функции в которой происходит новое поколение клеток self.next_generation() # задержка(иначе будет все слишком быстро) self.clock.tick(10) # обновление окна pygame.display.update()
def main(): global p global display_invalid global menu global joined run = True # if (p is None): # raise Exception('Server is not running') price = 100 clock = pygame.time.Clock() input_rect = pygame.Rect(150, 400, 150, 25) code = '' active = False display_invalid = False joined = False new_lobby = Button( (150, 360, 175, 25), LIGHT_GREY, lambda: create(), text='Create Private Lobby', **HOME ) go = Button( (300, 400, 25, 25), LIGHT_GREY, lambda: join(code), text='GO', **HOME ) while (menu): clock.tick(60) win.fill(WHITE) for event in pygame.event.get(): keys = pygame.key.get_pressed() go.check_event(event) new_lobby.check_event(event) if (joined): break if (event.type == pygame.QUIT): pygame.quit() if event.type == pygame.MOUSEBUTTONDOWN: display_invalid = False if input_rect.collidepoint(event.pos): active = True else: active = False if (active and event.type == pygame.KEYDOWN): if (keys[pygame.K_BACKSPACE]): if (keys[pygame.K_LCTRL] or keys[pygame.K_RCTRL]): code = ''.join(code.split()[:-1]) # OPTIMIZE else: code = code[:-1] # OPTIMIZE else: if (len(code) < 8): code += event.unicode.upper() if (active): color = DARK_GREY else: color = LIGHT_GREY redraw_home(win, code, color, input_rect, go, new_lobby) if (display_invalid): draw_invalid(win, True) else: draw_invalid(win, False) pygame.display.update() ##################################################################### buy = Button( (0, 0, 100, 50), LIGHT_GREEN, lambda: n.send(Order(p, 1, code)), text='Buy', **BUY ) sell = Button( (150, 0, 100, 50), LIGHT_RED, lambda: n.send(Order(p, -1, code)), text='Sell', **SELL ) try: code = joined_code except NameError: pass while (run): # TODO: displaye game code in bottom right clock.tick(60) p, price = n.send(Order(p, 0, code=code)) # TODO: alert user that the code is invalid here for event in pygame.event.get(): if (event.type == pygame.QUIT): run = False pygame.quit() buy.check_event(event) sell.check_event(event) redraw(win, p, price, code) buy.update(win) sell.update(win) pygame.display.update()