Как сделать так, чтобы прямоугольник менял цвет, когда мяч ударяется о него первый и второй раз, а затем заставляет его исчезнуть при третьем ударе? - PullRequest
1 голос
/ 06 июня 2019

Я играю в кирпичную дробилку, и сейчас мяч попадает в кирпич (прямоугольник), и он разбивается при первом попадании.Я хочу, чтобы при первом попадании мяча в кирпич он становился светло-красным, а во втором - красным, а затем при третьем попадании ломался.

#brick list
rectInfo = [rX, rY] 
allRectInfo = [rectInfo[:] for i in range(numRects)]
allRectInfo[0] = [45, 20, True]
allRectInfo[1] = [45, 60, True]
allRectInfo[2] = [45, 100, True]
allRectInfo[3] = [45, 140, True]
allRectInfo[4] = [195, 20, True]
allRectInfo[5] = [195, 60, True]
allRectInfo[6] = [195, 100, True]
allRectInfo[7] = [195, 140, True]
allRectInfo[8] = [345, 20, True]
allRectInfo[9] = [345, 100, True]
allRectInfo[10] = [345, 60, True]
allRectInfo[11] = [345, 140, True]
allRectInfo[12] = [495, 140, True]
allRectInfo[13] = [495, 100, True]
allRectInfo[14] = [495, 60, True]
allRectInfo[15] = [495, 20, True]
allRectInfo[16] = [645, 20, True]
allRectInfo[17] = [645, 60, True]
allRectInfo[18] = [645, 100, True]
allRectInfo[19] = [645, 140, True]

#when the ball hits the bricks
for i in range (numRects):
  if allRectInfo[i][2] == True:
    rect (allRectInfo[i][0], allRectInfo[i][1], rectW, rectH)
       if allRectInfo[i][1]-25 <= y <= allRectInfo[i][1]+74 and 
    allRectInfo[i][0]-5.5 <= x <= allRectInfo[i][0]+150:
            incry = incry * (-1)
            allRectInfo[i][2] = allRectInfo[i][2] - 1
            score = score + 1
            hits = hits + 1

1 Ответ

0 голосов
/ 06 июня 2019

Вместо логического атрибута третьим элементом кортежа allRectInfo[i] должно быть число совпадений, инициализированное 0:

allRectInfo[0] = [45, 20, 0]
allRectInfo[1] = [45, 60, 0]
allRectInfo[2] = [45, 100, 0]
# [...]

Увеличивает счетчик ударов при обнаружении удара:

for i in range (numRects):
      if # [...]

            # [...]

            allRectInfo[i][2] += 1

Определите массив цветов и используйте цвет, зависящий от кирпича:

brickcolor1 = # [...]
brickcolor2 = (255, 128, 128)
brickcolor3 = (255, 0, 0)
brickcolors = [brickcolor1, brickcolor2, brickcolor3]
currentcolor = brickcolors[allRectInfo[i][2]]

Кирпич разрушается, если кирпич достиг предела попадания. Пропустите кирпич в этом случае:

for i in range (numRects):
    if allRectInfo[i][2] < 3:
        # [...]

Всё вместе может выглядеть следующим образом:

for i in range (numRects):

    if allRectInfo[i][2] < 3:

        currentcolor = brickcolors[allRectInfo[i][2]]
        fill(*currentcolor)
        rect(allRectInfo[i][0], allRectInfo[i][1], rectW, rectH)

        if allRectInfo[i][1]-25 <= y <= allRectInfo[i][1]+74 and allRectInfo[i][0]-5.5 <= x <= allRectInfo[i][0]+150:
            incry = incry * (-1)
            score = score + 1

            allRectInfo[i][2] += 1

...