我正在尝试使用pygame实现钻石破折号游戏。更具体地说,当您在一个行或列中使用相同颜色的3个方块上单击鼠标时,必须删除这些方块,并且在新方块必须随机取出它们的位置之后。我的程序可以找到一个正方形的具体坐标,但我很想知道如何删除那些特定的正方形。
你能帮帮我吗?谢谢。import random, time, pygame, sys, copy
from pygame.locals import *
black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)
size = [700, 485]
screen=pygame.display.set_mode(size)
# This sets the width and height of each grid location
width = 64
height = 64
# This sets the margin between each cell
margin = 5
# Create a 2 dimensional array. A two dimesional
# array is simply a list of lists.
grid = []
for row in range(7):
# Add an empty array that will hold each cell
# in this row
grid.append([])
for column in range(80):
grid[row].append(0) # Append a cell
imgnum = 7
imglist = []
for i in range(1, imgnum+1):
dimge = pygame.image.load('imge%s.png' % i)
imglist.append(dimge)
grid[1][5] = 1
pygame.init()
pygame.display.set_caption("dimond dash")
done = False
for row in range(7):
for column in range(8):
screen.blit(random.choice(imglist), [(margin+width)*column+margin,
(margin+height)*row+margin,
width,
height])
while done == False:
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done = True # Flag that we are done so we exit this loop
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
column = pos[0] // (width + margin)
row = pos[1] // (height + margin)
grid[row][column] = 1
print("Click ", pos, "Grid coordinates: ", row, column)
pygame.display.flip()
pygame.quit()
答案 0 :(得分:0)
您需要某种数据结构来存储要删除的单元格。 你可以试试这个:
- 生成您的网格。
对于不在组中的每个单元格:
我。创建一个新组
II。得到细胞的颜色
III。如果任何邻居具有相同的颜色,请重复该算法,但将新单元格添加到该组中。
- 最后你将拥有一组细胞。
醇>
现在,当玩家点击某个单元格时,您会查找该组列表,并找到已单击的组。不知道规则,但在这里你可以检查组是否足够大,或者只是在他们的位置生成新的单元格。 现在对于每个新单元格,执行类似的算法:
- 检查所有邻居 - 有两种可能性 一世。如果只有一个邻居是相同的颜色,请将新颜色添加到邻居 组。
醇>
II。如果还有更多,请检查它们是否相同 如果是,则添加此单元格,如果不是,则需要合并这两个组 添加单元格。
编辑:
获得颜色有两种可能性
你的图像是一种颜色 - 你可以获得一点颜色: link
如果您将细胞存储为精灵,并检查精灵图像会告诉您它们是否是相同的颜色。
实际上现在我看到了,你的bliting循环会让你失去有关细胞的信息。 如果你存储随机选择的结果,然后blit它会更好。通过这种方式,您将知道哪个单元格是哪个。