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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
1019
うみうさぎ釣りゲームのランキングが上手く作れません(泣)12解決


うみうさぎ

リンク

2024/10/19(Sat) 19:35:14|NO.102413

釣れた3匹のバスの合計サイズや合計重量を競うゲームです。
ゲームを閉じてもランキングが残るようにメモ帳に保存したいですが
1項目しか保存されません。
最終的には名前も入力できるようにして、HSP3 DHISHを使ってホームページ上で
動くようにしたいと思っています。なにとぞご助力ください。
できる限り説明文入れましたが、我流の初心者なので分かりづらくて大変申し訳ないです。

画像データが入ったリンクです
https://42.gigafile.nu/0127-d67230b0f44dd936f5b0912c3031d29db

以下プログラムです
-------------------------

sizegt=0 /*サイズグラムトータル*/: #include "hsp3util.as" ;配列変数による文書読み書きに使用する sdim ranks,10 ;ここの数字がランキングの順位数となる dim hiscore,length(ranks)+1 ;順位数+1個分確保 arrayload "score.txt",ranks ;ランキングを読み込む noteunsel foreach ranks hiscore(cnt)=int(ranks(cnt)) ;文字列から数値に変換 loop buffer 10,640,480, : picload "title.png";50,100 顔 gsel 0 gmode 2 stage=3 : ; stageとは何回目のバス釣りかということ ★■★通常1(デバック中につき3) color 0,0,0 : boxf 0,0,640,480 : pos 0,0 : gcopy 10,0,0,640,480 color 255,255,255 : pos 120,170 : pos 335,200 : objsize 30,20 : button goto "GO!",*hajime objsel 0 : ; これが無いと2回目以降にinputボックス内に入力カーソルがデフォで出ない。 color 255,255,255 : boxf 280,330,410,350 color 35,35,35 : pos 282,330 : mes "Press space key!" stop ;■■■■■■■■■【準備】■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/**/ *hajime cls 4 x=640 : y=280 /*ワーム座標*/ : bx=640 : by=280 /*バス座標*/: tana=0 : bass=1 : reel=0 : ok=0 : a=0 : turey=640 : sui=0 : bgm=1 : b=0 : mesx=120 : mesy=464 : sizeg=0 zacox=480 : zugoki=0 : awaxx=(awax+150) : awayy=(away+50) : awaxxx=(awax+250) : awayyy=(away-50) : awaxxxx=(awax+300) : awayyyy=(away+110) : iwax=-600 tanay=rnd(350) : if tanay<=100 : tanay+=100/*タナ位置をランダムに指定。ある程度の画面内に収まるよう調整*/ tanayy=(100*stage)+tanay/*ステージごとにタナの幅を狭くする ★■★通常 100/stage (デバック中につき100*stage) */ buffer 1,640,480, : picload "warm2.png" ;わーむ buffer 2,640,480, : picload "warm.png" ;わーむ repeat randomize : size=rnd(11) : await 1 : if size>=1 : break/*0を除外*/ loop ;bsx=91 : bsy=41 bsx=22*size : bsy=10*size/*sizeは1〜10 22,10は7cmのバス 220,100は70cmのバス*/ buffer 3,640,480, : picload "bass.bmp";90,40 左向き(通常時バス) buffer 33,640,480, : gzoom bsx,bsy,3,0,0,91,41;90,40 左向き(通常時バス) buffer 4,640,480, : picload "bass2.bmp";90,40 右向きのバス buffer 44,640,480, : gzoom bsx,bsy,4,0,0,91,41;90,40 右向きのバス buffer 5,640,480, : picload "zaco.png";25,9 雑魚 buffer 6,640,480, : picload "ture2.bmp";50,100 釣れ上がったときの縦のバス buffer 7,640,480, : picload "haikei.png";50,100 みずうみの背景 buffer 8,640,480, : picload "mizu.png";50,100 水中画像 buffer 9,1833,77, : picload "iwa.bmp";50,100 手前の動く岩 mmload "water01.wav",1,1 mmload "bubble.wav",2,1 mmload "sya.wav",3,3 mmload "win2.wav",4,0 mmload "lose1.wav",5,2 zacoy=tanay/*雑魚はタナ付近に表示*/ randomize : sizen=rnd(20) : zacoy+=sizen : if sizen<=1 : sizen=2/*雑魚とタナを少しずらす&自然な速度調整*/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;■■■■■■■■■【メイン】■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/**/ ;noteload "type1.txt",50000 ; 外に出す。 ;sdim kaitou,500 : ; 外に出す。初期化は代入で行う。 gsel 0 mmplay 2 repeat redraw 0 gmode 2 pos 0,0 : gcopy 8,0,0,640,480 ;50,100 水中画像 if wsipo=0 : pos x,y : gcopy 2,0,0,25,10 : else : pos x,y : gcopy 1,0,0,25,10;gzoom 25,-10,2,0,0,25,10,1;わーむ if zacox>=-30 : pos zacox,zacoy : gcopy 5,0,0,25,10 : else : zacox+=1200;雑魚描画往復 if (bass=1)&(zugoki<=10) : zacox-=(sizen/2) : pos zacox,zacoy : gcopy 5,0,0,25,10 : if (bass=1)&(zsipo=1) : pos zacox+3,zacoy : gcopy 5,0,0,25,10;雑魚動く if zugoki>=(20+(sizen/4)) : zugoki=0 : else : zugoki+=1 ;雑魚の動かない時間 if bass=1 : pos bx,by : gcopy 33,0,0,bsx,bsy : else : pos bx,by : gcopy 44,0,0,bsx,bsy : if sipo=1 : pos bx-4,by : gcopy 44,0,0,bsx/5,bsy;90,40 左向き(3 通常時バス 4 反転時バス) ;if bass=1 : pos bx,by : gcopy 3,0,0,91,41 : else : pos bx,by : gcopy 4,0,0,91,41 : if sipo=1 : pos bx-4,by : gcopy 4,0,0,17,40;90,40 左向き(3 通常時バス 4 反転時バス) if sipo=0 : sipo=1 : else : sipo=0 if zsipo=0 : zsipo=1 : else : zsipo=0 if wsipo=0 : wsipo=1 : else : wsipo=0 color 155,185,185 : line -250,150,(x-5),(y+5)/*バスのサイズによるラインの位置 もとが(x-5),(y+5)*/ color 50,50,50 : boxf ,456,640,480 ;■■■■■■■■■【目印】■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/**/ pos iwax,385 : gcopy 9,0,0,1833,77 : ;50,100 手前の動く岩 if bass<=2 : iwax-=2 if bass=3 : iwax+=18 if iwax<=-1200 : iwax=-590 if iwax>=-290 : iwax=-890 if bass=3 : color 200,255,200 : font "MS丸ゴシックM-PRO",12, : pos awax,away : mes "゜   \n\n\n\n\n\n\n\n\n\n\n   .    ゜     ゜\n\n\n\n\n\n\n\n .  ゜.  " : pos awaxx,awayy : mes "。\n\n\n\n\n\n\n\n       。\n\n\n\n\n\n\n  。  \n\n\n\n\n\n\n\n\n\n\n       。" : pos awaxxx,awayyy : mes "o\n\n\n\n\n\n\n\n      o \n\n\n\n\n\n\n\n  o  " : pos awaxxxx,awayyyy : mes "○\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n             ○" if bass>=2 : awax-=10 : awaxx-=15 : awaxxx-=20 : awaxxxx-=25 if (bass>=2)&(awax<=-36) : awax=600 : randomize : away=rnd(480) if (bass>=2)&(awaxx<=-36) : awaxx=600 if (bass>=2)&(awaxxx<=-36) : awaxxx=600 if (bass>=2)&(awaxxxx<=-136) : awaxxxx=600 color 255,255,255 : font "MS丸ゴシックM-PRO",12,1 : pos 0,50 : mes "-"+10+"-" : pos 0,50 : mes "-"+10+"-" : pos 0,150 : mes "-"+30+"-" : pos 0,250 : mes "-"+50+"-" : pos 0,350 : mes "-"+70+"-" : color 255,155,155 : pos mesx,mesy : mes "【 やり方 】 【 やり方 】 " color 255,255,255 : pos mesx,mesy : mes " 「スペース」でふわっと  「←」で速巻き  バスがいそうなタナを狙え!   (eで終了) 「スペース」でふわっと  「←」で速巻き  バスがいそうなタナを狙え!   (eで終了) " : mesx-=3 : if mesx<=-640 : mesx=0 ;■■■■■■■■■【 キー入力 】■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/**/ stick a,25 if a&1 : x-=4 : if tana>70 : bx-=50;バスの速さ★■★通常 18 (デバック中につき50) if (a&1)&(y>tanay)&(y<tanayy) : awax+=5 : awaxx+=5 : awaxxx+=5 : awaxxxx+=5 : iwax-=5 if (a&1)&(y>tanay)&(y<tanayy)&(bass=3) : iwax-=33 if a&16 : ky+=2 if a=0 : ky-=2 getkey ee,69 if ee>=1 : gosub*eend x-=2 : y+=1 : y-=ky : by=(y-20) if (y>tanay)&(y<tanayy) : tana+=1 if tana>70 : bx-=5 : bass=1 if ((tana>70)&(y<tanay))or((tana>70)&(y>tanayy)) : bx+=15 : bass=2 : if bx>=645 : bx=645 if bx<x : color 255,255,255 : pos 10,10 : mes "hitt!!" : bx=(x-(size*10)) /*バス右向き時の位置調整*/: tana=0 : bass=3 : x+=0 /*■もとはx+=2*/: ok=1 : if bgm=1 : gosub*bgmm if ((ok=1)&(y<tanay))or((ok=1)&(y>tanayy)) : x+=10 if (ok=1)&(x>=640) : gosub *owari if y>=450 : y=450 : ky=0 if y<=-20 : y=-10 : ky=0 if x<=-30 : bx+=670 : x=640 : tana=0 : if bx<x : reel+=1 if reel>=1 : gosub *tureta redraw 1 await 70 loop ;■■■■■■■■■【 釣れたとき 】■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■/**/ *tureta turey=640 : stage+=1 color ,, : boxf ,,640,480 repeat redraw 0 getkey ee,69 if ee>=1 : gosub*eend if cnt=5 : mmplay 4 gmode 2 pos 0,0 : gcopy 7,0,0,640,480  ;50,100 みずうみの背景 ;pos 200,50 : gcopy 5,0,0,480,580 gz=(nisyu*10) color 255,255,255 : line 203,180,203,turey+15 : pos 155,turey : gcopy 6,0,0,87,250 /*縦のバス*/: turey-=15 color 255,255,255 : circle 5,10,345,110,1/*吹き出し*/ color ,, : pos 35,25 : font "MS丸ゴシックM-PRO",20,1 : if stage<=3 : mes " やったネ!\n\n ただいまの釣果 "+(stage-1)+"匹!" : else : color 255,150,20 : mes " GAME CLEAR!\n\n "+(stage-1)+"匹釣れたぞ!おめでとう!" if turey<=210 : turey=210 : break redraw 1 await 100 loop pos 10,450 : objsize 140,30 : if stage<=3 : button goto ""+(stage)+"匹目を釣る!",*hajime if stage>=4 : button goto "スコアを見る!",*clear objsel 0 : ; これが無いと2回目以降にinputボックス内に入力カーソルがデフォで出ない。 stop *owari cls 4 color ,, : boxf 0,0,640,480 : color 255,255,255 : pos 220,200 : mes "逃げられちゃいました・・・" : pos 270,240 : button goto "もっかい",*hajime/**/ objsel 0 : ; これが無いと2回目以降にinputボックス内に入力カーソルがデフォで出ない。 mmplay 5 stop *clear cls 4 color 120,120,120 : boxf 0,0,640,480 : *iro gradf 0,10,640,40,0,$eeffee,$eeffee /*ランキンググラデ背景*/: gradf 40,60,560,410,1,$191970,$0000cd/*順位グラデ背景*/ ; repeat   /*★■★通常 キラキラさせたかった (デバック中につきPGの位置変更中キラキラOFF) */ ;redraw 0 ;rrr+=cnt : ggg+=cnt+10 : bbb+=cnt+30 pos 50,13 : font "MSゴシック",25,1 : color rrr,ggg,bbb : font "MS gothic",36 if hiscore(0)<sizegt{ ;1位だった場合、それを祝う mes "RANKING - HIGH SCORE!!" }else{ mes "RANKING" } ; if bbb>=250 : bbb=0 : break ; if aaa>=250 : aaa=0 : break ; if ggg>=250 : ggg=0 : break ;redraw 1 ;await 100 ;loop ;await 100 ;goto*iro ;mmplay 5 ;stop if size=1 : sizeg=100 :/*サイズを重量に*/ if size=2 : sizeg=150 : if size=3 : sizeg=200 : if size=4 : sizeg=300 : if size=5 : sizeg=400 : if size=6 : sizeg=500 : if size=7 : sizeg=1000 : if size=8 : sizeg=2000 : if size=9 : sizeg=3000 : if size=10 : sizeg=10000 sizegt+=sizeg pos 90,63 : font "MSゴシック",10,1 : color 200,200,200 : mes "順 位    名 前      総重量    最大サイズ  " : /**/ hiscore(10)=sizegt ;hiscoreに1つ空きを持たせたので、そこに今回のスコアを代入 sizegt=0 : sizeg=0 pos 90,90 : font "MSゴシック",12,1 : color 255,255,255 : sortval hiscore,1 ;そのうえで数字の大きな順に配列を並べなおす foreach ranks ranks(cnt)=str(hiscore(cnt)) ;数値を文字列に変換 loop arraysave "score.txt",ranks ;ランキングを表示する前に保存 noteunsel hitmp=0 foreach hiscore sortget hitmp,cnt if hitmp=10:color 255,0,0:else:color 255,255,255 if cnt<10{ ;順位によって1st、2nd、…となるようにする if cnt=0:ranktxt="1位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=1:ranktxt="2位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=2:ranktxt="3位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=3:ranktxt="4位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=4:ranktxt="5位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=5:ranktxt="6位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=6:ranktxt="7位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=7:ranktxt="8位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=8:ranktxt="9位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt=9:ranktxt="10位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" if cnt>9:ranktxt=""+(cnt+1)+"位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" mes ""+ranktxt+" "+hiscore(cnt) }else{ if hitmp=10{ ;ランク外だった場合、10位のちょっと下に表示される(マリオ64DSリスペクト) mes "\n "+hiscore(cnt) } } loop ;color 255,255,255 : mes "1位  つりうぇいぶタム   "+(sizegt)+"g    "+(size*7)+"cm" : /**/ color 255,255,255 : line 80,80,560,80 : line 80,110,560,110 : line 80,140,560,140 : line 80,170,560,170 : line 80,200,560,200 : line 80,230,560,230 : line 80,260,560,260 : line 80,290,560,290 : line 80,320,560,320 : line 80,350,560,350 : line 80,380,560,380/**/ color 255,255,255 : pos 230,420 : button goto "もっかい",*hajime : pos 330,420 : button goto "終わる",*eend objsel 0 : ; これが無いと2回目以降にinputボックス内に入力カーソルがデフォで出ない。 *bgmm if bgm=1 : mmplay 3 : mmplay 1 : bgm=2 : return stop *eend end stop



この記事に返信する


ねんねこ

リンク

2024/10/19(Sat) 19:58:10|NO.102414

ファイル系命令は、WEBからは使えないので、ランキングを作りたいなら、
「別途PHPが動くサーバーを用意して、HSP3DISHからリクエストを送る」
しかないですね。



うみうさぎ

リンク

2024/10/19(Sat) 20:17:42|NO.102415

ファイル系命令とはメモ帳に保存とか読み込みということですよね?
一応エックスサーバーを契約していてそこにホームページのHTMLファイルを置いています。
同じ場所にHSPのデータとランキングデータ保存用のメモ帳を置いておいても
読み込んでくれないということですか?



MIZUSHIKI

リンク

2024/10/23(Wed) 01:28:55|NO.102440

>ゲームを閉じてもランキングが残るようにメモ帳に保存したいですが
>1項目しか保存されません。

原因は、冒頭の配列初期化の勘違いです。

sdim ranks,10 ;ここの数字がランキングの順位数となる
ここで要素10の文字列型配列を用意したつもりだと思いますが、要素数の指定は第3パラメータなのでこれでは要素数は1つのままです。
なので、保存処理の「foreach ranks」で1回しかループせず、1項目しか保存されないようになってしまっています。

foreach ranks ranks(cnt)=str(hiscore(cnt)) ;数値を文字列に変換 loop arraysave "score.txt",ranks ;ランキングを表示する前に保存


>>うみうさぎ さん
>>最終的には名前も入力できるようにして、HSP3 DHISHを使ってホームページ上で
>>動くようにしたいと思っています。
>ねんねこ さん
>ファイル系命令は、WEBからは使えないので、ランキングを作りたいなら、
>「別途PHPが動くサーバーを用意して、HSP3DISHからリクエストを送る」

宣伝になってしまいますが、ezlocal-dish-jsというモジュール内に「phpを介してサーバ上でのテキスト保存/読込を簡易的に行うmod_ezphp.hspを同梱」しております。
こちらを使うと下記のようなスクリプトでサーバ上にテキストを保存/読込することができます。
(※ テキストのみです。arraysaveのように配列丸ごとはできません。)

#include "hsp3dish.as" #include "ezlocal-dish-js.hsp" ezLocalJS #include "mod_ezphp.hsp" data="" ezphpload "data.txt", data ; テキストデータ読み込み (成功:stat=1) // ボタン類 pos 10,10:objsize 210,25: button gosub "ランダムテキスト生成&保存", *save pos 240,10:objsize 60,25: button gosub "リセット", *reset randomize log = "読み込みデータ: \n" + data + "\n" *main redraw 0 : color 220,220,220 : boxf : color 0,0,0 pos 0, 50 mes log redraw 1 await 1000/60 goto *main *save // テキストデータ保存 (追記) rndText = "1234567890" : repeat strlen(rndText) : poke rndText,cnt,'A'+rnd(26) : loop rndText = "テキスト"+rndText ; 生成したランダムテキスト data += rndText + "\n" ; dataに追記 ezphpsave "data.txt", data ; テキストデータ保存 log += "「" + rndText + "」保存。\nブラウザをリロードしてみてください。\n" return *reset // テキストデータ保存 (リセット) data = "" ; data空欄 ezphpsave "data.txt", data ; テキストデータ保存 log += "データ削除。\nブラウザをリロードしてみてください。\n" return
◆ HSP3Dish.js 上記サンプルの稼働ページ
https://suwa.pupu.jp/HSP/sample/ezphpsave/savesample.html

■ ezlocal-dish-jsモジュール
https://suwa.pupu.jp/HSP/index.html#ezlocalDishJs
https://hsp.tv/play/pforum.php?mode=all&num=102058


ただ、
>>最終的には名前も入力できるようにして、HSP3 DHISHを使ってホームページ上で
>>動くようにしたい
ということですが、HSP3Dish.js は 通常のHSP3 と違って使用できない命令があったりredrawしないと画面に表示されないなど様々な差異があります。
https://www.onionsoft.net/hsp/v37/doclib/hsp3dish_prog.htm#DRAWDIFF
https://www.onionsoft.net/hsp/v37/doclib/support_cmds.txt

まずはHSP3Dish.jsで希望通りの動作が行えるか確認するところから始めると良いと思います。



うみうさぎ

リンク

2024/10/23(Wed) 10:17:04|NO.102444

 ありがとうございます!解決の糸口が見えました!
些細なミスに気づけずお恥ずかしい限りです(^^;)

 テキスト保存したデータをWEBブラウザ上で使用可能なのかどうかについては
ネット上で全く手がかりが見つけられず、現状の方法で進んでいていいのかも不安だったので
こちらについても有用な助言をいただく事ができ大変感謝しております。
ezlocal-dish-js使ってみたいと思います!
ありがとうございました!

 HSP3Dishの教本も先日購入しもうすぐ届くようなので、読みながら
ブラウザ上での動作確認もしていきたいと思います。

行き詰まっていたのでとても助かりました!
MIZUSHIKI様本当にありがとうございました!

ねんねこ様もご指摘ありがとうございました!



zakki

リンク

2024/10/23(Wed) 17:38:16|NO.102453

ランキング用のサーバーアプリケーションを開発する以外の方法だとHSPの命令でファイルIOやHTTPアクセスする代わりに、
Firebaseみたいなサービスを使ってexecでJavaScriptで実装した関数を呼び出すって手もあります。

サーバーの開発や管理が楽になる代わりに、ゲーム側がHSPで完結しないのが難点ですね。

https://firebase.google.com/codelabs/build-leaderboards-with-firestore?hl=ja#0
https://qiita.com/kaku3/items/ce3a84424026cb46b226



うみうさぎ

リンク

2024/10/23(Wed) 21:59:16|NO.102455

zakkiさんありがとうございます!
いただいたURLを一通り見てみましたがJavaScriptがわからないので
サッパリでしたw

それでも他の方法や選択肢があることは分かりました!
ありがとうございます!
もしezlocal-dish-jsで上手くいかなかった場合はそちらも
試してみたいと思います!



MIZUSHIKI

リンク

2024/10/26(Sat) 15:37:23|NO.102473

> うみうさぎ さん
> ezlocal-dish-js使ってみたいと思います!

申し訳ございません。
Ver.2.3 までの ezphp.php に、セキュリティに関する脆弱性があることがわかりました。
もし既に Ver.2.3 を使用して頂いている場合は、Ver.2.4 に更新して頂けますようお願い致します。

詳細は下記スレッドにて説明をしておりますが、簡単に述べますと ezphpsave, ezphpload がsaveフォルダ内にしかファイルの読み書きをできなくさせております。
ご面倒をお掛けしますが、ご対応の程をよろしくお願い致します。

■ ezlocal-dish-js Ver.2.3以前 をお使いの方へ
https://hsp.tv/play/pforum.php?mode=all&num=102472



うみうさぎ

リンク

2024/10/27(Sun) 15:12:03|NO.102480

Ver.2.4 への更新了解です!
使用する際には気をつけたいと思います☆

ちなみにハイスコアのテキストファイルへの読み書き、ソートはできたのですが
ランキングのプレイヤーネームは数値でないので
ソートできないということに気づいたのですが、
みなさん普段どうやってるのでしょうか?



MIZUSHIKI

リンク

2024/10/28(Mon) 00:12:51|NO.102483

> ランキングのプレイヤーネームは数値でないのでソートできない
スコアランキングならスコア順で表示すればよく数値順でソートできれば良いのでは?
まぁそれはともかくとして、簡単にテキスト順にソートするのなら sortstr が使えそうです。
上記のどちらでもなくテキスト化したスコアをソートしないといけない、と思ったのなら一旦 int(score) で数値化して配列に入れなおせば sortval が使えます。
そのスコアをソートした結果を元にプレーヤーネームも追随させる方法は NO.102413 のスクリプトでも使われている通り sortget が使えると思います。



うみうさぎ

リンク

2024/10/28(Mon) 20:52:12|NO.102486

丁寧にありがとうございます!
アドバイス大変感謝しております!

> そのスコアをソートした結果を元にプレーヤーネームも追随させる方法は NO.102413 のスクリプト
> でも使われている通り sortget が使えると思います。

やっぱりそうなんですね、、
それで試しているんですがなかなかうまくいかず、、
難渋しております

そもそも
inputしたプレイヤーネームを.txtに羅列させる時点で上手くいかず
1個は保存できてるのになんでだろう、、
己のポンコツぶりが悲しいです、、(ノД`)シクシク



MIZUSHIKI

リンク

2024/10/29(Tue) 04:01:56|NO.102489

>> でも使われている通り sortget が使えると思います。

>それで試しているんですがなかなかうまくいかず、、

hsp36\sample\new35\sortval.hsp に sortget を使ったサンプルがあります。
(見つけ方は「sortget」にカーソル合わせてF1ヘルプを出したら「サンプル逆引き」を一通り確認する。)

一応、似たように書くとこんな感じです

num = 20 // 適当な名前とスコア付け repeat num score(cnt) = rnd(1000)+1 name(cnt) = "name_X" : poke name(cnt),5,65+cnt mes ""+name(cnt)+" : "+score(cnt) loop sortval score, 0 ; scoreを数値順でソート pos 150,0 repeat num sortget c, cnt ; score(sortvalした変数)のcnt番目はソート前は何番目に入ってた? mes ""+name(c)+" : "+score(cnt) ; name配列はソートせず追随するための番号(c)だけ利用する loop

> inputしたプレイヤーネームを.txtに羅列させる時点で上手くいかず

これは具体的な記述がないので理由は推測できませんが、

> 1個は保存できてるのになんでだろう、、

ezphpsave や notesave などのテキスト保存命令に対して、arraysave と同じ要領で配列変数を指定してしまっていませんか?
テキスト保存命令は改行文字列としての1つのテキストでしか保存できません。
下記は一例ですが、配列は改行テキストに置き換える工夫をして利用する必要があります。

notesel saveText foreach score sortget c, cnt saveText += ""+ score(cnt) +","+ name(c) +"\n" loop notesave "data.txt"
取り出すときも一工夫必要です。

notesel loadText noteload "data.txt" repeat notemax noteget temp, cnt split temp, ",", scoreText, nameText score(cnt) = int(scoreText) : name(cnt) = nameText loop



うみうさぎ

リンク

2024/10/29(Tue) 12:42:19|NO.102495

神対応本当に感謝感激です!!(ToT)

> (見つけ方は「sortget」にカーソル合わせて
> F1ヘルプを出したら「サンプル逆引き」を一通り確認する。)

こういう風に使うものだったんですね(^_^;)
めちゃ非効率な調べ方してましたありがとうございます!


テキスト保存についても完全にこれが原因だと思います!
断片的情報から名探偵コナンすぎます!
ありがとうございます!

これでまた調べて組み込んで見ようと思います!
ご助力大変ありがとうございました!m(*>_<*)m希望が見えました!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.102413への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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