seigot/tetris

最初にHOLD 機能を使った場合、次の timerEvent で self.nextMove に値がまだ入っているため、GetNextMove が呼び出されず、次のターンも HOLD ON となるため、今あるテトリミノではなく、次のテトリミノが HOLD に入って、今あるテトリミノが消滅するような動作になっている

Closed this issue · 1 comments

最初にHOLD 機能を使った場合、次の timerEvent で self.nextMove に値がまだ入っているため、GetNextMove が呼び出されず、次のターンも HOLD ON となるため、今あるテトリミノではなく、次のテトリミノが HOLD に入って、今あるテトリミノが消滅するような動作になっているようです。

画面上: I / Next: L Z S O / HOLD: なし
↓ HOLD 使用
画面上: L / Next: Z S O Z / HOLD:  I
↓ GetNextMove が呼ばれることなく下記へ。L が HOLD に入り、I が消える
画面上: Z / Next: S O Z 」/ HOLD:  L

下記に、self.nextMove = None とすべきかと思うのですがどうでしょうか。

> diff --git a/game_manager/game_manager.py b/game_manager/game_manager.py
> index 07e91cf..bd5d090 100644
> --- a/game_manager/game_manager.py
> +++ b/game_manager/game_manager.py
> @@ -370,6 +370,8 @@ class Game_Manager(QMainWindow):
>                      if isExchangeHoldShape == False:
>                          # if isExchangeHoldShape is False, this means no holdshape exists. 
>                          # so it needs to return immediately to use new shape.
> +                        # init nextMove
> +                        self.nextMove = None
>                          return
>  
>                  k = 0