レトロスタイルのパスワードベースの「savegame」システムを実装するにはどうすればよいですか?


20

古いコンソールゲームで使用されているようなシングルプレイヤーゲームのパスワードシステムを作成するにはどうすればよいですか?

たとえば、Mega Man Xは、後で入力して保存を読み込むことができる一連の数字を提供することで作業を節約します。


3
ドンキーコング(NES)がやったことはしないでください-これはカートリッジに保存できますが、生存カウントは保存できません-したがって、第1レベル(24など)の保存、寝床、寝起きから多くの命がありますUP WITH 3- 嫌い
アレックティール

10
注意:パスワードシステムはゲームの状態を保存せず、定義済みの状態をロードします
リリエンタール

5
@Lilienthalとは限りません。たぶんそれは、決定論的な双方向アルゴリズムでシャッフルされた、いくつかの変数状態のある種の「ダンプ」です。
o0 '。

2
@Lohorisはい、パスワードに十分なエントロピーがある場合、現在のセーブゲームに似ているのに十分近い一種の保存状態と考えることができます。結局のところ、どちらもゲームの状態をエクスポートおよびインポートする方法が必要です。ただし、真の保存(正確なロケーション/チェックポイント、ライフ、敵の殺害、弾薬数など)に似たものに必要なエントロピーには、非常に長いパスワードと非常に複雑なアルゴリズムの両方が必要です。savegamesでパスワードを使用するという決定が理にかなっている場合(ある場合でも)、格言は当てはまるはずです。
リリエンタール

3
@AlecTeal「バカ」とは一体何でしょうか?私は、現代のゲームに保存されているデータの量に対してパスワードを評価していますが、それらのデータは圧倒的多数に明らかに不適切です。
リリエンタール

回答:


32

まず、ゲームの状態(または保存する状態の側面)を分類します。Mega Manスタイルのゲームの場合、どのエンドレベルのボスを倒したか、エネルギータンクのようなパワーアップの数などを追跡できます。

すべてのデータをビットフィールドにパックします。つまり、各値に適切なビット数を割り当てます。

  • ボス1を殺した(1ビット)
  • ボス2を殺した(1ビット)
  • ボス3を殺した(1ビット)
  • 殺されたボス4(1ビット)
  • エネルギータンク(合計5のx)(3ビット)
  • 実績のロックを解除しました(1ビット)

この例では合計8ビットであるため、1文字でパスワードを表すことができます。実際には、ゲームはより多くの状態を持っている可能性が高いため、より多くの合計ビット、したがってより多くのキャラクターが必要になります。この質問のここおよび他の場所でのコメントで述べたように、このアプローチは、「レトロ」ゲームまたはキャプチャされたゲーム状態のサイズが妥当な他のゲームに有効です。特定のポイントを超えて、状態をエンコードするために必要なパスワードの複雑さが大きすぎることに気付くかもしれません。

パスワードをクラックする偶然の観察の可能性を減らすために、ビットレイアウトを変換して、ダミーのビット(ゲームの状態には影響を与えませんが、すべてのビットを文字として解釈するとパスワードが異なって見えるようにする)を導入できますすべての「killed box X」ビットが互いに隣接しないようにビットをスクランブルするための可逆的なハッシュのような操作によって、対応するシーケンシャルステートパスワードの外観が非常に異なったり、チェックサム値が導入されたりします。

よく調べてみると、人気のあるパスワード付きゲームのいくつかに採用されているシステムに関する情報がかなりあります。

さらにインスピレーションを得るためにそれらを読むことができます。


4
「状態保存」パスワードはすべて簡単に入力可能で、できれば明確であることを忘れないでください(たとえば、両方ではなく「0」または「O」を使用してください)。
minnmass

4
同様の文字を暗黙的に標準に変換すると、@ minnmassボーナスポイントが得られるため、「0」ではなく「O」を入力しても「0」に変換されます。

8
@ NPSF3000この場合、「パスワード」は認証手段ではないためです。「パスワード」は記憶媒体そのものです。
シルコート

6
@ NPSF3000質問から明らかでない場合は、質問を読み直すか、背景資料を学ぶ必要があります。
ホッブズ

2
@ NPSF3000 OPは明確に「Retro Style」と言い、Megamanを参照して確認しますが、これはあいまいではありません。主題について学び、これがセキュリティに関連していないことを理解し、正直で許される無知として始まったものを弁護しようとするのをやめてください。
MickLH

3

これらのゲームは、私が信じている状態を保存するだけでした。パスワードはロードするレベルを参照するだけです。このようなものに辞書を使用するだけです。

特定の武器やブースターのように少し複雑な場合は、状態を短い(ただし十分に長い)ハッシュコードに暗号化できます。

ただし、これを使用しないことを強くお勧めします。パスワードはインターネット上で急速に広がり、すぐに誰もがゲームに勝ちました。


9
インターネット上で広がるパスワードは良いことがあります。不正行為は楽しい場合があり、シングルプレイヤーゲームでは、プレイヤーは自分自身をだますだけです。
アンコ

@Ankoええ、私は不正行為を嫌い、ほとんどやっていなかったので、偏見があります。しかし、私自身の経験から、自分の道をだますと、ゲームはどんどん早くほこりを集めます。
マドメニョ

「...ロードするレベルを参照するだけです。」すべての場合にはるかに当てはまりません。一部のパスワードは、ボス、殺害、パワーアップ獲得など​​も参照します。次に、パスワードが拡散される可能性があるというアドバイスは、ハイパーコネクテッドワールドの問題です。あなたが不正行為を好まないので、不正行為のオプションは削除されるべきであると言うことは別です。あなたが好きなものは、他の人が好きなものではありません。それはあなたが好きなものではなく、消費者です。不正行為/ショートカットは重要なオプションです-特にシングルプレイヤーゲームの場合。
WernerCD

@WernerCD最初に、単純なパスワードシステムから始めた、より複雑なシステムについて説明します。私は何も主張していません。第二に、私は答えで不正行為について何も言っていません。私はコメントに対して偏った回答をしているだけでなく、自分が好きではないというあなたの主張に偏っており、それを認識しているとさえ言っています。しかし、彼が好きなことや嫌いなことを誰も言わない場合、他の人が好きなことをどのように知っていますか?私はまだそのようなシステムが期限であり、21世紀の不正行為が異なる方法で達成されると思います。次回は、そのような私見のようなコメントを書く前に、より注意深く読む必要があります。
マドメニョ

savegamesがある場合、人々もsavegamesを共有します。
デウィモーガン

1

基本的に次のようにできます:

殺されたボス= 7

コインの量= 36

剣を所有する= 0(いいえ)

ハートを所有する= 1(はい)

現在のレベル= 6

現在の世界= 9

健康= 100

コード= 7V36R0A1T6O9A100

基本的にすべての文字はタイプを分けます


-3

Josh Petrieのキャラクターから状態へのシステムようなソリューションには利点(小さな保存サイズ、ゲームのすべてのコピーで機能します)がありますが、ゲームの設計と状態システムを本質的にパスワードシステムに結合します。パスワード、状態、または設計への変更、およびシステム全体の崩壊。

はるかに簡単な解決策は、通常どおり保存システムを構築し、単純にパスワードシステムを追加することです。これは、保存時にパスワードを保存する(ファイル名を2倍にする)だけで簡単にできますし、ロード時に検証することもできます。


この答えには混乱があるようです。

1)opは単に保存をロードするためのパスワードを要求しました...パスワード保存である必要はありません。

2)今日の多くのゲームにはかなりの保存容量が必要です。10MBのファイルを生成するクイック保存/読み込みシステムを内部で構築しました...クイズゲーム用です! Josh Petrieの保存システムは有効ですが、ストアシステムが非自明になるとすぐに、すべての関連データを保持するためにパスワードは膨大な長さになる必要があります。

たとえば、30人のボスがいる場合はどうなりますか?20の成果?私たちは成果の中間にいますか?彼のレベルは?私たちは健康、生活、コイン、XPのために何ビットを取っていますか?スナップショットがレベル間の状態ではなく、レベルの中間にある場合-プレイヤー、敵、発射物、破壊/変更された地形の位置が突然保存されなければならない多くの状態になります。

見通しのために、30文字のアルファベットと10文字のパスワードを想定すると、約50ビットの情報を保存できます。ゲーム/エンジンが単一のオブジェクトの位置、回転、スケーリングを保存するためだけに最大320ビットを使用することは珍しくありません。もちろん、あらゆる種類の最適化トリックを実行して、より少ない労力でより多くのことを行うことができます...しかし、最終的には、ゲームを楽しくすることに専念する時間を費やしています。


3
ここでの問題は、上記のコメントで、暗号化セキュリティは、パスワード内のビットとしてゲームの状態を保存する目標ではないということです。このような方法で構成されたパスワードは簡単に元に戻すことができますがハッシュを推測することは難しく、それ以上はありません。そして、同じ理由で、あなたが想像しているように過度の結合を引き起こしません。ゲームの状態が多少複雑になると、ハッシュも(以前のハッシュを無効にする)複雑になりますが、システムは前後で同様に機能します。
セスバティン

@Seth Battin「それはあなたが想像しているように過度の結合を引き起こさない」ああクール!そのため、私が今取り組んでいるゲームにはメガバイト単位の保存ファイルがありました...基本的な難読化を行い、画面に表示するだけです!現在、完全に優れたパスワードシステムがありますか?
NPSF3000

3
あなたのゲームはこの方法には適さないようです。
セスバティン

@ NPSF3000この場合のパスワードのポイントは何ですか?同じマシンを使用している他のユーザーが許可なくsavegamesを使用できないようにする場合は、ユーザー名/パスを使用してゲームごとに1回ログインするだけではどうですか?必要な保存を指定する場合、それはパスワードではなく「savegame id」であり、おそらくより使いやすくする必要があります。そのままで、私があなたを正しく読んだ場合、あなたは彼らが新しいセーブをロードするたびに異なる、ユーザー指定されていないパスワードを要求していますか?どうして?それは誰にどんな有益な利点を与えますか?
デウィモーガン

1
@DewiMorgan私は何も必要としません、私は純粋にopの質問への答えを与えています:「どうやってシングルプレイヤーゲームのパスワードシステムを作りますか?例えば、Mega Man Xは一連の数字を与えることで仕事を節約します後で入力して保存を読み込むことができます。」私のソリューションは、保存システムとパスワードシステムを結合せずにそれを行います。上位の回答には私のものと同じ欠点がありますが、加えて、メソッド全体に合わせてゲーム全体を設計する必要があります。
NPSF3000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.