スクリプト/汎用関数/(応用)ランキングをオリジナルデータ領域にセーブロードする

最終投稿者:Cdv30200 aoi icon mini aoihikawa 更新:2012/02/14 21:15:02
ランキングをオリジナルデータ領域にセーブロードする
(ご自由にご利用ください)


#配列ソート
def pivot(arr,i,j,ord)
  k = i + 1
  while (k <= j) && (arr[i] == arr[k]) do k = k + 1; end
  if k > j then return -1; end
  if ord
    if arr[i] >= arr[k] then return i; end
  else
    if arr[i] <= arr[k] then return i; end
  end
  return k
end

def partition(arr,i,j,x,ord)
  l = i; r = j
  while l <= r
    if ord
      while (l <= j) && (arr[l] < x) do l = l + 1; end
      while (r >= i) && (arr[r] >= x) do r = r - 1; end
    else
      while (l <= j) && (arr[l] > x) do l = l + 1; end
      while (r >= i) && (arr[r] <= x) do r = r - 1; end
    end
    if l <= r
      t = arr[l]; arr[l] = arr[r]; arr[r] = t
      l = l + 1; r = r - 1
    end
  end
  return l
end

def quickSort(arr,i,j,ord)
  if i != j
    p = pivot(arr,i,j,ord)
    if p != -1
      k = partition(arr,i,j,arr[p],ord)
      arr = quickSort(arr,i,(k - 1),ord)
      arr = quickSort(arr,k,j,ord)
    end
  end
  return arr
end

#使用時はこの関数のみ
#第1引数:配列 第2引数:昇順 true / 降順 false
def sortArray(arr,ord)
  return quickSort(arr,0,(getArrayLength(arr) - 1),ord)
end

#------------------------------

#配列セーブ関数
#第1引数:セーブキー名 第2引数:配列データ 第3引数:true 数値データ / false 文字データ
#戻り値:1 成功 / -1 失敗
def saveArrayGameData(key,arr,ch)
  r = (-1)
  if isLogin()
    if ch
      i = 0
      while i < getArrayLength(arr)
        arr[i] = toString(arr[i])
        i = i + 1
      end
    end
    str = joinArray(arr,",")
    waitTime(2000)
    saveGameData(key,str)
    r = 1
  end
  return r
end

#------------------------------

#配列ロード関数
#第1引数:セーブキー名 第2引数:true 数値データ / false 文字データ
#戻り値:配列データ 成功 / -1 失敗
def loadArrayGameData(key,ch)
  r = (-1)
  if isLogin()
    waitTime(2000)
    arr = splitString(loadGameData(key),",")
    if ch
      i = 0
      while i < getArrayLength(arr)
        arr[i] = toNumber(arr[i])
        i = i + 1
      end
    end
    return arr
  else
    return r
  end
end

#------------------------------

#データ領域消去関数
#第1引数:セーブキー名
#戻り値:1 成功 / -1 失敗
def clearGameData(key)
  r = (-1)
  if isLogin()
    waitTime(2000)
    removeGameData(key)
    r = 1
  end
  return r
end


 使用例
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# 事前ランキングデータの作成
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#ランキングデータ
ranking = createArray()
ranking[0] = 5000
ranking[1] = 4500
ranking[2] = 4500
ranking[3] = 4000
ranking[4] = 3500
ranking[5] = 3000
ranking[6] = 2500
ranking[7] = 2000
ranking[8] = 1000
ranking[9] = 500

#ランキングデータをオリジナルデータ領域に保存
if saveArrayGameData("RankingData", ranking, true) != (-1)
  speak("セーブしました")
else
  speak("セーブに失敗しました")
end


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# ランキングデータに新規スコアを追加してセーブする
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#新規追加スコア
newscore = 3700

#ランキングデータをオリジナルデータ領域からロード
ranking = loadArrayGameData("RankingData", true)
if ranking != (-1)
  #ロードに成功した場合
  pushArray(ranking, newscore)        #新規追加スコアを配列に追加
  ranking = sortArray(ranking, false) #ランキングの配列を降順に並べ替え
  popArray(ranking)                   #配列の末尾(一番下位のデータ)を削除
  
  #ランキングデータをオリジナルデータ領域に保存
  if saveArrayGameData("RankingData", ranking, true) != (-1)
    speak("更新をセーブしました")
  else
    speak("更新のセーブに失敗しました")
  end
else
  speak("ロードに失敗しました")
end

#_/_/_/_/_/_/_/_/_/_/_/
# 保存できているか確認
#_/_/_/_/_/_/_/_/_/_/_/

ranking = loadArrayGameData("RankingData", true)
if ranking != (-1)
  speak(ranking)
else
  speak("ロードに失敗しました")
end


ご意見やご質問などありましたら
こちらのブログ記事まで。

コメントする

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

コメント一覧

コメントはありません。