ひねりを加えた宝石をちりばめたスタイルのゲームのデザインに取り組んでいます。同じ形のブロックをすべて一致させようとするのではなく、文字のペアを一致させようとしています。ボードには常に約 10 個の文字があり、それらをまとめようとしています。3つの異なるカラーブロックがあります。各色には、1 つの空白ブロックと、異なる文字の 5 つのブロックがあります。目標は、赤い「A」ブロックの隣にある赤い「T」ブロックを言うことです。これは私が問題に直面しているところです。
今のところ、コードはボードから同じ色と文字を 3 つ以上クリアします。したがって、赤い「T」ブロックを 3 つ並べることができれば、それらはクリアされます。コードは基本的に各行をスキャンして、3 つ (またはそれ以上) のグループを探します。コードを変更して、(文字の組み合わせに関係なく) 同じ色でもクリアできるようにしようとしましたが、それを機能させることさえできません。画像の読み込み方法に関係していると思います。画像の読み込みと一致の検索を処理するほとんどのコードを投稿しました (壊れたので、これを機能させるための私のクレイジーな変更はありません)。少なくとも1つの正しい一致を見つけることができるように、コードを変更するのを手伝ってくれる人はいますか? 赤い「T」ブロックが赤い「A」ブロックと空白の赤いブロックの隣にある場合、それは一致として分類され、ボードから削除されます。機能する限り、それほど複雑である必要はありません。助けてくれてありがとう!
一致するコードを検索:
def find_matches(self):
def lines():
for j in range(self.h):
yield range(j * self.w, (j + 1) * self.w)
for i in range(self.w):
yield range(i, self.size, self.w)
def key(i):
return self.board[i].image
def matches():
for line in lines():
for _, group in itertools.groupby(line, key):
match = list(group)
if len(match) >= MINIMUM_MATCH:
yield match
return list(matches())
画像の読み込み:
shapes = 'red blue yellow'
rareshapes = 'reda redc redg redt redu bluea bluec blueg bluet blueu yellowa yellowc yellowg yellowt yellowu'
self.shapes = [pygame.image.load('images/{}.png'.format(shape))
for shape in shapes.split()]
self.rareshapes = [pygame.image.load('rareimages/{}.png'.format(shape))
for shape in rareshapes.split()]
編集:
この投稿以降、ゲームに合わせて多くの変更と更新が行われました。サウンドとバックグラウンド ミュージック、新しいスコアリング システム、新しいタイマー システムの土台があり、ゲームの最初の開始時にグリッド上の特定の場所に表示するレア シェイプを指定できます。ただし、コア ゲームプレイにはまだ問題があります。古い投稿をドラッグするのは嫌いですが、これを機能させる方法がわかりません。運の悪い試合を扱うコードをいじりました。
基本的にレアシェイプには番号が振られています。したがって、赤の A は 0、赤の T は 3、黄色の T は 14 です。赤の T(3)、および 2 つの空白の赤の正方形が隣り合って有効な一致となり、ボードからクリアされます。これは、ボードから正方形をクリアできる唯一の正しい方法です。同じ色の空白の正方形が 4 つ並んでも、それらは削除されません。
ただし、コードは無効なペアも取得するかどうかを検出する必要があります。たとえば、赤の A(0)、赤の C(1)、および 2 つの空白の赤の正方形を取得した場合、それは消えますが、攻撃としてカウントされます。
ゲームの目的は、ストライキを 3 回行わずに、時間切れになる前にすべての文字ブロックを取り除くことです。文字ブロックの数と場所を指定できるようになったので、あとは一致するだけです。これを機能させる方法を知っている人はいますか?