Безкоштовна онлайн-конференцiя з Python від fwdays. 14 грудня. Реєструйся!
×Закрыть

Не працює код Python

Програма має викликати вікно Pygame зеленого кольору. Тим не менше, викликається вікно ЧОРНОГО кольору. Де може бути помилка?

Мій код:

# шаблон
import pygame
import random

# Setup PyGame

pygame.init()

# установка невоторых цветов

BLACK = (0, 0, 0)
GREEN = (0, 200, 0)
WHITE = (255, 255, 255)
color_glass = GREEN


# размер окна


WIDTH = 10
# hight of the glass
HEIGHT = 20
# blank square constant
EMPTY = 0
# full square constant
FULL = 1
# size of a square
CELL_SIZE = 30



# размер стакана (окна)

size = [WIDTH*CELL_SIZE, HEIGHT*CELL_SIZE]

# Установка ширины и высоты экрана [ширина, высота]

screen = pygame.display.set_mode(size)

O = [[[1, 1],

      [1, 1]]]

I = [[[1, 1, 1, 1]],

     [[1],

      [1],

      [1],

      [1]]]

J = [[[1, 0, 0],

      [1, 1, 1]],

     [[0, 1],

      [0, 1],

      [1, 1]],

     [[1, 1, 1],

      [0, 0, 1]],

     [[1, 1],

      [1, 0],

      [1, 0]]]

L = [[[0, 0, 1],

      [1, 1, 1]],

     [[1, 1],

      [0, 1],

      [0, 1]],

     [[1, 1, 1],

      [1, 0, 0]],

     [[1, 0],

      [1, 0],

      [1, 1]]]

T = [[[0, 1, 0],

      [1, 1, 1]],

     [[0, 1],

      [1, 1],

      [0, 1]],

     [[1, 1, 1],

      [0, 1, 0]],

     [[1, 0],

      [1, 1],

      [1, 0]]]

S = [[[0, 1, 1],

      [1, 1, 0]],

     [[1, 0],

      [1, 1],

      [0, 1]]]

Z = [[[1, 1, 0],

      [0, 1, 1]],

     [[0, 1],

      [1, 1],

      [1, 0]]]


FORMS = [O, I, J, L, T, S, Z]


class Field:
    def __init__(self, width, height, color=BLACK):
        self.width = width
        self.height = height
        self.color = color
        self.glass = []
        for i in range(height):
            string = [FULL] + [EMPTY]*self.width + [FULL]
            self.glass.append(string)
        string = [FULL]*(self.width + 2)
        self.glass.append(string)
        self.draw(screen)



    def draw(self, screen):
        screen.fill(self.color)
        for y in range(self.height):
            for x in range(1, self.width+1):
                if self.glass[y] != EMPTY:
                    pygame.draw.rect(screen, self.glass[y][x], [(x-1)*CELL_SIZE, y*CELL_SIZE, CELL_SIZE, CELL_SIZE])



class Figure():
    def __init__(self, field, screen, forms, turn):
        self.x = field.width // 2 - 1
        self.y = 0
        self.forms = forms
        self.turn = turn
        self.form = forms[turn]
        R = random.randint(50, 255)
        G = random.randint(50, 255)
        B = random.randint(50, 255)
        self.color = (R, G, B)





field = Field(WIDTH, HEIGHT, color_glass)
figure_random = random.choice(FORMS)
figure = Figure(field, screen, figure_random, 0)



# заголовок окна

pygame.display.set_caption("Tetris")

# переменная для цикла. Пока пользователь не нажмет кнопку закрытия, цикл работает.

done = True

# -------- Основной цикл программы -----------

while done:

    # обработка всех событий

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            screen.fill(BLACK)

            done = False

    # обновление всего того, что нарисовано на экране

    pygame.display.flip()

# корректный выход из программы

pygame.quit()

Правильний код:

import pygame

import random

# Setup PyGame

pygame.init()

# установка невоторых цветов

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

GREEN = (0, 200, 0)

color_glass = GREEN

# настройки стакана

# ширина стакана в квадратиках

WIDTH = 5

# высота стакана

HEIGHT = 7

# показатель того, что квадратик пустой

EMPTY = 0

# показатель того, что квадратик заполнен

FULL = 1

# сторона квадратика

CELL_SIZE = 30

# размер стакана (окна)

size = [WIDTH * CELL_SIZE, HEIGHT * CELL_SIZE]

# Установка ширины и высоты экрана [ширина, высота]

screen = pygame.display.set_mode(size)

O = [[[1, 1],

      [1, 1]]]

I = [[[1, 1, 1, 1]],

     [[1],

      [1],

      [1],

      [1]]]

J = [[[1, 0, 0],

      [1, 1, 1]],

     [[0, 1],

      [0, 1],

      [1, 1]],

     [[1, 1, 1],

      [0, 0, 1]],

     [[1, 1],

      [1, 0],

      [1, 0]]]

L = [[[0, 0, 1],

      [1, 1, 1]],

     [[1, 1],

      [0, 1],

      [0, 1]],

     [[1, 1, 1],

      [1, 0, 0]],

     [[1, 0],

      [1, 0],

      [1, 1]]]

T = [[[0, 1, 0],

      [1, 1, 1]],

     [[0, 1],

      [1, 1],

      [0, 1]],

     [[1, 1, 1],

      [0, 1, 0]],

     [[1, 0],

      [1, 1],

      [1, 0]]]

S = [[[0, 1, 1],

      [1, 1, 0]],

     [[1, 0],

      [1, 1],

      [0, 1]]]

Z = [[[1, 1, 0],

      [0, 1, 1]],

     [[0, 1],

      [1, 1],

      [1, 0]]]

FORMS = [O, I, J, L, T, S, Z]


class Field:

    def __init__(self, width, height, color=BLACK):

        self.width = width

        self.height = height

        self.color = color

        self.glass = []

        for i in range(height):
            string = [FULL] + [EMPTY] * self.width + [FULL]

            self.glass.append(string)

        # дно стакана

        string = [FULL] * (self.width + 2)

        self.glass.append(string)

        self.draw(screen)

    def draw(self, screen):

        screen.fill(self.color)

        for y in range(self.height):

            for x in range(1, self.width + 1):

                if self.glass[y][x] != EMPTY:
                    pygame.draw.rect(screen, self.glass[y][x], \
 \
                                     [(x - 1) * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE])


class Figure():

    def __init__(self, field, screen, forms, turn):
        self.x = field.width // 2 - 1

        self.y = 0

        self.forms = forms

        self.turn = turn

        self.form = forms[turn]

        R = random.randint(50, 255)

        G = random.randint(50, 255)

        B = random.randint(50, 255)

        self.color = (R, G, B)


field = Field(WIDTH, HEIGHT, color_glass)

figure_random = random.choice(FORMS)

figure = Figure(field, screen, figure_random, 0)

# заголовок окна

pygame.display.set_caption("Tetris")

# переменная для цикла. Пока пользователь не нажмет кнопку закрытия, цикл работает.

done = True

# -------- Основной цикл программы -----------

while done:

    # обработка всех событий

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            screen.fill(BLACK)

            done = False

    # обновление всего того, что нарисовано на экране

    pygame.display.flip()

# корректный выход из программы

pygame.quit()
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Можно было и самому посмотреть, перед тем как задавать такие вопросы.

if self.glass[y] != EMPTY:

vs

if self.glass[y][x] != EMPTY:

Подписаться на комментарии