持っているアイテムを選択肢にしたい(質問掲示板

投稿:   1 mini 闇さん 投稿:2011/12/24 12:45:24(最新:2011/12/29 20:00:29)
やりたいことは
回復薬  ×1
回復薬Ⅱ ×2
回復薬Ⅲ ×1
持っていたとき
選択メッセージで
回復薬
回復薬Ⅱ
回復薬Ⅱ
回復薬Ⅲ

どのアイテムを使いますか

ではなく
回復薬 ×1
回復薬Ⅱ ×2
回復薬Ⅲ×1

どのアイテムを使いますか

と表示させたいときどうすればいいですか

コメントする

コメントするには、ログインする必要があります。

コメント一覧

  1 mini 闇さん(投稿日:2011/12/29 20:00, 履歴)
タクミ2310号さん
次からできる限り自分で考えてみます

とりあえず
回復薬 
 回復薬Ⅱ 
 回復薬Ⅲ

と表示するところまでできました
User icon mini 退会したユーザー(投稿日:2011/12/29 16:32, 履歴)
意外に難しかったけど、なんとかできました。
ちょうどこういった情報が必要だったので、参考になりました。

>闇龍神さん
何事においてもケアレスミスは痛い。
ケアレスミスをしたらすぐに気づいて自分で直せる、
ぐらいまでいかないと、こういった応用問題は解けないのでは?
と僕は思うのです。
分からないと言えば解決すると思ったら大間違いですよ。

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/28 09:50, 履歴)
まず1つめ、
処理が1行に混ざっています
d[n]=b[n]+"番のアイテムが"+c[n]+"個。"n=n+1


#修正後
d[n]=b[n]+"番のアイテムが"+c[n]+"個。"
n=n+1



2つめ、
speakWithSelectArray関数は2つしか引数がないのに
4つも設定しています。

speakWithSelectArray関数の引数は
1つめが選択肢の文字が入っている配列変数、
2つめが表示するメッセージです。


配列については
こちらをよく参照していただけましたら幸いです。
配列とは
第04回 敵キャラクターを登場させる

case speakWithSelectArray(d+1,d,"やめる","どれを使う?")


#修正後
d[n]="やめる" #ここで配列dに"やめる"を追加する
case speakWithSelectArray(d,"どれを使う?")



繰り返しとなりますが、
いずれも初歩的な間違いです。

分からないまま利用するのではなく、
キーワードや関数名で検索するだけでも
様々な情報がでてきます。

よく調べて「理解してから」利用してみましょう。
  1 mini 闇さん(投稿日:2011/12/28 01:11, 履歴)
a=getItemIdArray()
b=createArray()
b[0]=a[0]
c=createArray()
d=createArray()
n=0 #まずは所持配列aから各1個ずつの配列bを作成
while
 n<getArrayLength(a)
 m=0
 judge=true
 while
 m<getArrayLength(b)
  if a[n]==b[m]
   judge=false #ダブりを発見したらフラグ変更
  end
 m=m+1
 end
 if judge #フラグが残ってる=ダブり無しなので加える
 pushArray(b,a[n])
 end
n=n+1
end
n=0 #今度はそれぞれをいくつ持ってるのか数える
while
 n<getArrayLength(b)
 m=0
 i=0
 while m<getArrayLength(a)
  if b[n]==a[m]
   i=i+1
  end
 m=m+1
 end
 c[n]=i
 d[n]=b[n]+"番のアイテムが"+c[n]+"個。"n=n+1
end
speak("a=",a,"\nb=",b,"\nc=",c,"\nd=",d)
g=0
case speakWithSelectArray(d+1,d,"やめる","どれを使う?")
 when 0
else
 end

いろいろ間違っているのはわかりますが
どう直したらいいのかわかりません
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/26 15:31, 履歴)
エラー番号1034 null

Error一覧
つまり、配列関連のエラーですね。

これを見せられても
やはり想定通り、としか。。。
  1 mini 闇さん(投稿日:2011/12/26 14:18, 履歴)
http://rmake.jp/games/11572/limited_play
ID yami
PW ryuu
いまこんな状況です
Nyan mini rurun9(投稿日:2011/12/26 00:41, 履歴)
ん?
選択肢配列dを苦労して作ったのだから
case speakWithSelectArray(d,"どれを使う?")
when 0
#うんたらかんたら
end
てやるだけですよ
最初にそーする、て書いたじゃないですか

アイテム名の表示の仕方はリンクまで貼られたら流石にワカルでしょう
  1 mini 闇さん(投稿日:2011/12/25 17:51, 履歴)
もう何がなんだかわからなくなりました
最悪 選択肢+持っているかの判定だけにしようかまよっています
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/25 16:24, 履歴)
getItemParamWithId関数は
アイテム情報の配列を返します。

配列データを文字として
表示しようとしているため
「null」となります。

対象のアイテム情報の配列から
必要な情報を取り出す場合、
getValueFromItemParam関数を使用します。


リファレンスをしっかりと読んで
理解してから利用しましょう。

getItemParamWithId関数

getValueFromItemParam関数
  1 mini 闇さん(投稿日:2011/12/25 16:10, 履歴)
直してみたらフリーズしました
エラー文なし
User icon mini 退会したユーザー(投稿日:2011/12/25 15:30, 履歴)
if d[g]==7910||7911||7912||7913||7914

これってありなのか・・・?
  1 mini 闇さん(投稿日:2011/12/25 15:27, 履歴)
giveItem(7913)
giveItem(7911)
giveItem(7911)
a=getItemIdArray()
b=createArray()
b[0]=a[0]
c=createArray()
d=createArray()
n=0 #まずは所持配列aから各1個ずつの配列bを作成
while
 n<getArrayLength(a)
 m=0
 judge=true
 while
 m<getArrayLength(b)
  if a[n]==b[m]
   judge=false #ダブりを発見したらフラグ変更
  end
 m=m+1
 end
 if judge #フラグが残ってる=ダブり無しなので加える
 pushArray(b,a[n])
 end
n=n+1
end
n=0 #今度はそれぞれをいくつ持ってるのか数える
while
 n<getArrayLength(b)
 m=0
 i=0
 while m<getArrayLength(a)
  if b[n]==a[m]
   i=i+1
  end
 m=m+1
 end
 c[n]=i
 d[n]=b[n]+"番のアイテムが"+c[n]+"個。"n=n+1
end
speak("a=",a,"\nb=",b,"\nc=",c,"\nd=",d)
g=0
while g<5
if d[g]==7910||7911||7912||7913||7914
r[g]=getItemParamWithId(b[g])
g=g+1
end
end
case speakWithSelect(6,r[0],r[1],r[2],r[3],r[4],"やめる", 
    "どのアイテムを使いますか")
  when 0
    
  when 1
    
  when 2
    
  when 3
    
  when 4
    
  when 5
    
end

がんばってみましたが
選択肢が全てnullになります
  1 mini 闇さん(投稿日:2011/12/25 01:19, 履歴)

分かりやすい説明ありがとうございます
Nyan mini rurun9(投稿日:2011/12/25 01:09, 履歴)
あー思ってたよりもややこしくて、ワケわからんねw

とりあえずランダムでアイテムをくれる人を用意
case speakWithSelect(2,"ひとつもらう","リセット","どーする?")
when 0
 case rand(3)
 when 0 giveItem(5142) #番号は自分で用意したのに変えてね
 when 1 giveItem(7493)
 when 2 giveItem(2029)
 end

when 1
 n=0; a=getItemIdArray()
 while n<getArrayLength(a)
  removeItemWithIndex(0)
 n=n+1
 end

end
んでコレが本体
a=getItemIdArray()
b=createArray(); b[0]=a[0]
c=createArray()
d=createArray()

n=0 #まずは所持配列aから各1個ずつの配列bを作成
while n<getArrayLength(a)
 m=0; judge=true
 while m<getArrayLength(b)
  if a[n]==b[m]
   judge=false #ダブりを発見したらフラグ変更
  end
 m=m+1
 end
 if judge #フラグが残ってる=ダブり無しなので加える
  pushArray(b,a[n])
 end
n=n+1
end

n=0 #今度はそれぞれをいくつ持ってるのか数える
while n<getArrayLength(b)
 m=0; i=0
 while m<getArrayLength(a)
  if b[n]==a[m]
   i=i+1
  end
 m=m+1
 end
 c[n]=i
 d[n]=b[n]+"番のアイテムが"+c[n]+"個。"
n=n+1
end

speak("a=",a,"\nb=",b,"\nc=",c,"\nd=",d)
アイテムのID番号(b[n])からアイテムパラメータを取得してアイテム名を表示する、てのはリファレンス見ればできる筈
  1 mini 闇さん(投稿日:2011/12/24 15:17, 履歴)
a=getItemIdArray()
n=0
b=0
while n<9999
if ! a[n]==b
a[n]=d
pushArray(b,d)
end
n=n+1
end

こんな感じですか
  1 mini 闇さん(投稿日:2011/12/24 14:50, 履歴)
rurun9さん
やってみます
Nyan mini rurun9(投稿日:2011/12/24 14:30, 履歴)
持ち物配列aを元にして、表示させたい新配列bをつくる
aをインデックス0から順に調べて、bに含まれていない項目だけをpushArray()でbに次々と追加

同時に、それぞれの個数を数える配列cも用意しておき、ダブったときに個数を1ずつ増やしておく

品目と数が用意できたなら、選択肢配列dをつくる
コレはbとcを文字列で合体させて「なんとか×n個」にするだけ
んでspeakWithSelectArray()を使うと完成