0

我正在尝试使用 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()
4

1 回答 1

0

您需要某种数据结构来存储将删除哪些单元格。你可以试试这个:

  1. 生成你的网格。

  2. 对于不在组中的每个单元格:

    一世。创建一个新组

    ii. 获取单元格的颜色

    iii. 如果任何邻居具有相同的颜色,则重复该算法,但将新单元格添加到组中。

  3. 最后,您将拥有一组单元格。

现在,当玩家单击一个单元格时,您会查找组列表,并找到已单击的组。不知道规则,但是在这里你可以检查组是否足够大,或者只是在它们的位置生成新的单元格。现在对于每个新单元格,执行类似的算法:

  1. 检查所有邻居 - 有两种可能性。
    一世。如果只有一个邻居是相同的颜色,则将新颜色添加到邻居组。
    ii. 如果还有更多,检查它们是否在同一个组中,如果是,则添加此单元格,如果不是,则需要合并两个组并添加单元格。

编辑:

获得颜色有 2 种可能性

  1. 您的图像是一种颜色-您可以在某一点获得颜色: 链接

  2. 如果您将单元格存储为精灵并检查精灵图像会告诉您它们是否是相同的颜色。

实际上,现在我看到了,您的 bliting 循环使您丢失了有关细胞的信息。如果您存储随机选择的结果,然后将它们blit,那就更好了。这样你就会知道哪个单元格是哪个。

于 2013-11-12T21:00:43.573 回答