C++でRPGシステム制作 ~第18回・暗号~ 北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 0521078 綾部 豊 今回の発表内容 • セーブデータの作成方法 – セーブデータの概念・作成方法・暗号化について 説明する セーブデータとは • 当然ながら何かしらの記録を保存すること – 今回の場合は特にゲームの中断状況を記録する ことを示す – コンピュータは全ての処理を計算によって行って いるので突き詰めて言えば数字を記録すること – 「データ」と名が付いているので正確には記録を 保存したファイルを指し示すのが正しい データを記録するには • プログラム言語に用意されている「fopen」な どの関数を使用して変数を書き込む • 例 – 名前 – 顔番号 –力 – 魔力 「ナインゲイツ」 1 123 77 データはそのまま書き込まない • そのまま書き込んでしまうと – データをユーザが容易に読み取れてしまう • データの改ざんも楽にできる – 必要のない空白のデータを大量に保存すること になる • セーブデータの容量が肥大化 • そこで何かしらの工夫を行う データの選別 • 他のデータがあれば復元できるデータは保存 の対象から除外 • 必要最低限の データを選別 – 容量の圧縮を図る 左のデータから復元できるので 右のデータは不要 データを数値化 • 保存する際は「long int 型」の変数を使用 • 「long int 型」とは – 0~4294967295 の数字を表せる変数 • または -2147483648~2147483647 – 容量に直すと4バイト – 0~F(16)の数字を8つ,または0・1のビットデータを 32保存するデータとして見ることもできる 1バイト 16進数 2進数 FFFFFFFF 1111 1ビット 1つの変数に複数のデータを保存 • 保存するデータはその数字の範囲によって必 要なビット数が分かる – 0・1 – 0~3 – 0~15 – 0~1023 2通り 4通り 16通り 1024通り 1ビット 2ビット 4ビット 10ビット 1 11 1111 1111111111 • ビットを小分けにして保存することで1つの変 数に複数の数字を記録することができる 複数のデータ保存例1 • 何かしらのON・OFFを記録するデータは「0」 か「1」かの2通りしかないので必要な容量は1 ビットでたりる • 「long int 型」は32ビットで構成されているの で32のデータを保存できる 16進数 A0B6731D • 1つのデータに1つの変数を 2進数 1101 使用した場合に比べて容量を OOO NFN F 1/32に節約できる スイッチの役目を果たす これら一つ一つのビットを フラグと呼ぶ 複数のデータ保存例2 • キャラの基本能力を保存する場合 – この値は0~999の範囲をとる • 1000通りあるデータなので10ビットあれば保存できる – 「long int 型」は32ビットなので1つの変数に3つ 分のデータを保存可能 •例 16進数 0521347B = 86062203 10進数 2進数 0001 0011 0100 0111 1011 能力B 77 能力A 123 • このように保存すると容量の節約になるだけでなく読 みとりにくいデータにもなる 暗号化 • 変数に複数のデータを持たせることでデータ が読みとりづらくなるのでこれも1つの暗号化 といえる • しかし各変数の意味を知っていたりビットを小 分けしたりすればデータをそのまま読み取れ てしまう • そこでデータをファイルに書き込むときは暗号 化を行う 簡単な暗号化 • ファイルに書き込むときにデータに適当な値 を足す 規則正しく並んだデータも・・・ 不規則な状態になる (16進)100000FF + (10進)12345678 → (16進)10BC624D • こうすることでビットを分割してもデータを読み とれなくすることができる – 足した適当な値を暗号化の「鍵」とする • パスワードやマスターコードのようなもの – 読みとるときはこの値を引けば復号できる おまけについて • アップロードしているフラッシュのファイルは 本編とは何の関係もないです – 適当に作ってみました • ボールにマウスポインタが重なるとちょっと気 持ちいいです – 遊んでやってください 次回までの成果誓約 • できれば戦闘シーンの作成を開始する
© Copyright 2024 ExpyDoc