テトリスのスーパーローテーションの実装

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
バグ

テトリスのスーパーローテーションの実装

#1

投稿記事 by バグ » 16年前

テトリスのガイドラインにスーパーローテーションというのがあります。
回転できなかった際に、自動的に軸をズラして回転させる機能の事です。
ガイドラインには厳密なルールが無いようでして、完全にプログラマー任せになっている結構いい加減なガイドラインなんですね。(Tスピンもそんな感じだし…)
で、違和感を感じない程度のスーパーローテーションを実装しようと思ったのですが、私が考えついた方法は…

1:通常5×5マスで管理しているテトリミノの中心で回転させる。回転に失敗したら2へ…。

2:軸をズラして回転させる。この時の回転中心座標は5×5マスの範囲内で行なう。

3:軸をズラす場合の優先順位は、X軸は中心に近い順、Y軸は下方向を優先としつつ中心に近い順、X軸とY軸ではY軸を優先する。

というものなのですが、なんだかまわりくどい気がします。他の方法がありましたら、教えていただけないでしょうか?

木霊

Re:テトリスのスーパーローテーションの実装

#2

投稿記事 by 木霊 » 16年前

未熟ながら少し考えてみました。

1.四角ブロック
■■
■■
回転しても形が変わらない = 回転処理自体必要ない = スーパーローテーションも必要ない

2.テトリス棒
■
○ ■○■■
■
■
「○」の部分を回転軸にして4×4で判定する
□□□
○■
□■□□
□□□
回転した時に赤い部分にだけ障害(外周・固定されたテトリミノ)があれば移動して回転、
テトリミノの部分に障害がないならその場で回転、それ以外なら回転しない(できない)
左側の赤い部分なら右に移動、右側のなら左に、下側のなら上にそれぞれ移動

3.Z字・逆Z
     ■
■○  ■○
 ■■ ■
3×3で判定
□□
■○□
■■
立っている状態で右方向に障害があるときだけSRの判定
□■△  △が外壁        □□△          □□□△
■■△  ←の状態から→になる時 ■■△ に一マス左に移動 ■■□△
■□△              □■△          □■■△
逆Zは左右を逆転

4.L字・逆L・凸型
  ■     ■■  ■■■
 ○■ ■○  ■○   ○■
 ■■ ■■■ ■

 ■   ■       ■
■○■  ○■ ■○■ ■○
     ■   ■   ■
3×3で判定
■■■  ■
■■ ■■
■■■  ■
判定方法はテトリス棒と一緒

・・・テトリミノ毎に判定するのでもっと回りくどくなってしまいました・・・
というか、見当違いなこと考えていたかも・・・

バグ

Re:テトリスのスーパーローテーションの実装

#3

投稿記事 by バグ » 16年前

逆L型、L型はこちらの方が回転が綺麗ではないでしょうか?
まぁ、好みの問題ではありますけど…(^_^;)
□■□ ■□□ □■■ □□□
□○□ ■○■ □○□ ■○■
■■□ □□□ □■□ □□■
それは、さておきまして、返信有難うございます(^-^)

木霊さんの考え方は、回転させてみて、回転できなかったら上下左右にズラしてみる方法ですね。
しかし、その方法だと、どこでやめるかの判定が難しくならないですか?(^_^;)

回転→失敗→移動→失敗→移動…

の永久ループになってしまわないでしょうか?
例えば、テトリミノ自体は最下段にあるのに、下方向に回転移動が叶わなかった場合、一気に最上段に移動してしまう…なんていう現象が起こるかもしれません。
でも、昔そういう仕様のテトリスもありましたから、それもありかな?(^_^;)

こういう明確な基準のないものを考えて、納得のいく答えを模索するのは、なかなか難しいですよね。

木霊

Re:テトリスのスーパーローテーションの実装

#4

投稿記事 by 木霊 » 16年前

判定は一回だけでいいかなと思ってました。
自分の記憶では、ボタンを押しても回転しない場合があったような気がしたので・・・
(最後にプレイしたテトリスがゲームボーイ版です)

(仮想)回転→判定→通常の回転or移動して回転or回転不可
で回転不可以外なら仮想ミノを実際のものに反映
の流れで
通常の回転 →回転後の状態でどこも障害と重なっていない
移動して回転→回転後の状態で判定部分の外周部に障害がある場合(移動は一マスのみ)
回転不可  →上記以外の状態

>逆L型、L型はこちらの方が回転が綺麗ではないでしょうか?

確かに・・・一度思いつくと、自力ではなかなかその他の方法に気付かないですよね。

>こういう明確な基準のないものを考えて、納得のいく答えを模索するのは、なかなか難しいですよね

本当にそうですよね。
でもそれが楽しかったりw

木霊

Re:テトリスのスーパーローテーションの実装

#5

投稿記事 by 木霊 » 16年前

さっき忘れたので追加

テトリスの難易度参考?(ニコニコ動画)
[nico]http://www.nicovideo.jp/watch/sm1012570[/nico]

このレベルは普通想定しませんww

閉鎖

“C言語何でも質問掲示板” へ戻る