python - 当球第一次和第二次击中它时如何使矩形改变颜色,然后在第三次击中时使其消失?
问题描述
我正在制作一个破砖游戏,现在球击中了一块砖(一个矩形),第一次击球就破了。我希望球第一次击中砖块时变为浅红色,第二次变为红色,然后在第三次击中时,它会破裂。
#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
解决方案
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
推荐阅读
- openshift - 如何在volumeMount上指定exec
- html - Centering text inside div in navbar
- go - 在自定义 Vault 插件上使用 vault.NewTestCluster 运行测试时取消引用 nil 指针
- encoding - 是否有可能与 base64 编码/解码发生冲突
- wordpress - Azure的应用服务有Bug
- sesam - 使用 DTL 在 Sesam 中展平深层实体结构
- typescript - 类型脚本 - 使用键 ID 合并数组中的对象
- vue.js - VueJs 组件名称保留字?
- javascript - JavaScript 中的 JSON 数组计数
- php - 根据 Woocommerce 结帐中的复选框自定义字段在项目名称下添加文本