壊リスex@wiki

詳細仕様

最終更新:

Bot(ページ名リンク)

- view
だれでも歓迎! 編集

システム全般

ゲームのフレームレート

壊リスexは基本的に60FPS(1秒間に60回描画)で動作している。
PCの性能があまり高くない場合や、重い処理が入った時には、60FPS未満になることがある。
FPSはメインメニューのオプション>表示設定の「フレームレート表示」をONにすると表示することができる。

オートフレームスキップ

壊リスexでは、オートフレームスキップを行っている。
描画処理を行ったフレームでどれだけの時間が経過したかを計測し、
経過した時間の分だけフレームを進めて描画処理をスキップすることで、ゲームスピードを維持している。

また、フレームレートの調整に使用しているSleep関数は多少の誤差が発生するため、
前フレームでどれだけの誤差が生じたかを計測して次フレームに誤差分を加減算している。
これにより、時間の計測はかなり正確になっている。

なお、1フレームの間に1秒以上の遅延が発生したときはフレームスキップは行われなくなる。
これは、キーコンフィグやメッセージダイアログなどを表示した時に一時的に描画の更新が止まった際、
描画の更新が止まっていた間の処理を再描画時に実行するのを止めるため。

ゲームの画面サイズ

壊リスexのアプリケーションウィンドウのサイズは 640px × 480px である。
※ウィンドウの枠を除く
ウィンドウの縁をドラッグ&ドロップすることでウィンドウをリサイズできる。
また、最大化ボタンでウィンドウを最大化できる。
画像やテキストの解像度は変わらないため、ウィンドウを大きくした場合は少しぼやけて表示される。

タイトル画面

タイトル画面のアニメーションスキップ

タイトル画面が表示される際のアニメーションは決定キーを入力するとスキップできる。

タイトル画面で回転するミノ

タイトル画面で回転するミノのブロックは、ブロックデザイン設定が反映される。
ミノの色と形状はタイトル画面が表示される毎にランダムで切り替わる。

デモプレイ

タイトル画面で10秒間待機すると、デモプレイが再生される。
デモプレイはスコアアタック1分とラインマラソン50Lineのものが25個ずつあり、交互に再生される。
ちなみに、デモプレイは作者のプレイデータ。
デモプレイでは背景イメージリストとBGMリストの設定は反映されないが、
ブロックデザイン設定表示設定は反映される。

メニュー画面

操作方法表示

各メニュー画面の右上に表示される操作方法表示は、
ゲームパッドが接続されている場合はゲームパッド用の表示に、
そうでない場合はキーボード用の表示になる。
ゲームパッドが接続されている状態でも、キーボードで操作することは可能。

ゲームパッドの場合、キーコンフィグの画面でボタン表記を設定できる。

ゲームメニューのページ切替

ゲームメニューの各画面でページ送りのキーを押すと、ページが切り替わる。
ページ右送りのキーを押した場合、
スコアアタック→ラインマラソン→エンドレスモード→ミッションモード→トレーニングモード→スコアアタック
の順に切り替わる。
ページ左送りの場合はこれの逆順。

ゲームシステム

ブロックの表示サイズ

ブロック1個の表示サイズは 20px × 20px である。

操作ミノの出現位置

操作ミノは標準のゲームオーバーラインの高さから
7ブロック分だけ上の位置が初期位置(出現位置)となっている。

操作ミノの落下速度

操作ミノを何も操作していない時、ミノは1フレームあたり0.25pxずつ落下する。
つまり、1ブロック分落下するのに80フレーム(約1.3秒)かかる。

ソフトドロップの落下速度

操作ミノを自由落下させている時、ミノは1フレームあたり0.6px分ずつ加速する。
1ブロック分落下するのには約8フレーム(約0.13秒),
5ブロック分落下するのには約18フレーム(約0.3秒),
10ブロック分落下するのには約26フレーム(約0.43秒)かかる計算になる。

左右移動と回転の押しっぱなしの入力間隔

左右移動または回転の操作を押しっぱなしにした場合、
1回目の入力から2回目の入力までは30フレーム(約0.5秒)、
それ以降は3フレーム(約0.05秒)間隔で入力される。

ハードドロップの押しっぱなしの入力間隔

ハードドロップ系の操作を押しっぱなしにした場合、
30フレーム(約0.5秒)間隔で入力される。

ハードドロップの入力インターバル

ハードドロップ系の操作は1度入力すると、
10フレーム(約0.17秒)が経過するまで
次のハードドロップ系の入力を受け付けないようになっている。
インターバルを設けているのは、
キーやボタンの接触具合によって誤操作が発生するのを回避するため。

操作ミノ設置時の猶予時間

操作ミノが着地してから固定されるまでには、40フレーム(約0.67秒)の猶予がある。
ただし、ハードドロップ、ゼロハードドロップの場合は20フレーム(約0.33秒)、
クイックハードドロップ、ゼロクイックハードドロップの場合は0フレームとなる。

ミノを着地させてから左右に移動した場合、
固定されるまでのカウントがリセットされ、再び40フレームの猶予ができる。

操作ミノ着地後の左右移動

操作ミノは着地してからも左右に移動することができるが、
移動できるのは最大で20回。

ブロックの落下ダメージの計算

ブロックのダメージ計算は、位置エネルギーの公式を基にしている。
位置エネルギーの公式は以下の通り。

U = mgh
m:物体の質量, g:重力加速度, h:高さ

ブロック1つあたりの質量と重力加速度は一定であるため、
ダメージ計算では1として扱っている。
また、ブロックの衝突面積によってダメージが分散するため、
ダメージ計算は以下ようになる。

ダメージ = ミノの大きさ × 落とした高さ / 衝突面積

例えば、テトロミノを10ブロック分(200px)の高さから落下させ、
衝突面積が2ブロック分であった場合、

ダメージ = 4 × 200 / 2 = 400

となる。
ブロックのHPの初期値は標準で2000であるため、
ダメージを受けたブロックのHPは1600になる。

スコアの計算

スコアはラインが発生する毎に以下の計算方法で加算される。
消える列数 × (連鎖数 + 1) × 10 + ライン巻き込みブロック数 - 1

また、連鎖が発生した時は、連鎖が終了した時点で
連鎖数の2乗 の得点がボーナスで加算される。

ブロックの落下音

ブロックの落下音は、落とした高さに応じて音量が変わる。
最小音量は50%で、最大音量は100%となる。
ミノを操作せずに置いた場合は最小音量、
ミノを10ブロック分以上の高さから落下させると最大音量となる。

コンボの効果音と表示

コンボが発生した際の効果音は16コンボ分まである。
16コンボ以降は16コンボ目と同じ効果音。

5コンボ以上を決めると、コンボが終了した際にコンボ数の表示と効果音が鳴る。
コンボ終了時の効果音はコンボ数に応じて異なり、
5以上、10以上、15以上、20以上の4パターンがある。

乱数調整

ゲーム中に乱数が使用される場面は以下の通り。
  • メタルブロックの穴の位置
  • 操作ミノの色
  • 操作ミノの形

単純な乱数では偏りが発生してゲームが遊びにくいため、
乱数はある程度調整している。
具体的には以下の通り。
  • 同じ値は連続しない
  • 直近の「取りうる値の個数 × 2」回までにすべての値が1回以上3回以下出る

例えば、メタルブロックの穴の位置は8か所のパターンあるため、
少なくとも16回に1回は同じ位置に穴ができ、
連続16回中に最大3回まで同じ位置に穴ができる。
また、連続して同じ位置に穴ができることは無い。

ゲーム中のタイマー

ゲーム中のタイマーは60フレームを1秒として時間を計測している。
動作環境が重いと実際に描画されるフレーム数は60未満になることがあるが、
その場合は描画をスキップされたフレームもカウントはされているため、
実際の時間とのずれははほぼ発生しない。

ウィンドウの非アクティブの検知

ゲーム中にウィンドウが非アクティブになった場合、自動的にポーズ状態になる。
デモプレイやリプレイモード、オンライン対戦時は自動的にポーズ状態にはならない。

オンラインランキング

データの送信タイミング

ランキングサーバーへのデータの送信は、以下のタイミングで行われる。
  • ゲーム起動時
  • プレイヤー名変更時
  • ハイスコア更新時

プレイヤーごとのデータの管理

ランキングデータはプレイヤーごとに割り当てているIDで管理しており、
プレイヤー1人につき1データとなるようにしている。
つまり、ハイスコアを更新すると、自身の古い記録は削除されて新しい記録で上書きされる。
なお、ゲーム内の「データ消去」機能で記録を消してもサーバー上のデータは消されずIDも引き継ぐため、
自身の記録がサーバー上に複数作られることは無い。

サーバー側でのランキング受付拒否

不正な記録の投稿や、不適切なプレイヤー名による投稿があった場合に、
そのプレイヤーからのランキング投稿を拒否するための機能をサーバー側に設けている。

なお、現状は作者以上の記録を出すプレイヤーがいないため、
作者からの記録投稿は受け付けないようにしてある。

CPU対戦

CPUの思考ルーチン

CPUの思考ルーチンは、Lvごとに多少の違いはあるが、
基本的には同じ。
ミノの出現したタイミングで置き方を決定している。

ミノの配置の決め方は、
すべての置き方に対してそれぞれ条件に応じて評価点を付け、
点数の高い置き方を選択するという形を取っている。

例えば、
  • ブロックプールの両端にはみ出す配置は減点
  • 低い位置ほど加点
  • 別色のブロックが隣接する場合は加点
  • 同色のブロックが隣接する場合は減点
  • メタルブロックの穴にブロックが落とせなくなる置き方は減点
といったような感じ。(この他にも細かい条件はある。)

また、すでに置かれているブロックに適切なダメージを与えるように、
落下高度を決定している。

ゲームオーバーしてしまう置き方や、
メタルブロックの穴にブロックを落とせない盤面になっている時は
ずらし置きを行うため、ずらし置き先もここで決定している。

ゲームの性質上、
低レベルでも大連鎖を出してしまうことはあるし、
高レベルでも勝手に自滅してしまうことも稀にある。

CPUのLvごとの違い

CPUのLvには、以下のような違いがある。

  • 落下速度
ミノの落下速度。
Lv.7以上はミノの落下速度が早くなる。

  • 起爆判定の高さ
ブロックをどの程度の高さまで積むとコンボを起爆するかの判定基準。
Lvが高いほど高く積むようになるため、コンボ数が多くなりやすい。

  • メタルブロックの穴への配置
メタルブロックの穴に直接ミノを差し込んでラインするケースをチェックするかどうか。
メタルブロックを直接ラインするとコンボ数が少なくなりやすい。
Lv.2以下はメタルブロックの穴に直接ミノが入る置き方はプラス評価判定になる。
逆にLv.3以上はマイナス評価判定になる。

  • 両端への配置
ブロックプールの両端にブロックを配置するケースをチェックするかどうか。
両端にブロックを配置すると、カラーブロックのみのラインで消えてしまったり、
隣接する同色のブロックと連結してコンボを止めてしまったりする可能性が高くなる。
Lv.3以上はブロックプールの両端にブロックが配置される置き方はマイナス評価判定になる。

  • 同色の接触
同色のブロックが隣接する配置をチェックするかどうか。
同色のブロックを隣接させて配置すると、連結して塊になり落下しにくくなる。
また、同色のブロックはライン巻き込みで消えてしまうため、
ライン巻き込みでブロックが消え過ぎるとコンボ数が伸びにくくなる。
Lv.7以上は同色のブロックが隣接する置き方がマイナス評価判定になる。

  • ハードドロップの使用
ハードドロップの操作を使用するかどうか。
ハードドロップを使用した方がミノを置くのが早くなるため、使用した方が強くなる。
Lv.5以上はハードドロップを使用するようになる。

  • クイックハードドロップの使用
クイックハードドロップの操作を使用するかどうか。
クイックハードドロップはミノを置いた後の遊び時間(左右移動や回転ができる時間)が無いため、
ハードドロップよりもさらに速くなる。
Lv.8以上はクイックハードドロップを使用するようになる。

  • ゼロドロップの使用
ミノの底面がメタルブロックに接する場合にダメージを入れるように置くかどうか。
Lv.6以上はダメージが入らないように置くようになる。
また、Lv.6~8はゼロハードドロップ、Lv.9, 10はゼロクイックハードドロップを使用する。

  • ずらし置きの使用
ミノを一旦着地させた後、左右にずらして置くかどうか。
ずらし置きをした方がブロックのダメージを調整しやすくなったり、自滅を回避しやすくなる。
Lv.5以上はずらし置きを使用するようになる。

  • ダメージの誤差
ミノを落とす際に与えるダメージの誤差の値。
誤差の値はランダムだが、誤差の範囲はLvが高いほど小さくなる。

  • インターバルフレーム
1つの操作を行ってから次の操作を行うまでのフレーム数。
Lvが高いほどインターバルは短くなり、速く動く。

表にすると次のようになる。
動作\Lv 1 2 3 4 5 6 7 8 9 10
落下速度 ×1 ×1 ×1 ×1 ×1 ×1 ×2 ×3 ×5 ×10
起爆判定の高さ 11 12 13 14 15 15 16 16 17 17
メタルブロックの穴への配置 × × × × × × × ×
両端への配置 × × × × × × × ×
同色の接触 × × × ×
ゼロドロップの使用 × × × × ×
ハードドロップの使用 × × × ×
クイックハードドロップの使用 × × × × × × ×
ずらし置きの使用 × × × ×
ダメージの誤差 ±900 ±800 ±700 ±600 ±500 ±400 ±300 ±200 ±100 0
インターバルフレーム 36 32 28 24 20 16 12 8 4 0

オンライン対戦

マッチング処理

ルームマッチ、フリーマッチともに、
対戦を行うにはそれぞれのプレイヤーのゲームのバージョンが同じである必要があるため、
バージョンが異なる場合はマッチングできない。
(ルームマッチの場合はルームに入室できない。)

サーバーのアクセス数上限

サーバーでは、同時アクセス数に上限を設定している。
アクセス数が上限に達していると、新たなアクセスは受け付けなくなる。
現在は非常に過疎っているため、上限に達することはまず無い。

対戦相手画面の描画

対戦中の相手の画面は非同期で描画している。
つまり、相手からのデータを受信した時に都度更新している。
そのため、例えば自分側が60フレーム経過していたとしても、
相手側ではまだ50フレーム目であったり70フレーム目であったりすることがある。

壊リスでは1つの落下操作ミスが致命的になりうるため、
通信ラグが大きなストレスになりやすい。
そのため、操作の快適さを重視して非同期で描画している。

おじゃまブロックに関する計算

対戦でコンボが発生した時は、コンボを発生させた側でおじゃまスコアの計算を行っている。
そして計算した結果として、相手側に「自分側のおじゃまスコア」と
「相手側に加算するおじゃまスコア」を送信している。

また、自分側の「おじゃまの猶予カウント」「おじゃまが落下したフレームかどうか」
「降ってくるおじゃまブロックの穴の位置」「おじゃまブロックのカラー」
のデータもそれぞれ送信している。
相手側では、受け取ったデータに従って描画を行っており、計算はしていない。

勝敗の判定

対戦の勝敗判定は、先にゲームオーバーになった方が負けになる。
ただし、両者が同時にゲームオーバーになった場合、
通信ラグの都合上自分側の負け判定が先に処理され、その時点で相手側の画面の更新は止まるため、
両プレイヤーとも負け判定になる可能性がある。

タグ:

+ タグ編集
  • タグ:
ウィキ募集バナー