キューを作る関数
投稿者: cfm_ 投稿日:2016/01/26 19:38
ゲーム内でキューを使いたかったので作りました。誰も興味ないかも。
これらの関数が必須です。
通常変数を構造体のように定義する
setVariableとgetVariableを2文字で記述する関数
テストスクリプト
おまけ
配列を上書きすると、配列が消せる。
関数に配列を渡すと、参照渡しになる。
配列の要素だけの時は参照でない。
ツイート
これらの関数が必須です。
通常変数を構造体のように定義する
setVariableとgetVariableを2文字で記述する関数
#キューを作る(nはリングバッファのサイズ) def queue_create(name,n) sv(name+"_buff",createArray()) struct(name,splitString("front,back,count,size",","),0) sv(name+"_size",n) end #キューが空か def queue_isempty(name) return gv(name+"_count") == 0 end #キューが満杯か def queue_isfull(name) return gv(name+"_count")==gv(name+"_size") end #キューにデータを入れる(キューが満杯の時、falseを返す) def enqueue(name,data) if gv(name+"_count")==gv(name+"_size") then return false;end gv(name+"_buff")[gv(name+"_back")]=data sv(name+"_back",(gv(name+"_back")+1)%gv(name+"_size")) sv(name+"_count",sv(name+"_count")+1) return true end #キューからデータを取り出す # キューが空かどうか、queue_isempty()を使ってください def dequeue(name) if gv(name+"_count") == 0 then return 0;end data = gv(name+"_buff")[gv(name+"_front")] sv(name+"_front",(gv(name+"_front")+1)%gv(name+"_size")) sv(name+"_count",gv(name+"_count")-1) return data end
テストスクリプト
queue_create("queue1",3) # 配列のサイズを3にしてでキューを作成 enqueue("queue1",1) enqueue("queue1",2) enqueue("queue1",3) speak(dequeue("queue1")) # 1と表示 speak(dequeue("queue1")) # 2と表示 enqueue("queue1",4) enqueue("queue1",5) speak(dequeue("queue1")) # 3と表示 speak(dequeue("queue1")) # 4と表示 speak(dequeue("queue1")) # 5と表示
おまけ
配列を上書きすると、配列が消せる。
a=createArray() a[0]=1 a[1]=2 a=createArray() speak(getArrayLength(a)) # 0と表示
関数に配列を渡すと、参照渡しになる。
def b(x) x[0]=1 end a=createArray() b(a) speak(a[0]) # 1と表示
配列の要素だけの時は参照でない。
def b(x) x=1 end a=createArray() b(a[0]) speak(a[0]) # nullと表示
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。