リストの作り方(質問掲示板

投稿:   39 mini tomato 投稿:2010/08/15 21:31:15(最新:2010/08/18 12:20:18)
ゲームでよくあるモンスターリストや、アイテムリストを作りたいのですが、いい案が思いつきません。
モンスターを倒したり、アイテムを拾ったら、リストが追加されていくというものを作りたいのです。

具体的に言えば、選択肢メッセージの内容が、取得したフラグかなにかで変化できればいいなと思っています。

どなたか知恵をお貸しください。<(_ _)>

コメントする

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

コメント一覧

  39 mini tomato(投稿日:2010/08/18 12:20, 履歴)
shirosabotenさんありがとうございます!
なんとか自分の中でわかって使えるようになりたいと思います。

お二人とも本当にありがとうございました!
      mini shirosaboten(投稿日:2010/08/16 18:02, 履歴)
なんとそんな作戦でしたか^^;w
半日かかっちゃったけど配列ってかなり便利ですね

いままで使わないで(使えないで)いたのは非常にもったいないです><;
Nyan mini rurun9(投稿日:2010/08/16 16:46, 履歴)
shirosaboten様、仕事早ッ
そんな感じのです、えぇ。
全員を自分と同じレベルまで引き上げれば、必ずこの世界は変わる!作戦ですからw

tomato様、
ヘルプの「スクリプト言語のマニュアル」「関数リファレンス」を辞典としつつ
wikiの「変数」「配列」「つくってみよう0」
あたりを読むと、なんとなーくプログラムの組み方が判ってくるのではないかと思いますよぉ
      mini shirosaboten(投稿日:2010/08/16 15:48, 履歴)
rurun9さんのを参考にモンスターリスト考えてみました
#開始スクリプト
##リストを二次元配列にする
setVariable("monsterlist", createArray())
n = 0
while n < 10
  getVariable("monsterlist")[n] = createArray()
  n = n + 1
end

# getVariable("monsterlist")[n][m]
# n…リスト番号
# m : 0 …true か false
#   : 1 …モンスター名
#   : 2 …説明文

## m : 0 を全てfalseに
i = 0
while i < 5
 getVariable("monsterlist")[i][0] = "false"
 i = i + 1
end
## 各リスト番号のモンスター名と説明文設定
getVariable("monsterlist")[0][1] ="スライム"
getVariable("monsterlist")[0][2] ="スライム:とても弱い生き物"
getVariable("monsterlist")[1][1] ="緑ゼリー"
getVariable("monsterlist")[1][2] ="緑ゼリー:弱い生き物、緑"
getVariable("monsterlist")[2][1] ="青ゼリー"
getVariable("monsterlist")[2][2] ="青ゼリー:やや弱い生き物"
getVariable("monsterlist")[3][1] ="赤ゼリー"
getVariable("monsterlist")[3][2] ="赤ゼリー:あああああああ"
getVariable("monsterlist")[4][1] ="黒ゼリー:あああああああ"
getVariable("monsterlist")[4][2] ="黒ゼリー:あああああああ"

#敵モンスター倒したとき(m:0をtrueに)
## speakの部分を入れない場合は
## getVariable("monsterlist")[0][0] = "true" のみでもok

# スライムを倒したとき
if getVariable("monsterlist")[0][0] == "false"
 speak("モンスターリストに新たな項目が追加された")
 getVariable("monsterlist")[0][0] = "true"
end

# 緑ゼリーを倒したとき
if getVariable("monsterlist")[1][0] == "false"
 speak("モンスターリストに新たな項目が追加された")
   getVariable("monsterlist")[1][0] = "true"
end

# 青ゼリーを倒したとき
if getVariable("monsterlist")[2][0] == "false"
 speak("モンスターリストに新たな項目が追加された")
 getVariable("monsterlist")[2][0] = "true"
end

#以下省略

#図鑑参照時
## 1.選択肢を作る(m:0 = trueの項目だけその名前を配列に入れる)
a = createArray()
i =0
while i < 5
 if getVariable("monsterlist")[i][0] == "true"
  pushArray(a, getVariable("monsterlist")[i][1])
 end
i = i +1
end
pushArray(a, "やめる") #やめるの項目も配列に追加

speak("図鑑を開いた")
close = 0 
while close == 0 #closeが0以外だと図鑑は閉じられる
  k = speakWithSelectArray(a, "参照したい項目を選んでね")
  i = 0 #選んだ項目の順番から名前を引き出し、リストを参照
  while i < 5
    if a[k] == getVariable("monsterlist")[i][1]
      speak(getVariable("monsterlist")[i][2])
    elsif a[k] == "やめる"
      close = 1 #やめるを選ぶとclose == 0が成立しなくなりループ終了
    end
  i = i +1
  end
end

ためしにゲームで動かしてみるとわかりやすいかと思います。
これだと、倒したモンスターだけ選択肢に出るし、順番も降順なので気分もよろしいかと。
モンスターの画像IDも配列に入れて一緒に呼び出したらより図鑑らしくなると思います。
rurun9さんの配列の記事かなり参考にしました。
まだ使いこなせないけど勉強になります。
  39 mini tomato(投稿日:2010/08/16 12:04, 履歴)
rurun9さん回答ありがとうございます!
そしてごめんなさい!本当にごめんなさい!
私のド素人な知識では九割ぐらい理解ができていませんorz。

構想を提案しながら理解できないだなんてお恥ずかしい上にいたたまれないのですが、よろしければもう少しわかりやすく教えていただけませんでしょうか。

本当にもうしわけありません。
  39 mini tomato(投稿日:2010/08/16 11:48, 履歴)
わぁ!こういうのです、こういうのがやりたかったんです!!
shirosabotenさんありがとうございます!

今は必死に自分の中で噛み砕いて理解しようと努めています(泣。
選択肢メッセージに変数を組み込んでいる(?)のはなんとなくわかりましたが、whileがまだよくわからなくて・・・orz

うぅ、なさけない。(´;ω;`)
Nyan mini rurun9(投稿日:2010/08/16 11:34, 履歴)
んー。要するに
「リスト」を配列で管理すれば良いのでは?
pushArray(配列変数名) で追加していくだけですよ
同じ物を重複して追加しないように、追加前にリストの中にそれがあるかどうかを調べてから追加する、程度かと。
配列でリストを所持しておけば、そのまま選択肢にもできますし。
(例→スクリプト/つくってみよう1

もし図鑑的な順序が決まっているリストなら
二次元配列にしておいて
getVariable("monsterlist")[n][m]
n はリスト番号
m は
・ 0 : true なら持ってる false なら持ってない
・ 1 : 中身。具体的な名前とか
というルールにしてはどーでしょ。
      mini shirosaboten(投稿日:2010/08/16 00:25, 履歴)
失敗。

#開始スクリプトなどで設定
setVariable("項目",createArray()) # 5項目ある図鑑をすべて???にする
i = 0
while i < 5
 getVariable("項目")[i] = "???"
 i  = i + 1
end

setVariable("説明文",createArray()) #説明文を考える
getVariable("説明文")[0] = "HPを回復する"
getVariable("説明文")[1] = "状態異常:毒を回復"
getVariable("説明文")[2] = "状態異常:マヒを回復"
getVariable("説明文")[3] = "あああああ"
getVariable("説明文")[4] = "いいいいい"


# アイテム取得時
giveItem(111) #項目0番目HPを回復するアイテムだとする
speak("薬草を手に入れた")
getVariable("項目")[0] = "薬草"


giveItem(112) #項目1番目毒を回復するアイテムだとする
speak("毒消し草を手に入れた")
getVariable("項目")[1] = "毒消し草"




#図鑑を参照したとき(本棚にイベントをはっつけるなど)
i = 0 
while i < 1
 case speakWithSelect(6, getVariable("項目")[0], getVariable("項目")[1],
getVariable("項目")[2], getVariable("項目")[3],
 getVariable("項目")[4],  "やめる",#都合により無駄に改行してます
    "参照したい項目を選んでね")
  when 0
    n = 0
  when 1
    n = 1
  when 2
    n = 2
  when 3
    n = 3
  when 4
    n = 4
  when 5
    speak("図鑑を閉じた")
    i = 1
 end
 if i == 0
  if getVariable("項目")[n] == "???" 
      speak("まだ参照できません")
  else
      speak(getVariable("説明文")[n])
  end
 end
end

      mini shirosaboten(投稿日:2010/08/16 00:19, 履歴)
いいですねぇ、そういうのやりたいですよねー^^

メニューに表示とかはできるかわかんないですけど

いろいろやりかたはありそうです
簡単なものでアイテム取得後に項目が埋まってくなら
(各項目の位置は固定)

#開始スクリプトなどで設定
setVariable("項目",createArray()) # ためしに5項目ある図鑑をすべて???にする
i = 0
while i < 5
 getVariable("項目")[i] = "???"
 i  = i + 1
end

setVariable("説明文",createArray()) #説明文を考える
getVariable("説明文")[0] = "HPを回復する"
getVariable("説明文")[1] = "状態異常:毒を回復"
getVariable("説明文")[2] = "状態異常:マヒを回復"
getVariable("説明文")[3] = "あああああ"
getVariable("説明文")[4] = "いいいいい"


[ # アイテム取得時 giveItem(111) #このアイテムが項目0番目HPを回復するアイテムだとする speak("薬草を手に入れた") getVariable("項目")[0] = "薬草" giveItem(112) #このアイテムが項目1番目毒を回復するアイテムだとする speak("毒消し草を手に入れた") getVariable("項目")[1] = "毒消し草" ]


}}}

#図鑑を参照したとき(本棚にイベントをはっつけるなど)
i = 0 
while i < 1
 case speakWithSelect(6, getVariable("項目")[0], getVariable("項目")[1], getVariable("項目")[2], getVariable("項目")[3], getVariable("項目")[4],  "やめる",
    "参照したい項目を選んでね")
  when 0
    n = 0
  when 1
    n = 1
  when 2
    n = 2
  when 3
    n = 3
  when 4
    n = 4
  when 5
    speak("図鑑を閉じた")
    i = 1
 end
 if i == 0
  if getVariable("項目")[n] == "???" 
      speak("まだ参照できません")
  else
      speak(getVariable("説明文")[n])
  end
 end
end


項目を追加する(最初は選択肢が2こでアイテムが増えるにつれ選択肢が増えてく…)となるとどう書くのかまだ見当がつきません^^;