2008年06月21日
リストから要素を消す方法を教えて下さい。
解決しました。ありがとうございました。
【目的】
カードゲームを作ろうとしています。
【やりたいこと】
カードの束からランダムにカードを一枚引きます。
手札に引いたカードを入れておきます。
dialogで手札を表示して使うカードを選びます。
使ったカードを手札から消します。(この部分がどうやったらいいかわかりません)
【疑問点】
listの何番目の要素を消すという(llDeleteSubList)方法ではなくて、要素の名前を用いてリストからその名前の要素を消す方法。
【スクリプト】
list deck = ["ice","fire","air","earth",...]//カードの束を用意する
list hand ; //手札
i = llFloor(llFrand(40))://何番目のカードを引くか決める
llListInsertList(hand,llList2list(deck,i,i),llGetListLength(hand));//手札に引いたカードを入れる。
llDialog(llDetectedKey(0),"",hand,dialogchannel);//ダイアログで手札を表示
listen(integer channel,string name,key id,string message)
ここで聞いたmessageのカードを手札(handのリスト)から消したいのですが、
どうようにしたらよいのでしょうか?
よろしければどなたか教えていただけますでしょうか?
よろしくおねがいします。
【目的】
カードゲームを作ろうとしています。
【やりたいこと】
カードの束からランダムにカードを一枚引きます。
手札に引いたカードを入れておきます。
dialogで手札を表示して使うカードを選びます。
使ったカードを手札から消します。(この部分がどうやったらいいかわかりません)
【疑問点】
listの何番目の要素を消すという(llDeleteSubList)方法ではなくて、要素の名前を用いてリストからその名前の要素を消す方法。
【スクリプト】
list deck = ["ice","fire","air","earth",...]//カードの束を用意する
list hand ; //手札
i = llFloor(llFrand(40))://何番目のカードを引くか決める
llListInsertList(hand,llList2list(deck,i,i),llGetListLength(hand));//手札に引いたカードを入れる。
llDialog(llDetectedKey(0),"",hand,dialogchannel);//ダイアログで手札を表示
listen(integer channel,string name,key id,string message)
ここで聞いたmessageのカードを手札(handのリスト)から消したいのですが、
どうようにしたらよいのでしょうか?
よろしければどなたか教えていただけますでしょうか?
よろしくおねがいします。
Posted by Treva Slade at 21:20│Comments(4)
│誰か教えて下さい
この記事へのコメント
llListFindList(list src, list test)
http://rpgstats.com/wiki/index.php?title=LlListFindList
これでインデックスを調べて、lDeleteSubListするしかないような。
http://rpgstats.com/wiki/index.php?title=LlListFindList
これでインデックスを調べて、lDeleteSubListするしかないような。
Posted by 田中明夫 at 2008年06月21日 21:40
田中さん
ありがとうございます!
llListFindListという関数があったなんて知りませんでした。
これで解決できると思います!
助かりました。本当にありがとうございます!
ありがとうございます!
llListFindListという関数があったなんて知りませんでした。
これで解決できると思います!
助かりました。本当にありがとうございます!
Posted by Treva Slade
at 2008年06月21日 21:56

ちょっとした思い付きです。
1. list handは 1,"fire",3,"ice",...のように、元リストのインデックス込みのリストとする。
2. dialog用に、別途string menuitemsを用意し、"1.fire\n3.ice\n"のように情報を格納しておく。
3. llDialogのメッセージとしてはmenuitemsを使い、ボタン(チャットコマンドh)は、1,2,3の数字とする。
4.chat commandを受け取ったらintegerに転換し、これをインデックスとしてllDeleteSublistによってhandleの中身を消す。
想定されるメリット。インデックスを取り直す手間が省ける。ダイアログのボタンの表示がシンプルになる(文字数制限を気にしなくてよい)。
デメリット。menu用のデータを冗長に用意しなければならない。
たぶん田中明夫さんの方法が教科書的には正解だとは思いますが。
1. list handは 1,"fire",3,"ice",...のように、元リストのインデックス込みのリストとする。
2. dialog用に、別途string menuitemsを用意し、"1.fire\n3.ice\n"のように情報を格納しておく。
3. llDialogのメッセージとしてはmenuitemsを使い、ボタン(チャットコマンドh)は、1,2,3の数字とする。
4.chat commandを受け取ったらintegerに転換し、これをインデックスとしてllDeleteSublistによってhandleの中身を消す。
想定されるメリット。インデックスを取り直す手間が省ける。ダイアログのボタンの表示がシンプルになる(文字数制限を気にしなくてよい)。
デメリット。menu用のデータを冗長に用意しなければならない。
たぶん田中明夫さんの方法が教科書的には正解だとは思いますが。
Posted by Yoo
at 2008年06月21日 22:08

Yooさん
アイデアありがとうございます!
元リストのインデックス込みのリスト、なるほどなるほど。
正直まだLSLの経験が浅くて、そのようなリストをつくった場合、どのように扱えばいいのかまだ理解できていません。
Yooさんのコメントを参考に勉強に励みたいと思います!
ありがとうございました!
アイデアありがとうございます!
元リストのインデックス込みのリスト、なるほどなるほど。
正直まだLSLの経験が浅くて、そのようなリストをつくった場合、どのように扱えばいいのかまだ理解できていません。
Yooさんのコメントを参考に勉強に励みたいと思います!
ありがとうございました!
Posted by Treva Slade
at 2008年06月21日 22:19
