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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0416
wiggginハイスコアの記録について3未解決


wigggin

リンク

2008/4/16(Wed) 07:08:55|NO.15139

#include "hspda.as"

dim sc,10 ;スコアデータ
sdim nm,30,10 ;元の名前データ
sdim nm2,30,10 ;ソート後の名前データ
alloc sd,1000 ;データ読みこみ書きこみ用バッファ

datamax=5

;データファイルのチェック
;存在する場合は読みこむ
;ない場合はこのスクリプト内のデータを使う

chdir exedir
onerror 1
bload "tokuten.txt",sd
ernum=err
onerror 0

if ernum=12:goto *top1 ;12 is ファイルが無い

;読みこんだデータを配列に変換
notesel sd
repeat datamax
noteget a,cnt
strmid b,a,0,8 ;数字部分
strmid c,a,8,30 ;30の部分は文字の最大値、とりあえず30文字
int b:sc.cnt=b
nm.cnt=c
loop
goto *top2
*top1
sc.0=100:nm.0="百"
sc.1=7000:nm.1="7千"
sc.2=5000:nm.2="五千"
sc.3=200:nm.3="二百"
sc.4=9999:nm.4="最大"
*top2
gosub *name_sort ;本当はソートされたものが入っているはずだけど一応ソート
gosub *name_put ;内容を表示

mes " "

testsc=400 ;試しに得点を300としてやってみます
mes "得点"+testsc

;最小値と比較
if sc.4>testsc:goto *name_end ;最小値より小さい場合は終了

mes "名前を入力してください"
nowname=""
input nowname,150,25
button "OK",*name_add
stop

*name_add

cls

sc.4=testsc
nm.4=nowname
gosub *name_sort ;最終的にソート
gosub *name_put ;表示

;ここから保存
sd=""
repeat datamax
s=sc.cnt
str s,8 ;数字の最大桁数
sd+=s+nm.cnt+"\n"
loop
;mes sd
strlen sdl,sd
bsave "tokuten.txt",sd,sdl
stop

*name_end
mes "ランキング5位以内に入りません。"
stop

*name_put
repeat datamax
p=" "+sc.cnt+":"+nm.cnt
mes p:loop
return
*name_sort
sortval sc,1 ;数値により大きい順に
repeat datamax
sortget n,cnt
nm2.cnt=nm.n
loop
repeat datamax
nm.cnt=nm2.cnt
loop
return

stop

上記のスクリプトはハイスコアを記録するためのスクリプトなのですが、
このスクリプトですと、パラメータの値が無効ですとなってしまいます。
初心者で大変恥ずかしい質問なのですが、教えて下さい。



この記事に返信する


hx

リンク

2008/4/16(Wed) 07:48:37|NO.15140

>>パラメータの値が無効ですとなってしまいます。
14行目のexedirが原因ではないですか?
dir_exeの間違いだと思います。

他にもところどころ不審な点が見当たります。
66・73行目の二つと15行目のonerror、ヘルプで確認してみてください。
使い方を取り違えられているのだと思います。
↓onerrorのところはこのほうが良いかと。

exist "tokuten.txt" if strsize=-1 : goto *top1 bload "tokuten.txt",sd

それと、これはあくまでもアドバイスですが
ハイスコアをセーブするのにtxt形式は適していないと思います。
datファイルを使う事を推奨します。



wigggin

リンク

2008/4/16(Wed) 10:43:49|NO.15144

お早い返信ありがとうございます!
HSP2からHSP3に変わって、命令や関数の部分の使い方が少しごっちゃに
なってます。返信嬉しかったのですが、未だにちゃんとスクリプトが
できてませんorz(文字化けしたり、テキストが保存されなかったりと)
私にはまだ早いようです^^;なのでもう少し勉強してからまた質問
したいと思います。(datファイルの事も正直言うと分からないので^^;;)



As

リンク

2008/4/16(Wed) 19:20:47|NO.15147

アローマークのあるコメントを見てください

#include "hspda.as" dim sc,10 ;スコアデータ sdim nm,30,10 ;元の名前データ sdim nm2,30,10 ;ソート後の名前データ alloc sd,1000 ;データ読みこみ書きこみ用バッファ datamax=5 ;データファイルのチェック ;存在する場合は読みこむ ;ない場合はこのスクリプト内のデータを使う chdir exedir //////←dir_exe しかし、デバッグ時ですとHSP3があるフォルダパスが変数に入ってしまうため //////dir_curを使ったほうがいいかもしれません。dir_curなら特にchdirを使っていなければ、初期で操作先パスが割り当てられています。 onerror 1 //////←エラー発生時にラベルにジャンプする命令です。trueでONにすることはわかりますが、ラベルを指定させてあげてください bload "tokuten.txt",sd ernum=err onerror 0 if ernum=12:goto *top1 ;12 is ファイルが無い //////←エラーコードはonerrorから飛ばされたラベル先で使うようにしてください ;読みこんだデータを配列に変換 notesel sd repeat datamax noteget a,cnt strmid b,a,0,8 ;数字部分 //////←Strmidは関数になりました。b=strmid(a, 0, 8) このように記述します。 strmid c,a,8,30 ;30の部分は文字の最大値、とりあえず30文字 //////←同じく c=strmid(a, 8, 30) int b:sc.cnt=b //////←intも関数になりました。 b=int(b) こんなかんじです。 nm.cnt=c loop goto *top2 *top1 sc.0=100:nm.0="百" sc.1=7000:nm.1="7千" sc.2=5000:nm.2="五千" sc.3=200:nm.3="二百" sc.4=9999:nm.4="最大" *top2 gosub *name_sort ;本当はソートされたものが入っているはずだけど一応ソート gosub *name_put ;内容を表示 mes " " testsc=400 ;試しに得点を300としてやってみます mes "得点"+testsc ;最小値と比較 if sc.4>testsc:goto *name_end ;最小値より小さい場合は終了 mes "名前を入力してください" nowname="" input nowname,150,25 button "OK",*name_add stop *name_add cls sc.4=testsc nm.4=nowname gosub *name_sort ;最終的にソート gosub *name_put ;表示 ;ここから保存 sd="" repeat datamax s=sc.cnt str s,8 ;数字の最大桁数 //////←strも関数になりました。 s=str(s) と書き換えますが、 複雑な書式をする場合は strfあたりで sd+=s+nm.cnt+"\n" loop ;mes sd strlen sdl,sd //////← sdl=strlen(sd) bsave "tokuten.txt",sd,sdl stop *name_end mes "ランキング5位以内に入りません。" stop *name_put repeat datamax p=" "+sc.cnt+":"+nm.cnt mes p:loop return *name_sort sortval sc,1 ;数値により大きい順に repeat datamax sortget n,cnt nm2.cnt=nm.n loop repeat datamax nm.cnt=nm2.cnt loop return stop



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