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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0925
ブルーンRPGやシュミレーションなどでのアイテム(道具)の管理について16未解決


ブルーン

リンク

2015/9/25(Fri) 11:12:57|NO.71930

プログラムを作ってて、できそうなできそうじゃないような状態です。
話につきあってくれる方よろしくお願いします。


疑問がでてきました。

疑問1、アイテム(道具)の管理について
本にのってなくて困ってます。
道具システムとか買い物システムって重要だと思うんですよ
本にのってないのはなんでなんしょうか?(私だけ思ってる?)

例えば、

やくそう     \50(原価) \80(売値) 10個(在庫数)
どくけしそう  \100(原価) \150(売値) 10個(在庫数)

を管理するときにメインループの前で定義するのでしょうか?
それと、きっと配列に入れると思うのですが
どうやって定義するのが理想でしょうか?
また、複数で考えてる理由はやくそうだけで組んでたときに
複数になったらどうなるのか検討がつかなかったからです。

2、経営での営業ボタン後の処理

売るって処理はどうしたらいいのだろうと頭を考えています。
たとえば、
思いつくのは
randomize 
handan = rnd(3)として ランダムに0,1,2が出ると思うんですけど

0がでたときに売る 確率は33%です。

お客一人あたりの確率だとして、高いとは思いますがそれは調節するというかんじで
あとは、評判度とかで影響をうけたりとか

こういう考え方であってるかという疑問です。
プログラミングに正解はないのかもしれないんですが、考え方は正しいか教えてもらいたいです。


3.エラーがでてしまって
mes item(0) "+【在庫数(+" item(3) "+)】"
きっとこれだと思うんですけど、どこが間違ってるのかイマイチわかりません。


****************************************************************************
screen 0,680,480
money =500

dim item,4 ;薬草の情報
item(0) = "やくそう"  ;商品名
item(1) = 50     ;原価
item(2) = 80 ;売値



*MainLoop

cls

button "営業",*EIGYOU
button "仕入れ",*SIIRE

pos 100,0
mes "\\" + money
mes "<<在庫一覧>>"
mes item(0) "+【在庫数(+" item(3) "+)】"

stop

*SAVESTART

*OWARI
end


*EIGYOU


*SIIRE

cls
mes "【最大在庫数99個】"
mes "やくそう:\\50"
input YAKUSOU,40,20,3
button "購入",*HANDAN
stop

*HANDAN
if item(3) + YAKUSOU < 100 & money >= YAKUSOU * item(1){
item(3) += YAKUSOU
money = money - (YAKUSOU * item(1))
dialog "購入しました!!",0,"購入成功"
}
else{
dialog "購入できません",2,"購入失敗"

}

goto *MainLoop 




 チェックしてやるよって方、スカイプ教えていただけませんか?



この記事に返信する


kanamaru

リンク

2015/9/25(Fri) 12:22:46|NO.71932

+の位置が少しずれていますね。

mes item(0) "+【在庫数(+" item(3) "+)】"

mes item(0) +"【在庫数("+ item(3) +")】"

こう直してみてください。



ブルーン

リンク

2015/9/25(Fri) 12:42:34|NO.71933

>>kanamaruさん
ありがとうございます!
なおりました。

item(0) = "やくそう"

いれてるんですけど、
dim だとやっぱり文字列は入れられないみたいでそこでエラーがでてしまいました。



kanamaru

リンク

2015/9/25(Fri) 12:45:57|NO.71934

今できる限り修正しています。
お待ちください。



スペース

リンク

2015/9/25(Fri) 14:02:31|NO.71935

こんな感じでどうでしょうか?

screen 0,680,480 money =500 アイテム数=4 sdim item_Name,100,アイテム数;アイテムの表示名のみ。 dim item_Money,アイテム数,2 ;アイテムの価格情報。1次配列に原価、2次配列に売値を入れます。 item_Name(0) = "薬草" ;商品名 item_Money(0,0) = 50 ;原価 item_Money(0,1) = 80 ;売値 item_Name(1) = "毒消し" ;商品名 item_Money(1,0) = 100 ;原価 item_Money(1,1) = 120 ;売値 item_Name(2) = "復活石" ;商品名 item_Money(2,0) = 200 ;原価 item_Money(2,1) = 300 ;売値 repeat アイテム数 pos 10,cnt*30:mes "アイテム名:"+item_Name(cnt)+" 原価:"+item_Money(cnt,0)+" 売値:"+item_Money(cnt,1)+"" loop



ブルーン

リンク

2015/9/25(Fri) 15:22:47|NO.71938

>>スペースさん
ありがとございます!
こういう感じにすればいいんですね


また一つ疑問なんですけど
たとえば、pos で画像置いたりとかしてデザインするじゃないですか
あれは地道に実行して調節するしかありませんよね?



kanamaru

リンク

2015/9/25(Fri) 16:12:23|NO.71941

すでに解決策がわかっているようですが、
エラーが直せなかったですが、

/**************************************************************************/ #module kanri name,bprice,aprice,num #modinit str _name,int _bprice,int _aprice,int _num name=_name bprice=_bprice aprice=_aprice num=_num return #modcfunc get int number if(number=0):return name if(number=1):return bprice if(number=2):return aprice if(number=3):return num #modfunc set str n,int b,int a,int number2 name=n bprice=b aprice=a num=number2 return #global screen 0,680,480 money =500 newmod item,kanri,"やくそう",50,80,0 *mainloop cls button "営業",*EIGYOU button "仕入れ",*SIIRE pos 100,0 mes "\\" + money mes "<<在庫一覧>>" mes get(item,0) +"【在庫数("+ get(item,3) +")】" stop *SAVESTART *OWARI end *EIGYOU *SIIRE cls mes "【最大在庫数99個】" mes "やくそう:\\50" input YAKUSOU,40,20,3 button "購入",*HANDAN stop *HANDAN if (get(item,3) + YAKUSOU < 100) and (money >= YAKUSOU * get(item,1)){ set get(item,0),get(item,1),get(item,2),get(item,3)+YAKUSOU money = money - (YAKUSOU * get(item,1)) dialog "購入しました!!",0,"購入成功" } else{ dialog "購入できません",2,"購入失敗" } goto *mainloop
はどうでしょうか?
newmodを追加すれば簡単にアイテムを追加できます。
(エラーがあるけど)
それと、画像の位置は地道に頑張ってください。



スペース

リンク

2015/9/25(Fri) 16:36:51|NO.71942

>>ブルーンさん
基本的にはそうですね。
自分はいつもペイントツールで適当に図形を使ってレイアウトを決め、
それを元にposで位置を決めています。0から手探りで調整するよりは楽かと。



Noap

リンク

2015/9/25(Fri) 17:17:58|NO.71945

kanamaruさん、ヘルプに#modfuncで定義した命令はモジュール型の変数をつけて呼び出すようにかいてあります。
具体的には「set 変数名,なんとか」のようにすればいいです。
的外れであればすみません。
わたしはスペースさんの方法が単純明快でわかりやすいと思うのでおすすめします。



kanamaru

リンク

2015/9/25(Fri) 18:19:35|NO.71948

noapさん、ありがとうございました。
おかげでエラーが直りました。
これできちんと動くようになったわけですが、
スペースさんのと僕の。
どっちがいいですか?
僕のほうが長いけど、スペースさんのより変数は一個へり、
スペースさんのは短いけど、僕のより変数が多い。
また、言い換えると、僕の方法はアイテムの情報をまとめて取り扱えて、
スペースさんの方法だとひとつのアイテムに対して二つの分けて管理している。
このように比べると、僕のほうがいいと思うんですが。



Noap

リンク

2015/9/25(Fri) 18:22:36|NO.71949

確かにどちらにもいい点があるのでまよいます



窓月らら

リンク

2015/9/25(Fri) 18:51:20|NO.71951

アイテム管理をする場合、データ構造をできるだけシンプルに考えます。
アイテム名,パラメータ,属性(フラグ) など。

私は別にツールを作ってバイナリで書き出してデータファイルを作りますけど
最初のうちは、コードに直接書く方法(配列)をおすすめします。



チャーくん

リンク

2015/9/25(Fri) 19:00:06|NO.71952

内容とは関係ないですが、
シュミレーションではなくて
シミュレーション。
…って前何かのCMでありましたね…



Noap

リンク

2015/9/25(Fri) 19:01:56|NO.71953

わたしにいえるのは

なるべくシンプルなほうが間違えにくい

データ管理の効率がよくなる(配列ならそのまままとめて暗号化してファイルに保存したりできる)

hsp3dishはhsp3cnvがモジュール変数にHSP3.4の時点では対応していないので
スマートフォンに移植したくなった場合書き直さなければならなくなる


この程度です。
何かおかしい点があればごめんなさい。

参考 http://www.onionsoft.net/hsp/v34/doclib/hsp3cnv.txt



ブルーン

リンク

2015/9/25(Fri) 20:36:12|NO.71955

kanamaruさんのは理解できたら
簡単にできそうですね
私は配列で考えていたのでわかりやすさでいったら
スペースさんのがわかりやすいですね

ちゃんと理解できてないので、もしアイテムが増えてきたら
問題点がでてきたりとか、自分の頭にある感じを表現するのに
てきしてるのかはわかりませんね



ブルーン

リンク

2015/9/25(Fri) 20:42:49|NO.71956

できたら、新しい命令いれられてしまうとわからなくなってしまうんで

説明がほしいです。

調べて、説明読んでも理解できないんで



窓月らら

リンク

2015/9/25(Fri) 20:46:21|NO.71957

知ってるとは思いますが、
知らない命令や関数が出てきたら、その上にカーソルを合わせてF1を押す。
これで1つずつ覚えていってください。今は分からなくても頭に入れます。



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