掲示板:スクリプト/ランキング関数

最終投稿者:Material 7186 1 mini ikosami 更新(最新コメント):2017/04/08 21:19:40

コメントする

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

コメント一覧

            mini mosmoss(投稿日:2017/04/08 21:19, 履歴)
これ私も使えませんでした。
サーバーにセーブしてるデータの第一引数は文字列でないといけません、という感じのメッセージが出て、
Rank_add()やRank_get()内の、データをロードした後の数行にエラーが出てるみたいでした。
あと、setTextの中身が表示されませんでした。
関数が読めなくて原因がわからなかったため、
応急処置的に作ったものを代わりに載せておきます。
#hikawaさんの配列ソート関数

#配列ソート
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

#waitTime(1000)
#saveGameData("ranking", "9999999999,7160,7064,6976,6448,6204")

上を開始スクリプトやチャプターにコピーして、
最後の二行のコメント#を外してゲームを起動(初期設定)
その後コメント#をまたつける。
(この場合、1位が7160~5位が6204と表示されます、お好みで調整してください)
ランキングにスコアを追加するところで以下のスクリプトを書いて
データのセーブと表示をやりました。

if isLogin() #ログイン判定のチェック、これがないと非ログインユーザーはここでフリーズします

score=0 #このゼロの代わりに点数を入れることで降順の5位までのランキングができます
a=loadGameData("ranking")
a = splitString(a, ",") #文字列を配列に
i=0
while i < getArrayLength(a)
a[i]=toNumber(a[i]) #文字列の配列を数値の配列に
i=i+1
end
a=sortArray(a,false) #ソートをかける=並び替え
if score > a[getArrayLength(a)-1]
popArray(a)
pushArray(a, score)
i=0
while i < getArrayLength(a)
a[i]=toString(a[i]) #数値の配列を文字列の配列に
i=i+1
end
a=joinArray(a, ",") #配列を文字列に変換
waitTime(1000)
saveGameData("ranking", a) #サーバーに保存
a = splitString(a, ",") #文字列を配列に
i=0
while i < getArrayLength(a)
a[i]=toNumber(a[i]) #文字の配列を数値の配列に
i=i+1
end
a=sortArray(a,false) #ソートをかける=並び替え
end
#ランキング表示のメッセージ作りここから
s="ランキング"
i = 1
while i < getArrayLength(a)
  s = s+"\n"+ i+ "位 "+ a[i] +"点"
  i = i + 1
end

#####画面テキスト設定###############
setTextFontSize(15)
setTextFontColor(255, 255, 255)
set[x] = 325;  set[y] = 80;   set[w] = 800;  set[h] = 300
text_e = createText(set[x], set[y], set[w], set[h])
setText(text_e, s) #テキスト表示
####################################
speak(s) #スピーク表示
end #if isLogin()を閉じるエンド
Material 154390 2 mini  創 (投稿日:2013/09/27 23:23, 履歴)
使ってみたけどランキング表示でフリーズした・・・。
Aa mini #いお(投稿日:2012/05/26 12:27, 履歴)
2DアクションRPGじゃ使えないんですね・・。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/26 15:50, 履歴)
RPGで使用できない
関数が含まれているようには
見えないですけれど?
Aa mini #いお(投稿日:2012/05/26 21:22, 履歴)
error
開始スクリプト : syntax error, コードに文法的な間違いがあります。 line(行): 104

104行目って分からない・・・。
これは無視してもいいんでしょうか?
(間違いって書いてあるからダメですよね・・、)
User icon mini 退会したユーザー(投稿日:2012/05/26 22:38, 履歴)
もしや、まだ文法ミスが残ってたかも?
endが一つ多かったので修正しておきました。
User icon mini 退会したユーザー(投稿日:2012/04/30 22:56, 履歴)
なんかおかしいと思ったらまさかの文法ミス・・・
def Rank_Add(a)

#中略

     if getFlag("Ranklarger")
       while o <=getVariable("RankNumber")
         if R[i] == R[o] || !R[i] || !R[o]
         elsif R[i] > R[o] && i > o
           R2 = R[i]; R[i] = R[o];  R[o] = R2
         elsif R[i] < R[o] && i < o
           R2 = R[i];  R[i] = R[o];  R[o] = R2
         end
        #ここにendが入るはず・・・
      else

#後略
User icon mini 退会したユーザー(投稿日:2012/01/14 18:46, 履歴)
Rmake記法が動作していない部分があったので修正しました。

×codd ○code