3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KUSOを消す落ちものクソゲー

Last updated at Posted at 2024-12-07

この記事はクソアプリ Advent Calendar 20248日目の記事です。

作ったものはこちら

概要

テトリスがしたいなと思ったので、PythonとPygameを使って落ちものパズルを作りました。
ただせっかくのクソアプリなので、KUSOの文字を揃えて消していくようにしました。

添付したGIFの通り、KUSOの文字が縦か横のどちらかに揃うと消えます。

クソアプリ_gif.gif

頑張ったポイント

単純に横一列揃ったら消すテトリスとは違い、縦横で隣り合う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
    

クソポイント

  1. まれにKUSOが消えない、もしくは消えるのにタイムラグがある
  2. 入力から画面へのアウトプットのレスポンスが遅い
  3. 文字の認識がしずらい
  4. スコアも表示していないので、目的を持ってプレイできない

など、改善点ばかりになってしまいましたが、時間があればちょこちょこ原因の調査と修正はしたいと思います。

最後に

この記事を書いてて気づきましたが、これテトリスじゃなくてぷ●ぷよじゃん、、、

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?