質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

130閲覧

pythonでテトリスを作っているのですが画面端の処理がうまくいきません

sakre

総合スコア0

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/04/14 11:16

実現したいこと

Zミノにおいて画面右端での挙動が正常になるようにしたいです。

発生している問題・分からないこと

Zミノが画面右端にある時に右矢印キーを押すと意図しない正方形が出現してしまいます。これの解決方法がどうしてもわかりません。

該当のソースコード

Python

1import pygame 2pygame.init() 3from pygame.locals import * 4from pygame.mixer import * 5import sys 6import random 7import time 8SCREEN = Rect(0,0,250,415) 9 10class Tetoris(pygame.sprite.Sprite): 11 def __init__(self,tetoris,GameBoard,screen): 12 self.main_x = 5 13 self.main_y = 1 14 self.direction = 0 15 self.object = [] 16 self.update = self.start 17 18 def start(self,GameBoard): 19 self.mino_number = random.randint(0,6) 20 self.update = self.move 21 22 def draw(self,tetoris,GameBoard,screen): 23 self.object = [] 24 for y in range(0,4): 25 for x in range(0,4): 26 if tetoris[self.mino_number][self.direction][y][x] >0: 27 self.object.append([self.main_y + y, self.main_x + x, tetoris[self.mino_number][self.direction][y][x]]) 28 29 b = len(self.object) 30 for i in range(0,b): 31 GameBoard[self.object[i][0]][self.object[i][1]] = self.object[i][2] 32 33 teto_color = [(0,0,0),(255,0,0),(255,224,32),(0,32,255),(96,255,128),(255,160,16),(160,32,255),(80,208,255)] 34 for y in range(0,22): 35 for x in range(0,10): 36 pygame.draw.rect(screen,teto_color[GameBoard[y][x]],(50+15*x,50+15*y,15,15)) 37 38 def move(self,GameBoard): 39 for event in pygame.event.get(): 40 if event.type == KEYDOWN: 41 if event.key == pygame.K_LEFT: 42 self.Lmove(GameBoard) 43 44 if event.key == pygame.K_RIGHT: 45 self.Rmove(GameBoard) 46 if event.key == pygame.K_DOWN: 47 self.Dmove(GameBoard) 48 if event.key == pygame.K_UP: 49 self.Umove() 50 51 def Lmove(self,GameBoard): 52 copy_board = GameBoard 53 spea = self.object 54 a = len(spea) 55 flag = 0 56 57 for i in range(0,a): 58 if self.main_x >0 and copy_board[spea[i][0]][spea[i][1] -1] ==0: 59 spea[i][1] -= 1 60 copy_board[spea[i][0]][spea[i][1]] = spea[i][2] 61 copy_board[spea[i][0]][spea[i][1] +1] = 0 62 flag += 1 63 64 if flag == a: 65 flag = 0 66 self.main_x -= 1 67 spea = [] 68 copy_board = [] 69 70 def Rmove(self,GameBoard): 71 copy_board = GameBoard 72 spea = self.object 73 a = len(spea) 74 flag = 0 75 76 for i in range(a-1,-1,-1): 77 78 if spea[i][1] < 9 and copy_board[spea[i][0]][spea[i][1] + 1] == 0: 79 spea[i][1] += 1 80 copy_board[spea[i][0]][spea[i][1]] = spea[i][2] 81 copy_board[spea[i][0]][spea[i][1] -1] = 0 82 flag += 1 83 if flag == a: 84 flag = 0 85 self.main_x += 1 86 spea = [] 87 copy_board = [] 88 89 def Dmove(self,GameBoard): 90 copy_board = GameBoard 91 spea = self.object 92 a = len(spea) 93 flag = 0 94 95 for i in range(a-1,-1,-1): 96 if spea[i][0] <21 and copy_board[spea[i][0]+1][spea[i][1] ] ==0: 97 spea[i][0] += 1 98 copy_board[spea[i][0]][spea[i][1]] = spea[i][2] 99 copy_board[spea[i][0]-1][spea[i][1]] = 0 100 flag += 1 101 102 if flag == a: 103 flag = 0 104 self.main_y += 1 105 spea = [] 106 copy_board = [] 107 def Death(self,GameBoard): 108 None 109 110 111 112def main(): 113 pygame.init() 114 115 screen = pygame.display.set_mode(SCREEN.size) 116 117 GameBoard = [[0,0,0,0,0,0,0,0,0,0], 118 [0,0,0,0,0,0,0,0,0,0], 119 [0,0,0,0,0,0,0,0,0,0], 120 [0,0,0,0,0,0,0,0,0,0], 121 [0,0,0,0,0,0,0,0,0,0], 122 [0,0,0,0,0,0,0,0,0,0], 123 [0,0,0,0,0,0,0,0,0,0], 124 [0,0,0,0,0,0,0,0,0,0], 125 [0,0,0,0,0,0,0,0,0,0], 126 [0,0,0,0,0,0,0,0,0,0], 127 [0,0,0,0,0,0,0,0,0,0], 128 [0,0,0,0,0,0,0,0,0,0], 129 [0,0,0,0,0,0,0,0,0,0], 130 [0,0,0,0,0,0,0,0,0,0], 131 [0,0,0,0,0,0,0,0,0,0], 132 [0,0,0,0,0,0,0,0,0,0], 133 [0,0,0,0,0,0,0,0,0,0], 134 [0,0,0,0,0,0,0,0,0,0], 135 [0,0,0,0,0,0,0,0,0,0], 136 [0,0,0,0,0,0,0,0,0,0], 137 [0,0,0,0,0,0,0,0,0,0], 138 [0,0,0,0,0,0,0,0,0,0]] 139 140 tetorised = [[[[1,1,0,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], 141 [[0,1,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]], 142 [[1,1,0,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], 143 [[0,1,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]]], 144 145 [[[2,2,0,0],[2,2,0,0],[0,0,0,0],[0,0,0,0]], 146 [[2,2,0,0],[2,2,0,0],[0,0,0,0],[0,0,0,0]], 147 [[2,2,0,0],[2,2,0,0],[0,0,0,0],[0,0,0,0]], 148 [[2,2,0,0],[2,2,0,0],[0,0,0,0],[0,0,0,0]]], 149 150 [[[3,0,0,0],[3,3,3,0],[0,0,0,0],[0,0,0,0]], 151 [[3,3,0,0],[3,0,0,0],[3,0,0,0],[0,0,0,0]], 152 [[3,3,3,0],[0,0,3,0],[0,0,0,0],[0,0,0,0]], 153 [[0,3,0,0],[0,3,0,0],[3,3,0,0],[0,0,0,0]]], 154 155 [[[0,4,4,0],[4,4,0,0],[0,0,0,0],[0,0,0,0]], 156 [[4,0,0,0],[4,4,0,0],[0,4,0,0],[0,0,0,0]], 157 [[0,4,4,0],[4,4,0,0],[0,0,0,0],[0,0,0,0]], 158 [[4,0,0,0],[4,4,0,0],[0,4,0,0],[0,0,0,0]]], 159 160 [[[0,0,5,0],[5,5,5,0],[0,0,0,0],[0,0,0,0]], 161 [[5,0,0,0],[5,0,0,0],[5,5,0,0],[0,0,0,0]], 162 [[5,5,5,0],[5,0,0,0],[0,0,0,0],[0,0,0,0]], 163 [[5,5,0,0],[0,5,0,0],[0,5,0,0],[0,0,0,0]]], 164 165 [[[0,6,0,0],[6,6,6,0],[0,0,0,0],[0,0,0,0]], 166 [[6,0,0,0],[6,6,0,0],[6,0,0,0],[0,0,0,0]], 167 [[6,6,6,0],[0,6,0,0],[0,0,0,0],[0,0,0,0]], 168 [[0,6,0,0],[6,6,0,0],[0,6,0,0],[0,0,0,0]]], 169 170 [[[7,0,0,0],[7,0,0,0],[7,0,0,0],[7,0,0,0]], 171 [[7,7,7,7],[0,0,0,0],[0,0,0,0],[0,0,0,0]], 172 [[7,0,0,0],[7,0,0,0],[7,0,0,0],[7,0,0,0]], 173 [[7,7,7,7],[0,0,0,0],[0,0,0,0],[0,0,0,0]]]] 174 175 176 tetoris = Tetoris(tetorised,GameBoard,screen) 177 178 clock = pygame.time.Clock() 179 180 while (1): 181 clock.tick(120) 182 screen.fill((255,255,255)) 183 tetoris.update(GameBoard) 184 tetoris.Death(GameBoard) 185 tetoris.draw(tetorised,GameBoard,screen) 186 pygame.display.update() 187 188 for event in pygame.event.get(): 189 if event.type == QUIT: 190 pygame.quit() 191 sys.exit() 192 193 if event.type == KEYDOWN and event.key == K_ESCAPE: 194 pygame.quit() 195 sys.exit() 196 197if __name__ == "__main__": 198 main()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

print文で問題のある場所を探したところ、Rmoveメソッドにおいて、上記の問題が起きた際、flagはaではないことが確認できました。つまり意図せずself.objectに要素が追加されているということなので古いself.objectの管理に問題がある可能性があると考えています。しかし具体的に何をすればいいかわかりません。
チャットGPTにも聞いてみましたがいまいち頼りになりませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2024/04/15 01:51

https://teratail.com/help/question-tips は読みましたか? 読んだ結果を本文に反映ください。解決のヒントを探れるかもしれません。 たとえばコードの説明がないので 「flagはaではない」「self.objectに要素が追加されている」 が何のことなのかが分かりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問