テトリミノの
偏り補正から見る
テトリスの歴史
2019/12/10 レトロゲーム勉強会#04
eagle0wl
自己
紹介
自己紹介
• 情報セキュリティ会社勤務
• ゲームに関する仕事をしています?
• ゲームに関する本を書いています
• 今年度末までに脱稿させます
• 前回勉強会(2019/4)
前前回勉強会(2018/8)の予定では
「発売済み」のはずだったが…
• レトロゲーム勉強会LT皆勤
• #01 『主にマジコンの話を振り返る』
• #02 『レトロブライトを試してみた』
• #03 『和製レトロゲームの珍翻訳・良翻訳』
おことわり
おことわり
• 「テトリス」「テトリミノ」の名称
• それに付随するロゴ
• テトリスホールディングが所有する登録商標です
• 商業製品では®マークがついています
おことわり
• 雑な翻訳
• 著作権表記やロゴに「TETRIS®」と付くのはわかる
• ゲーム中で4列消しを行った時の「TETRIS」表示でも
®を自己主張するタイトルがある
『テトリス アルティメット』
(テトリス生誕30周年にリリースされた、クソゲーオブザイヤー2015ノミネートタイトル)
英語版は®表記なし
テト
リス
テトリス
• 2019年はテトリス生誕35周年 (1984-)
• 初版はElectronica 60 (PDPクローン機) 向け
• 文字しか表示できない
• 開発当時を考慮しても貧弱なスペック(東側なので…)
画像:https://tetris.wiki/Tetris_(Electronika_60)
テトリス
• プラットフォーム合算での累計販売本数
• 1億7000万本~4億本
• 今年マインクラフト (1億7600万本) に抜かれたらしい?
• (テトリス側の計算方法に諸説あるため話半分)
• もともとは西側諸国の生産性を落とすためにソ連
が作ったサイバー兵器教育用ソフト
• 人々に効率よく単純労働をさせる仕組みの研究から
生まれたらしい
ポケモンの石原恒和氏がゲーミフィケーションについて語ったセッションをレポート
https://www.4gamer.net/games/316/G031663/20191003028/
日本におけるテトリス
• 1988年 アーケード版『テトリス』セガ(通称セガテトリス)
• 日本におけるテトリスブームの原点
• アーケード版リリース後にライセンス違反が発覚、アーケード版は
事後承諾で販売を継続できたが、メガドライブ版は幻になる
• メガドラミニで初の完全移植
• 異論:セガエイジス2500シリーズ『テトリスコレクション』に収録されている
「メガドラ版」は?
『メガドライブミニ』びっくり話 https://www.youtube.com/watch?v=OWrju-vgZMw
日本におけるテトリス
• 1988年 ファミコン版『テトリス』BPS
• 国内版は181万本(日本で二番目に遊ばれたテトリス)
• ファミコン版は発売後にライセンス違反が発覚(事後承諾)
• NES版(1989年)は許諾後に任天堂が制作(ファミコン版とは別物)
• NES版を使った公認の世界大会(CTWC)が2010年から毎年開催中
NES版 http://tasvideos.org/Game/nes-tetris.htmlファミコン版 https://refuge.tokyo/famicom/fc/00430.html
日本におけるテトリス
• 1989年 ゲームボーイ版『テトリス』任天堂
• 国内版は424万本
(日本で一番遊ばれたテトリス)
• 1996年ごろ
• キーチェーン型の
パチモノが多数流通
(現在もクレーンゲームの景品や
怪しげな中華製品で見かける)
• 2006年 NDS『テトリスDS』任天堂
• 国内版は133万本
(日本で三番目に遊ばれたテトリス)
現在のテトリスに見られる要素
• テトリミノの形に対する色の統一(IOSZJLT)
• NEXT表示
• ホールド
• 20G
• I.R.S.、T.L.S.(先行入力、TGMシリーズのみ?)
• T.L.S.(ゴーストブロック)
• インフィニティ
• T-Spin
• Back to Back
• スーパーローテーション(テトリミノの回転規則)
• パーフェクトクリア(全消しボーナス)
• REN(英語圏ではCOMBO)
• テトリミノの偏り補正 ←これ
• etc…
テトリミノの偏り補正
• 降ってくるテトリミノの抽選は一見ランダム
• タイトルごとに異なる実装があった
テトリミノの偏り補正
• テトリミノ抽選の論点は2つ
• 乱数生成器自体の品質・実装
• 偏り補正のアルゴリズム
乱数生成器自体の品質・実装
• これはテトリス固有の問題ではない
• 普通のコンピュータは真の乱数を実現できない
• コンピュータは有限の内部情報しか持たない
• 制約の厳しい古いコンピュータの内部情報はとても小さい
• 数式によって決定的に算出される擬似乱数が使われる
• 疑似乱数なので再現が可能
• 再現可能であることは短所のように見えるが、
ゲーム用途ではデバッグやリプレイで重要となる
乱数生成器自体の品質・実装
• 乱数列をあらかじめ決める実装
• アーケード版セガテトリスには電源パターンがある
• 前提
• 起動時にNVRAM(不揮発性)に書き込まれている乱数の種を取得
• ゲーム開始時に1000手先までのツモが決定する
• 条件
• バックアップバッテリーが切れた基板で、電源投入直後の場合
• NVRAMはゼロクリアされているため乱数の種も毎回固定になる
• 初期値 2A6D365A で上書き
(セガの他のゲームに見られる?マジックナンバー)
• 事象
• ゲーム開始後のツモ順が固定になる
• ツモ順を暗記すれば全消し狙いで効率よくカンストできる
参考:Sega Randomizer - TetrisWiki
https://tetris.wiki/Sega_Randomizer
乱数生成器自体の品質・実装
• 乱数列をその都度決める実装
• NES版テトリスは乱数調整ができる(ツールアシスト限定)
• 前提
• ゲーム中に行われるコントローラ入力も抽選に加味されている
フレーム単位で乱数の内部状態を更新(≒撹拌)し続けている
• 条件
• コントローラ入力をいろいろ変えるとツモも変わる
• メモリ監視orステートセーブ/ロードによるトライ&エラーで
ツモを調整する
• 事象
• プレイ中に任意のツモを
引くことが出来る
【TASさんの休日】テトリス乱数調整TAP
https://www.nicovideo.jp/watch/sm9279738
乱数生成器自体の品質・実装
• アルゴリズムの選定/実装が悪いとツモが偏る
• 線形合同法は下位ビットに規則性がある
• 特徴:偶数と奇数が交互に出る
乱数生成器自体の品質・実装
• アルゴリズムの選定/実装が悪いとツモが偏る
• 乱数生成器が適切でも実装が悪いと偏る
• 例)rand() % 7; // 0-6までの整数が抽選(テトリミノは7種類)
• 乱数生成器から取得した値と7の剰余をツモにする方法
• rand() が返す値の範囲は基本7の倍数ではないので余りが出る
• rand()が8bit値(0-255)を返す場合
• 0, 1, 2, 3 に割り当てられたミノの出現率は 37/256
4, 5, 6 の出現率は 36/256 になってしまう
• rand()が16bit値(0-65535)を返す場合
• 0, 1 に割り当てられたミノの出現率は 9363/65536
• 2, 3, 4, 5, 6 の出現率は 9362/65536 になる
• (乱数の範囲が広いと分母が大きくなるため偏りは小さくなる)
• セガテトリス(rand()は32bit値を返すのに6bit値(0-63)に処理されている)
• 0 に割り当てられたミノ( )の出現率は 10/64
• 1, 2, 3, 4, 5, 6 の出現率は 9/64 参考:Sega Randomizer - TetrisWiki
https://tetris.wiki/Sega_Randomizer
テトリミノの偏り補正
• テトリミノ抽選の論点は2つ
• 乱数生成器自体の品質・実装
• 偏り補正のアルゴリズム
偏り補正のアルゴリズム
• 最初期のテトリス(1988年ぐらいまで)
• 偏り補正なし(全部確認したわけではないので、多分)
• しかしテトリスに限ったことではないが、
この時代の乱数生成器の品質はどれも難あり
• 運が悪いと理不尽なツモに悩まされる
• を待っているのにいつまでたっても が降ってこない
• 扱いに困るテトリミノ( )ばかり降ってくる
• 同じテトリミノが3回連続、4回連続で降ってくる
• どうでもいい時に が4回連続でツモる
• 同じテトリミノが3連続で降る確率は1/49、4連続なら1/343
• 150ライン消すためには375 (=150*10/4) テトリミノが必要なので、
確率としては現実的な数字
• 1ゲーム内でも複数回遭遇することはママある
• その理不尽さもまた面白いと思うのだが…
偏り補正のアルゴリズム
• NES版テトリス(1989年)
• 同じテトリミノが連続して出にくくなる偏り補正あり
• (1) テトリミノの抽選を行う
• (2) 前回と違うテトリミノであれば決定
• (3) 前回と同じテトリミノであれば1回だけ再抽選
• 同じテトリミノが連続して出る確率は1/7→1/49に緩和
• この特性を理解した上で取れる戦略
• NEXTのNEXTを予想して投機的に積める
• NEXTのNEXTに は恐らく来ない
• 問題点
• ツモが均等になるわけではない
• 「 がいつまで経っても来ない」
という問題は残ったまま
参考:The history of Tetris randomizers
https://simon.lc/the-history-of-tetris-randomizers
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 同じテトリミノが連続して出にくくなる偏り補正あり
• しかし、その補正処理に不自然な偏りがある
資料公開にあたっての追記:
以下の記事・掲示板を参考にしています。
Tetris (Game Boy) - Hard Drop
https://harddrop.com/wiki/Tetris_(Game_Boy)
Randomizer Theory | Tetris Theory
https://tetrisconcept.net/threads/randomizer-theory.512/page-9#post-51035
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 同じテトリミノが連続して出にくくなる偏り補正あり
• しかし、その補正処理に不自然な偏りがある
現在のミノ
NEXTのミノ
000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 同じテトリミノ3連続が出にくくなる偏り補正あり
• (1) ミノの抽選を行う
• (2) 現在のミノとNEXTのミノと抽選したミノのORを取る
• (3) 現在のミノの値と (2) で算出した値を比較する
• (3-1) 違っていたら、(1) の抽選結果を使う
• (3-2) 同じだったら、テトリミノを再抽選する 000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• OR演算子で3連続かどうかを調べている
• OR演算子(同じ桁に1が一つでもあれば、その桁は1にする)
• ↓OR演算子の計算例
000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
010 001 011
OR) 100 OR) 101 OR) 000
------- ------- -------
110 101 011
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 例1)同じミノを3連続でツモった場合
現在のミノ= 、NEXTのミノ= で、抽選結果= の場合
• 001 OR 001 OR 001 = 001
• 現在のミノの値と演算結果が同じなので
1回だけ再抽選(再抽選結果に対する補正はなし)
• ⇒3連続で同じツモが出にくくなる
補正は正しく行われる
000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 例2) を2連続でツモった場合
現在のミノ= 、NEXTのミノ= で、抽選結果= の場合
• 100 OR 001 OR 001 = 101
• 現在のミノの値と演算結果が違う場合は補正なし
抽選結果は (001) で決定
• が2連続しているが、
この処理はあくまで
3連続チェックのためなので
スルーされる
はずなのだが…
000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 例3) を2連続でツモった場合
現在のミノ= 、NEXTのミノ= 、抽選結果= の場合
• 100 OR 000 OR 000 = 100
• 現在のミノの値と演算結果が同じ場合
再抽選する(再抽選結果に対する補正はなし)
• ⇒NEXTのミノと抽選結果が共に (000) であれば、
ORビット演算の性質上、
現在のミノの種類が何であろうと
再抽選になる
(再抽選でも が出たら
ようやく2連続のツモになる)
000 (L)
001 (J)
010 (I)
011 (O)
100 (Z)
101 (S)
110 (T)
偏り補正のアルゴリズム
• ゲームボーイ版テトリス(1989年)
• 結果
• 同じミノが3連続で出にくくなる補正がある(本来の意図)
• しかし2連続に対して別の補正がかかってしまっている
• その補正の発生率がテトリミノごとに違っている
• ビットフラグの数が少ない値で
表現されるミノほど、
再抽選されやすく2連続で出にくい
• 同じ2連続でも
(000) 2連は出にくい
( →表参照)
• ビットフラグの数が多い値で
表現されるミノほど、
再抽選されにくく2連続で出やすい
• 一番ムカつく (011) 2連は出やすい
000 (L) (10.7 %)
001 (J) (13.7 %)
010 (I) (13.7 %)
011 (O) (16.1 %)
100 (Z) (13.7 %)
101 (S) (16.1 %)
110 (T) (16.1 %)
この補正によるミノ別ツモ確率
(補正なしなら1/7≒14.3%)
偏り補正のアルゴリズム
• テトリス ザ・グランドマスター(1998年)
• 直近のテトリミノが出にくくなる偏り補正あり
• (1) テトリミノの抽選を行う
• (2) 直近4ミノと違うテトリミノであれば決定
• (3) 直近4ミノで既出であれば複数回(4回?)再抽選
• 一手目のツモも補正されている
• 扱いが困るミノ( )は一手目に出てこない
• 回転しても形が変わらないから面白くない
• 平らな地形に置くと屋根ができて横入れ必須になる
• 他、様々な補正(3作目はとても複雑)
• TGMシリーズの偏り補正は非常に野心的
• TGM3は「同じミノばかり降ってくる」「いつまで経っても
が降ってこない」事象はほぼ回避されている
参考:TGM randomizer – Hard Drop https://harddrop.com/wiki/TGM_randomizer
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
7種類のテトリミノを
バッグに入れる
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグの中から
ランダムに1個ずつ取り出して
ツモにする
偏り補正のアルゴリズム
• 現在のテトリスの標準(2001年~現在)
• 7-bag
バッグが空になったら
再装填
以下繰り返し
偏り補正のアルゴリズム
• 現在のテトリス(2001年~現在)
• 7-bag
最初の7ツモは
1種類ずつ出てくる
(順序はバラバラ)
スクショ:『テトリス99』
偏り補正のアルゴリズム
• 現在のテトリス(2001年~現在)
• 7-bag
スクショ:『テトリス99』
次の7ツモも
1種類ずつ出てくる
(順序はバラバラ)
7-bagの特徴
• 7-bagの長所
• 「同じミノばかり降ってくる」(洪水)
「いつまで経っても棒が降ってこない」(干ばつ)
がほぼ解決されている
• 7ミノごとに継ぎ目があるため予測が立てやすい
• ランダムではあるが、かなり規則正しい
• 「開幕テンプレ積み」が多数考案された
• 7ツモで必ず1種類ずつ出ることに着目した定石
• ツモ順に左右されにくい積み込みができる
• この予測可能性に着目して延々同じ積み方をすることもできる
• 対戦テトリスで上級プレイヤーになりたければ、
テンプレを覚えまくる必要がある(一人プレイであれば必須ではない)
7-bagの特徴
• 7-bagの課題
• バッグとバッグの継ぎ目は一切管理されていない
• このようなツモがあるとする
1巡目 2巡目
7-bagの特徴
• 7-bagの課題
• バッグとバッグの継ぎ目は一切管理されていない
• このようなツモがあるとする
1巡目 2巡目
の間隔が最も遠いケース
HOLDの駆使で緩和可能
7-bagの特徴
• 7-bagの課題
• バッグとバッグの継ぎ目は一切管理されていない
• このようなツモがあるとする
1巡目 2巡目
同じテトリミノが2回連続で出現するケース
これはバッグとバッグの継ぎ目でしか発生しない
同じ理由で3回連続で出現するケースは存在しない
7-bagの特徴
• 7-bagの課題
• バッグとバッグの継ぎ目は一切管理されていない
• このようなツモがあるとする
1巡目 2巡目
いわゆるSnake sequences
状況次第では非常に嫌らしい と の組み合わせ4連続
やはりバッグとバッグの継ぎ目でしか発生しない
7-bagの特徴
• 7-bagに対する疑問
• 2001年以降の正規品テトリスは、ほぼ全てが7-bag
• 7-bagを使わない場合は特殊ルール扱い(?)
• TGM3(2005年)は独自のテトリミノ補正を実装
• テトリスアルティメット(2015年)には14-bagがある
• 18年近く7-bagのままである
• 7-bagが最も最適な補正方法なのか?
• ツモの理不尽さも含めてテトリスではないのか?
• 競技性重視なら運の要素は小さくしたほうがいいのでは?
• いびつな形をしたサイコロを振って面白いのか?
• 新たな創意工夫が生まれる可能性を潰しているのでは?
• などなど…
• 対戦テトリスの戦略は、ほぼ7-bag前提
• 今更ルールを変えるのも難しくなっている
テトリスAI
テトリスAI
• Zetris
• https://mat1jaczyyy.com/zetris
• Cold Clear
• https://github.com/MinusKelvin/cold-clear
• いずれもルールベース、対戦型テトリスに対応したAI
• プレイ動画はYouTubeに多数あり
• ぷよぷよテトリスのbotとして動作している
• すでに人類超えだが、
それに勝つプレイヤーもいるため今なお進化中
• テトリミノのツモは 7-bag 前提で思考ルーチンが組まれている模様
おすすめ
テトリス
おすすめテトリス(これから遊ぶ人向け)
• 2019年 Switch『テトリス99』任天堂(アリカ開発)
• ニンテンドースイッチオンライン加入者なら無料で遊べる
• 99人対戦、バトルロイヤル型(実力差は運や立ち回りである程度カバーできる)
• マッチングも高速、手軽に対戦できる
• 個人的にはゲームオブザイヤー2019候補
• 2005年 AC『テトリス ザ・グランドマスター3』アリカ
• アーケード版テトリス、都内なら稼動店舗はそこそこある
• 段位認定のあるMASTERモードのリプレイ性は非常に高い
• Grand Master(最高段位)を目指すと人間卒業レベル
• スタッフロールが本編
アーケードゲーム『TGM3』の認定モードに挑戦のムービー
https://www.youtube.com/watch?v=zHI4Ycx5b5g
• さらなる上級者向けのSHIRASEモードでは、
1秒間にテトリミノが4つ降ってくる
おすすめテトリス(これから遊ぶ人向け)
• 2014年 多機種『ぷよぷよテトリス』セガ
• 基本は1対1対戦(実力差がはっきり出る)
• T-Spinやテンプレ積みといった戦略の習得は必須
• テトリス対ぷよぷよの場合、戦略を変えないと一方的にやられる
• 多機種展開だがマッチングサーバーは機種ごとに別れている
• レーティング制度はうまく機能しているとは思えない
• アクティブユーザー数が多いのはニンテンドースイッチ版らしい?
• 2018年 PS4/PC『テトリス・エフェクト』エンハンス
• VR/4K対応の没入感型テトリス
• Rez、ルミネス、Child of Edenと同じクリエイターの作品
• 基本一人用のゲーム、オンラインのランキングはある
• 雰囲気重視ならVR、プレイ性重視ならモニタ推奨
• テトリス上級者の評価はかなり分かれる
Any Questions?

テトリミノの偏り補正から見るテトリスの歴史