キューを作る関数

投稿者:Material 305033 1 mini cfm_ 投稿日:2016/01/26 19:38

ゲーム内でキューを使いたかったので作りました。誰も興味ないかも。
これらの関数が必須です。
通常変数を構造体のように定義する
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と表示

コメントする

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

コメント一覧

コメントはありません。