如何在pygame中创建删除方块的删除功能

时间:2013-11-12 19:33:54

标签: pygame

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

1 个答案:

答案 0 :(得分:0)

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

  
      
  1. 生成您的网格。
  2.   
  3. 对于不在组中的每个单元格:

         

    我。创建一个新组

         

    II。得到细胞的颜色

         

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

  4.   
  5. 最后你将拥有一组细胞。
  6.   

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

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

编辑:

获得颜色有两种可能性

  1. 你的图像是一种颜色 - 你可以获得一点颜色: link

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

  3. 实际上现在我看到了,你的bliting循环会让你失去有关细胞的信息。 如果你存储随机选择的结果,然后blit它会更好。通过这种方式,您将知道哪个单元格是哪个。