#!ruby -Ks # -*- mode: ruby; encoding: sjis -*- # Last updated: <2013/12/29 05:18:53 +0900> # # zipファイルを開いて中にある画像ファイルを表示する。 # zipruby使用版。パスワードつきzipファイルを対象にする。 # # ただし問題有り。 # 一度パスワードを解除してしまうと、 # その後、別ツールでも平気で開ける zip になってしまう…。 # # zipruby, dxruby, Ayame/Ruby が必要 require 'zipruby' require 'dxruby' require_relative 'ayame' res_zip = "res_encrypt.zip" # zipの解凍パスワード passwd = "hogefugapiyo" bindata = {} # zipのパスワードを設定 # Zip::Archive.encrypt(res_zip, passwd) # zipのパスワードを解除 Zip::Archive.decrypt(res_zip, passwd) # zipファイルを開いて、中にあるファイルを読み取る Zip::Archive.open(res_zip) do |ar| # ar.decrypt(passwd) # パスワードを解除 n = ar.num_files # ファイル数を取得(ディレクトリも含む) # ファイル数分、繰り返す n.times do |i| entry_name = ar.get_name(i) ar.fopen(entry_name) do |f| name = f.name # ファイル名取得 size = f.size # ファイルサイズ取得(展開後) comp_size = f.comp_size # ファイルサイズ取得(圧縮時) # puts "#{name} , #{size} , #{comp_size}" # ディレクトリの場合はサイズが0になる # サイズが0ではないなら、何らかのファイル if size > 0 bindata[name] = f.read end end end end # 画像作成、サウンドデータの記録を行う imgs = [] bgms = [] bindata.each_key do |fn| if fn =~ /\.png$/ # 画像作成 imgs.push(Image.loadFromFileInMemory(bindata[fn])) elsif fn =~ /\.ogg$/ # サウンドデータを記録 bgms.push(bindata[fn]) end end # サウンドを再生 bgm = Ayame.load_from_memory(bgms[0]) bgm.play(0) # メインループ Window.loop do break if Input.keyPush?(K_ESCAPE) # 読み込んだ画像を全て表示 x, y = 0, 0 imgs.each do |img| Window.draw(x, y, img) y += img.height end end