前提・実現したいこと
状況:
こちらのサイト(http://zetcode.com/gui/pyqt5/tetris/)のコードを参考にTetrisを作成。動作確認済み。
少し改造し、あるゲーム中に落ちてきたピースの種類、順番をpickleで記録し、再現できるようにした。
実現したいこと:
次は、ゲーム環境の記録に留まらず、プレイ自体の記録に進みたい。
ピースの種類、順序の記録によって、ゲーム環境を再現しながら、
①ゲーム中に押されたキーと、押された時のゲーム開始からの時間の記録、保存
②保存された(key, timing)データに基づき、自動再現プレイ
を実現したい。
ご教授いただきたいこと:
PyQt5初心者なので、見落としている有用なメソッドなどあると思います。
それ以外にも、別パッケージなどで有用なものをご存知でしたら、お教えくださると幸いです。
どうぞよろしくお願いします。
(質問ではなくなりますが参考までに)現時点までの改造
*すべてのコードを掲載したいのですが、文字数制限があるため、改造後のファイルから主に変更を加えたBoardクラスのnewPiece関数にとどめます。ソースをご覧いただくか、不明な点はぜひ質問してください!
*コメントについてはmarkdownのルールに当たらないようにしていた名残で、 ###### を用いています
*途中理解していない行に変なコメントをつけておりますが、見逃していただけるとありがたいです( ´∀` )
特にnewPieceメソッド内にて、ゲーム環境(ピースの流れ)の記録、再現のためのコードを追加しています。
コンストラクタにパラメータを追加することで、記録、再現のon、offをしています。
python3
1 def newPiece(self): 2 """create a new piece""" 3 4 self.curPiece = Shape() 5 6 ###### if the game is being replayed, provide the same shapes in the same order. 7 ###### when all the stored shapes are replayed then continue and turn to provide random shapes as usual 8 if self.replay is not None: 9 if len(self.replay) > 0: 10 self.curPiece.setShape(self.replay.popleft()) 11 else: 12 self.curPiece.setRandomShape() 13 else: 14 self.curPiece.setRandomShape() 15 16 self.curX = Board.BoardWidth // 2 + 1 # ######## don't understand following 2 lines 17 self.curY = Board.BoardHeight - 1 + self.curPiece.minY() 18 19 ###### record shapes in deque 20 if self.isRecorded: 21 self.record.append(self.curPiece.shape()) 22 23 if not self.tryMove(self.curPiece, self.curX, self.curY): 24 self.curPiece.setShape(Tetrominoe.NoShape) 25 self.timer.stop() 26 self.isStarted = False 27 self.msg2Statusbar.emit('--Game Over--') 28 29 ###### if the game is recorded, pickle the list of shapes we've seen befor the game is over 30 if self.isRecorded: 31 now = str(datetime.datetime.now()) 32 now = now.replace(':', '-') 33 now = now.replace(' ', '_') 34 now = now.replace('.', '_') 35 36 with open(f'tetris{self.numLinesRemoved}_{now}.pickle', 'wb') as f: 37 pickle.dump(self.record, f)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/02 17:08 編集
2018/10/02 17:14
2018/10/02 17:28 編集
2018/10/02 21:14
2018/10/02 21:16
2018/10/03 03:41
2018/10/03 06:59
2018/10/03 07:00