pygame Рисование нескольких прямоугольников

Я изучаю питон. Идея приложения состоит в том, что есть 8 прямоугольников, которые при нажатии выключаются или включаются, представляя двоичный файл. Каждый прямоугольник представляет бит и десятичный эквивалент.

Мне трудно перевести это в хорошо написанное приложение без жесткого кодирования всего. Я жестко закодировал 8 прямоугольников с помощью .fill, но я бы предпочел использовать функцию, которая делает это автоматически. Мне не нужен полный код, я бы предпочел, чтобы кто-нибудь указал мне правильное направление в отношении структуры кода, которому я должен следовать. Должен ли я использовать класс для создания нового прямоугольника, а затем использовать метод рендеринга с циклом for для запуска через массив прямоугольников, если да, то как мне отобразить прямоугольники в строке?

Чтобы нарисовать прямоугольники, я использую display.fill ()

Я подумал о том, чтобы объединить свойства каждого прямоугольника в кортеж кортежей, а затем визуализировать каждый с помощью цикла for, это хороший подход?


person GaaraOfTheSand    schedule 06.12.2018    source источник


Ответы (1)


Вот шаблон, который вы можете использовать:

import pygame
import sys

def terminate():
    pygame.quit()
    sys.exit()

pygame.init()

black = (0,0,0)
white = (0,0,0)

clock = pygame.time.Clock()
fps=30

screen_height = 520
screen_width = 650
screen = pygame.display.set_mode((screen_width,screen_height)

class Rect(pygame.sprite.Sprite):
    def __init__(self,x,y,width,height,color,value):
        super().__init__()
        self.image = pygame.Surface([width, height])
        self.image.fill(color)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.value = value
    def change_value(self,color,value):
        self.image.fill(color)
        self.value=value

rects = pygame.sprite.Group()

rect = Rect(50,50,100,100,black)
rects.add(rect)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            terminate()

    screen.fill(white)
    rect.draw(screen)

    pygame.display.flip()

    clock.tick(fps)

Использование группы позволит вам нарисовать сразу все прямоугольники. Вы можете изменить прямоугольники с помощью функции change_value.

person gnawydna    schedule 07.12.2018
comment
Как мне изменить положение каждого отдельного спрайта? Я хочу, чтобы они выровнялись в ряд один за другим. - person GaaraOfTheSand; 08.12.2018