コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ナカジマ ◆DSpvksQCyRZC
2019/1/17 21:51
質問
アイテム管理
RPGなどで使うような、アイテム欄の作成をしています。
二年くらいずっと考えていますが、難しくてあまり思うように進んでいません。

やりたいことは、
・アイテムにカーソルを合わせるとそのアイテムの情報が見ることができる

・アイテムを使用するとそのアイテムの効果が適応される

・アイテムを消費してゼロになるとアイテム欄から消え、消えた部分の空白が埋められる

基本的な命令は大体使えます。
どなたかアドバイスをお願いします。

もし丁度いいプログラムがございましたら、公開キーを載せていただけるととてもありがたいです。

コメント

アバター
say 2019/1/18 0:53 ◆1nbKtD/tFu04
こうかな?
アバター
初心者 2019/1/18 17:50 ◆ULvuffpmw1rp
ややこしいよね…
配列の状態を紙に書くとか、
2次、3次配列などを使うのはいかが?
ちなみに僕はいつも
X=アイテムのデータ[選択[a]]
みたいな感じにしてます。
IF X==0 結果

アバター
ナカジマ 2019/1/18 18:57 ◆DSpvksQCyRZC
say 様、初心者 様、ご回答ありがとうございます!返信が遅くなってごめんなさい。アドバイスを参考にして、再び考えてみようと思います。
アバター
でんぺん 2019/1/18 21:49 ◆HfSy5ayxtyTa
この手のは基本は配列を使う感じになると思うけど配列はマスターしているのかな?
他にも自分はこう考えてこうやった、みたいな話があるとアドバイスがしやすいと思うので、自分の意見(やり方)も積極的に話したりプログラムを載せたりするといいと思います。
アバター
あきと 2019/1/19 2:41 ◆qGd5dQw2g3a2
RPGのアイテムリストの表示を行うサンプルを作ってみました。
公開キー【2JNQE3G4】ファイル名「ITEMLIST」
サンプルと言っても250行ある結構ガッツリとしたプログラムです。
アイテムリストが表示されて画面下にはそのアイテムの説明が表示されます。
アイテム名とその説明はソースコードの下の方にDATA文で記述しています。
上下でカーソル移動とスクロール。Xを押すと上から2番目の位置のアイテムが5個ずつ減ります。0個になるとリストは詰まります。
アバター
あきと 2019/1/19 2:47 ◆qGd5dQw2g3a2
「アイテムを使うとその効果が…」という点はリスト決定の後に組むものなので実装してません。

アイテム名配列:ITEM$
アイテム説明文字列:ITEM_EXP$
実際所持しているアイテムの配列:ITEMLIST[100,2]
リスト表示処理用ワーク:WWORK[8]
などを見てもらうといいかも。

もっと汎用的に書けると思うのですがどうしても決め打ちな箇所が出て来ますね…
アバター
まるだい 2019/1/19 16:06 ◆AdwyE6qhnxpV
アイテムを使ったらその要素のアイテムを""にし、
SORTして""を端っこに持ってきて
SHIFT()かPOP()でその要素を消せばいいかな
(アイテム情報も同じように)
アバター
ナカジマ 2019/1/19 22:01 ◆DSpvksQCyRZC
でんぺん様、あきと様、まるだい様、ご回答ありがとうございます。
マスターとまでは言いませんが、配列の構造についてはある程度理解しているつもりです。
私が考えたものとしては、

dim item$[999]
n=所持アイテム数

for i=0 to n
x=rnd(n) 'テストなのでランダムにぶち込んでます
restore “@itemname”+str(x)
read name$
item$[i]=name$
? item$[i]
next

@itemname0:data “アイテム1”
@itemname1:data “アイテム2”
……

という感じです。
説明が苦手なのでちょっと分かりにくかったかもしれません。
ここまではいいのですが、質問にあげた通りのところまでは出来ず。

公開キーありがとうございます!大変勉強になります。
アバター
初心者 2019/1/19 22:29 ◆ULvuffpmw1rp
質問にあげた通りのところまでとは、何処まででしょうか?
効果の適応や情報の表示は
IF ボタン()==Aボタン THEN
IF item$[選択]=="アイテムの名前"THEN 効果


ENDIF
みたいな感じにすれば良いのでは?
それともカーソルを動かせないのですか?
何がわかっていて、何がわかっていないかがよく分かりません。
因みに僕は応援してますよ。
アバター
でんぺん 2019/1/19 22:58 ◆HfSy5ayxtyTa
配列やDATAを使っているので、その辺の知識はありそうな感じがありますね。
ラベルを使ってDATAをランダムアクセスしやすいようにしてる感じも見受けられます。

持っているアイテムは文字列のアイテム名にしているようですが、所持しているかどうかの変数とアイテムデータは別で考えるといいですよ。つまり所持しているアイテムの管理としては、たとえばアイテム番号としておいて、
DIM MY_ITEMS[10]
MY_ITEMS[0]=3 '数字はアイテム番号
MY_ITEMS[1]=2
...
アイテムを表示する時はDATAを使い、
FOR I=0 TO 9:
RESTORE "@itemname" + str(MY_ITEMS[I])
READ NAME$:? NAME$
NEXT
みたいなイメージで。あくまでイメージなので完全なコードではありませんが…。
そうすればDATAには名前だけじゃなくてアイテム情報も持たせておいて、
@itemname1:DATA "アイテム1", "アイテム1の効果説明文章"
みたいにしておいて必要な時にアクセスする、なんて事も出来ますよ。

まあちょっと初心者さんがいうように何がわかってないかもわかりにくいので、細かく聞いていくと良いかなとも思います。

あとはプログラム公開キーを載せてくれている人もいるので、その内容をみてわからない事を質問するとかですかね。
アバター
ナカジマ 2019/1/20 0:19 ◆DSpvksQCyRZC
初心者 様
確かに、漠然とした質問だけして何が分かってないかをはっきりさせていませんでした。申し訳ございません。
私がのせたプログラムのように、表示することはできるが、それらにカーソルを合わせてアイテムの情報を見たり使用したりといったことができないというのが現状です。ですが皆様のおかげでだいぶ理解が深まってきました。
あ、応援ありがとうございます!頑張ります(笑)

でんぺん様
詳しい説明ありがとうございます。
アイテムデータと所持しているかどうかの変数は別、ですか……目から鱗です。
配列を理解してから日が浅く、汎用性の高さに「今までちゃんと勉強しとけばよかった」と後悔しています。プチコン歴はそんなに短くないのに分からないことだらけです(笑)
アバター
あきと 2019/1/20 17:57 ◆Bz8zeG7wRHNQ
私のソースでは毎回DATAを参照するのは効率が悪いかなと思って最初にDATA定義した文字列DATAを文字列配列に全て読み込んでいます。
@itemdata
DATA "----","----"
DATA "やくそう","たいりょくをちょっとかいふくする"
DATA "くすり","たいりょくをすこしかいふくする"
DATA "いいくすり","たいりょくをかなりかいふくする"


WHILE 1
READ itemname$[count],item_exp$[count]
IF itemname$[count]=="" THEN BREAK
inc count
WEND

ここで決まるのは1番がやくそうで2番がくすりという番号と名前の関連付けだけですね。
実際に所持しているアイテムはitemlist[100,2]に入れるようにしていて、itemlist[N,0]にはアイテムの定義番号(やくそうなら1)、itemlist[N,1]に持っている個数を入れるようにしました。
itemname$[itemlist[N,0]]で一番上のアイテム名が取得できることになります。

さらに機能を追加するならアイテムの属性定義でしょうか。DATAの3番目の項目を追加して、0なら消費物、1なら装備、2なら捨てられないものとか。
他にもショップで売り買いする時の値段の定義とか。
アバター
ナカジマ 2019/1/21 19:55 ◆DSpvksQCyRZC
あきと様
なるほど!こういうやり方もあるんですね。
アバター
ナカジマ 2019/1/21 19:57 ◆DSpvksQCyRZC
皆様のアドバイスのお陰で、大分ゴールが見えて参りました。大変勉強になりました。ありがとうございます!m(*_ _)m
アバター
ナカジマ 2019/1/22 22:54 ◆DSpvksQCyRZC
公開キー[RHDA473]
頑張って作ってみました。Aボタンで個数が減ります。
一番上のアイテムを選択した時は上手くいくのですが、それ以外のアイテムを選択すると個数がズレ始めます。
アバター
初心者 2019/1/23 7:45 ◆ULvuffpmw1rp
すごい!
これからも頑張ってください!
アバター
ナカジマ 2019/1/23 18:34 ◆DSpvksQCyRZC
初心者 様
ありがとうございます!大変励みになります。

あきと様
アドバイス通りに修正してみると、しっかり動作するようになりました。本当にありがとうございます。

何度も質問するようで申し訳ございません。お忙しければ無視して構いませんが、またひとつ問題が。

IMAXをアイテム数の上限に使わず、何も無い空間には「Empty」と表示するようにしました。
そろそろ実際にゲーム内で使用できるように、「最初は何も入っておらず、ボタンを押すとランダムでアイテムが追加される」というように直しました。
現在、同じアイテムを表示させないようにするプログラムを考えています。

しかし、アイテム欄に存在しているアイテムを追加したときに、
「同じアイテムがアイテム欄に2つ以上存在しないようにしつつ、そのアイテムの数量だけは加算される」ようにしたいのですが、同じアイテムが2つ以上ある事はどのようにして判別するのでしょうか?

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -