HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0617
雪だるま変数の保存10未解決


雪だるま

リンク

2010/6/17(Thu) 10:02:18|NO.33298

スコアの保存についてですがbsaveを使って保存してみたのですが保存したsaveをメモ帳で開いても何も表示されませんでした。
bloadを使って最高得点(数値)を読み込んでゲーム起動時に"maxscore"に最高得点を代入したいです。
ゲーム終了前に"maxscore"と現在の得点"score"を比較して"maxscore"より"score"のほうが大きい場合は
maxscoreにscoreを代入したいです。
そして"maxscore"を"save"ファイルに保存しておきたいと思っています。

bload score=1 if score>maxscore : maxscore=score bsave "save",score
bloadとbsaveの使い方がいまいちよくわからないのですがどのように修正すればよいでしょうか?
saveファイルの最大桁数は4桁の数値です。



この記事に返信する


SYAM

リンク

2010/6/17(Thu) 10:10:10|NO.33299

bsaveで作られたデータをメモ帳で開こうとしているってことは、「バイナリファイル」と「テキストファイル」の違いをご存知ないのではないでしょうか。
bsaveを使うのであれば、まず バイナリファイル と テキストファイル について知ることが必要です。


数値ひとつは、4バイトの大きさを持っています。
ですから、変数ひとつ保存する程度なら

score = 9999 bsave "hogehoge.dat", score, 4 bload "hogehoge.dat", test mes test
こんな感じで できます。
実際には、たとえばbload命令の前にexist命令で ファイルが本当に存在するかどうかチェックするなどの手順を踏んでおくことをオススメします。



雪だるま

リンク

2010/6/17(Thu) 16:21:32|NO.33300

一度試してみたのですが比較して変数を保存することができませんでした。

maxscore=0 score = 10 bload "hogehoge.dat", maxscore if maxscore=>score: maxscore=score bsave "hogehoge.dat", maxscore, 4 mes maxscore
どうすればよいでしょうか?



晩御飯

リンク

2010/6/17(Thu) 17:41:01|NO.33301

変数は保存されている様に見受けられます。
>bsaveで作られたデータをメモ帳で開こうとしているってことは、「バイナリファイル」と「テキストファイル」の違いをご存知ないのではないでしょうか。
>bsaveを使うのであれば、まず バイナリファイル と テキストファイル について知ることが必要です。
よろしければもう一度上記について調べてみて下さいな。

それと4行目は不等号が逆な気がします。
if maxscore < score : maxscore = score




SYAM

リンク

2010/6/17(Thu) 17:47:09|NO.33302

意図したとおりに動かないことを解決したい場合、

「**したいのにうまくいかない」
ではなく、

「**したいのだけど、**というエラーが出る」 「**したいのに、**という動きになる」
という書き方をするように心がけましょう。
でないと、回答する側には何が起きているのかわかりません。
結局、回答が得られるのが遅れてしまい、損をするのは質問者さん自身です。

で、このケースですが…。
不等号のある行を指したエラー表示が出ませんでしたか?
もし、エラーが出てるのにそれをちゃんと読まないで質問してるのだとしたら、猛省してください。そんなことしてたらそのうち誰も回答してくれなくなること請け合いです。



※不等号の書き方が間違ってます。 => ではなく >= にしないといけません。



info

リンク

2010/6/18(Fri) 02:56:01|NO.33304


num = 1200 txt = "1200" mes num mes txt

上記のスクリプトの 変数 num と txt の違いは解りますか?
メモ帳で正常に表示されるのは、変数 txt である、文字列型形式だけです。

バイナリエディタで検索、ダウンロードして、bsave で保存したファイルを開いてみてください。
保存出来ている状態が目視できるはずです。
 基本バイナリエディタは、16進数で表現されますので。
 バイナリエディタに表示されている情報について詳しく知りたければ、
 16進数で検索して勉強することをお勧めします。

 バイナリエディタはどんなファイルでも基本的に開くことが出来るのでダウンロードしてみたら
 手当たりしだい開いてみることのが吉です。

 特に、メモ帳で保存したtxtファイルを開いて見る事をお勧めします。
 テキストファイルが 内部で どんな構造になっているか知ることが出来るはずです。



雪だるま

リンク

2010/6/21(Mon) 14:51:36|NO.33348

テキストファイルとバイナリファイルの違いを調べて理解できました。
自分はどのようなファイルでもメモ帳なら開けると認識していました。
役に立つご回答ありがとうございます。

追加で質問です。
起動時にファイルがなければ「error 12」が表示されOKを押すとプログラムが閉じてしまいます。
セーブファイルが見つからなければエラーが表示されず無視するかmaxscoreに0を代入するというようにしたいです。
どのようにすればよいですか?
自分で調べてみたのですがファイルの存在チェックまでしかわかりませんでした。



SYAM

リンク

2010/6/21(Mon) 15:08:07|NO.33349

ファイルの存在チェックがわかったのなら、ファイルが存在しない場合にはファイルのアクセスはしないで maxscore=0 とすればよいだけです。
普通に if〜else〜でできるでしょう。

…というか、ファイルの存在チェックまでわかっているのにできないっていうのは、いったいドコで引っかかっているのでしょう…?



SYAM

リンク

2010/6/21(Mon) 15:11:04|NO.33350

↓のスレッドのどこかに、お望みの処理を行うスクリプトがあるかもしれません

http://hsp.tv/play/pforum.php?mode=pastwch&num=19154



あり

リンク

2010/6/22(Tue) 10:52:29|NO.33362

暗号化をしないでいいならメモリノートパッド命令を
使った方が色々便利だと思います。

以下はメモリノートパッド命令を使った一例です。
スクリプトを一度セーブしてから起動して下さい。

notesel s_rank ;スコアランキング用文字列型変数 score = 0 ;初期化スコア rank_max = 10 ;ランキングの保持数(10位まで) filename = "score.txt" ;保存に使うスコアファイル名 *ファイル存在チェック exist filename ;スコアファイルの存在を確認 if strsize = -1 { ;ファイルがない時は新規で作成 dialog "ファイルが無いので作成します", 0 repeat rank_max noteadd strf("%04d", score), cnt loop notesel s_rank notesave filename } *スコア読み込み noteload filename mesbox s_rank, 240, 160 : ID1 = stat input_y = ginfo_cy mes "追加するスコア = " pos ginfo_mesx, input_y : input score, 64, 18, 4 pos 0, ginfo_cy : button goto "スコア追加", *スコア追加 stop *スコア追加 repeat rank_max noteget chk_score, cnt if score > int(chk_score) { ;↓スコアを4桁で保存 noteadd strf("%04d", score), cnt notedel rank_max ;10位以下のスコアを削除 notesave filename objprm ID1, s_rank break } loop stop
最高得点の取得や名前の保存も文字列操作を覚えれば
簡単に出来るので色々試してみると面白いですよ。



info

リンク

2010/6/28(Mon) 02:20:12|NO.33478

まず exist 命令の戻り値 strsize の値でファイルが存在するかを調べて。
 (-1 で無ければ、ファイルは存在する)
 その後、必要なサイズの変数を sdim buf , strsize または、dim buf , strsize/4 で作成。
 その変数 に bload でファイルを受け取る

 下がその例です。


filename = "ファイル名.txt" exist filename size = strsize if size ! -1 { sdim buf , size bload filename , buf , size , 0 dialog "ロード完了" }else{ dialog "ファイルが存在しない" }



ONION software Copyright 1997-2021(c) All rights reserved.