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. すべてのネイバーを確認する - 2 つの可能性があります。
    私。隣人が 1 つだけ同じ色の場合は、新しい色を隣人グループに追加します。
    ii. 複数ある場合は、両方が同じグループに属しているかどうかを確認します。そうであれば、このセルを追加します。そうでない場合は、両方のグループをマージしてセルを追加する必要があります。

編集:

色を取得するための 2 つの可能性があります。

  1. あなたの画像は一色です - あなたはある時点で色を得ることができます: リンク

  2. セルをスプライトとして保存し、スプライト画像をチェックすると、それらが同じ色であるかどうかがわかります。

実際に私が見たところ、ブリッティング ループにより、細胞に関する情報が失われます。無作為に選んだ結果を保存してから、ブリットした方がよいでしょう。このようにして、どのセルがどれであるかがわかります。

于 2013-11-12T21:00:43.573 に答える