この記事はクソアプリ Advent Calendar 20248日目の記事です。
作ったものはこちら
概要
テトリスがしたいなと思ったので、PythonとPygameを使って落ちものパズルを作りました。
ただせっかくのクソアプリなので、KUSOの文字を揃えて消していくようにしました。
添付したGIFの通り、KUSOの文字が縦か横のどちらかに揃うと消えます。
頑張ったポイント
単純に横一列揃ったら消すテトリスとは違い、縦横で隣り合う3マスの内容を確認した上でKUSOが完成していたらその文字を削除し、残った文字を下に詰めるという処理が意外と複雑で苦労しました。
def clear(original_grid):
new_grid = original_grid
for row_index in range(len(original_grid) - 1, 2, -1):
for i, cell in enumerate(original_grid[row_index]):
# 縦列の判定
if original_grid[row_index][i] == "K" and original_grid[row_index - 1][i] == "U" and original_grid[row_index - 2][i] == "S" and original_grid[row_index - 3][i] == "O":
new_grid[row_index][i] = ""
new_grid[row_index - 1][i] = ""
new_grid[row_index - 2][i] = ""
new_grid[row_index - 3][i] = ""
elif original_grid[row_index][i] == "O" and original_grid[row_index - 1][i] == "S" and original_grid[row_index - 2][i] == "U" and original_grid[row_index - 3][i] == "K":
new_grid[row_index][i] = ""
new_grid[row_index - 1][i] = ""
new_grid[row_index - 2][i] = ""
new_grid[row_index - 3][i] = ""
# 横列の判定
elif i > len(original_grid[row_index]) - 4:
break
elif original_grid[row_index][i] == "K" and original_grid[row_index][i + 1] == "U" and original_grid[row_index][i + 2] == "S" and original_grid[row_index][i + 3] == "O":
new_grid[row_index][i] = ""
new_grid[row_index][i + 1] = ""
new_grid[row_index][i + 2] = ""
new_grid[row_index][i + 3] = ""
elif original_grid[row_index][i] == "O" and original_grid[row_index][i + 1] == "S" and original_grid[row_index][i + 2] == "U" and original_grid[row_index][i + 3] == "K":
new_grid[row_index][i] = ""
new_grid[row_index][i + 1] = ""
new_grid[row_index][i + 2] = ""
new_grid[row_index][i + 3] = ""
# 消えた分を下に詰める
dropped_grid = [[""] * len(original_grid[0]) for _ in range(len(original_grid))]
for i, _ in enumerate(original_grid[0]):
# 縦列の空白じゃない値を全て集める
columns = []
for j in range(len(original_grid) - 1, -1, -1):
if new_grid[j][i] != "":
columns.append(new_grid[j][i])
for index, t in enumerate(columns):
dropped_grid[len(new_grid) - 1 - index][i] = t
return dropped_grid
クソポイント
- まれにKUSOが消えない、もしくは消えるのにタイムラグがある
- 入力から画面へのアウトプットのレスポンスが遅い
- 文字の認識がしずらい
- スコアも表示していないので、目的を持ってプレイできない
など、改善点ばかりになってしまいましたが、時間があればちょこちょこ原因の調査と修正はしたいと思います。
最後に
この記事を書いてて気づきましたが、これテトリスじゃなくてぷ●ぷよじゃん、、、
参考