キューを作る関数
投稿者:
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と表示
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。