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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1119
ゆにふぁいソースの短縮。6解決


ゆにふぁい

リンク

2014/11/19(Wed) 11:21:10|NO.66095

たとえば、財宝をランダムにみつける仕様にしたとして。
「treas=0」ならば「なにもみつからない。」
「treas=1」であれば「6ゴールドを発見。」
みたいにしたいのですが、下記のようなソースしか思いつきません。


*treasurea_0 treas = rnd(6) treasureas = 1 return *treasurea_1 if treas = 0:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "なにもみつからない。" if treas = 1:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "6ゴールドを発見。" if treas = 2:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "12ゴールドを発見。" if treas = 3:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "24ゴールドを発見。" if treas = 4:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "36ゴールドを発見。" if treas = 5:pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16:mes "40ゴールドを発見。" serch_mes-- if serch_mes = SCREEN_HEIGHT-118:treasureas = 2:serch_mes = SCREEN_HEIGHT-88 return *treasurea_2 if treas = 1:gld+6 if treas = 2:gld+12 if treas = 3:gld+24 if treas = 4:gld+36 if treas = 5:gld+40 treasurea_count++ if treasurea_count >= 10{ serchs = 3 }else{ serchs = 2 } treasureas = 0 return

これだと、100アイテムあったら最低でもその行数のコードを書かないといけないわけで。
なんとか、短縮できる方法はありませんでしょうか?



この記事に返信する


b

リンク

2014/11/19(Wed) 11:35:13|NO.66096

金額はdim、メッセージはsdimで配列で持たせてから
treasの条件式の部分をrepeatとloopで繰り返せばできるのでは。



ゆにふぁい

リンク

2014/11/19(Wed) 11:46:13|NO.66097

>bさん

レスありがとうございます。
配列とrepeat、loopを調べてみたのですが、何がなにやらさっぱりわからなくなってしまいまして。
飲み込みが悪い私にも参考になるサイトとかございませんでしょうか?



b

リンク

2014/11/19(Wed) 12:02:50|NO.66098

標準のHSPのエディタでF1キーを押すと、ヘルプ画面が開きます。
そこでdim、sdim、repeatを検索すると、
すぐ試せるサンプルスクリプトがあると思いますので、
それを見てみるとわかるかもしれません。



zero

リンク

2014/11/19(Wed) 16:32:37|NO.66105

treasが0〜6以外の値を取らないという条件下で、
配列を上手く使えばソースは短くなります。

golds = 0, 6, 12, 24, 36, 40 *treasurea_0 treas = rnd(6) treasureas = 1 return *treasurea_1 pos SCREEN_WIDTH-SCREEN_WIDTH+12,serch_mes:color 255,255,255:font "",16 if treas == 0 : mes "なにもみつからない。" : else : mes "" + golds(treas) + "ゴールドを発見。" serch_mes-- if serch_mes = SCREEN_HEIGHT-118:treasureas = 2:serch_mes = SCREEN_HEIGHT-88 return *treasurea_2 gld+golds(treas) treasurea_count++ if treasurea_count >= 10{ serchs = 3 }else{ serchs = 2 } treasureas = 0 return



あきまさ

リンク

2014/11/19(Wed) 18:03:53|NO.66109

配列はこんなふうに数字で名前などを記録できる機能です。
セーブデータはアイテムIDをセーブし、名前が必要な場面で配列に名前を問い合わせて名前を表示します。
アイテムIDは数字ですので、0-100のうち50まではアイテムID、それ以上は手に入らなかったなどで確率を調整すれば、一度の判定だけで複数のアイテム取得判定を一度に行えます。

Randomize;乱数リセット
sdim ItemName,8,4;配列作成
ItemName(0) = "木の剣";配列に名前を入れる
ItemName(1) = "石の剣"
ItemName(2) = "鉄の剣"
ItemName(3) = "ダイヤの剣"
treas = rnd(6)
if treas <= 3{
GetItemName = ItemName(treas);ItemName内のtreasの数値の文字列を取得する。
}else{
GetItemName = "なにももらえなかった。"
}
mes GetItemName



ゆにふぁい

リンク

2014/11/19(Wed) 23:38:47|NO.66114

>bさん

ありがとうございます。
サンプルを良く見直しながら理解を深めるよう頑張ります。

>zeroさん

なるほど!こんな使い方ができるんですね。
ありがとうございます。参考にさせて頂きます!

>あきまささん

sdimの使い方が腑に落ちました!
これは便利ですね。
ありがとうございます。参考にさせて頂きます!



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