【講座?】CoRを触ってみる10~配列編~【自分用メモ?】

投稿者:Material 185033 3 mini 光楼(114) 投稿日:2017/03/12 14:42

【講座?】CoRを触ってみる09~モーション編~【自分用メモ?】←前回

Switch、Joshin webで注文出来たw

#このブログの情報は2017年3月12日現在のものです。今後変更になる可能性があります。

配列の生成

Rmakeでは
a = createArray()

a[0] = 5
a[1] = 8
a[2] = 10

と書いてましたがCoRではどうなのか気になるところですね。

↓こうです↓
a = [5, 8, 10]

配列を作りつつ、データを格納できるようになりました。やったね!

ちゃんと作れているか確認してみましょう!
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10]
  debug_log "a → #{a}"
end

#シーンスタート
start_scene "start"

見た瞬間配列だと分かるようになってますね!
値もしっかり入っています。

あ、因みにRmakeと同じようにcreateArray()とかが使えるんですよ。


  • popメソッド
配列の最後尾を切り取ると言った方が良いのかな?
最後尾を削除して、その消した値を返します(変数に入れます)。
変数 = 配列.pop

動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10]
  last_value = a.pop
  debug_log "a → #{a}\n    last_value → #{last_value}"
end

#シーンスタート
start_scene "start"

  • pushメソッド
配列の最後尾に値を追加します。
RmakeのpushArray()と同じ動作。
配列.push(追加したい値)

でも良いし、
配列 << 追加したい値

でも良い。
動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10]

  a.push(15)
  a << 20

  debug_log "a → #{a}"
end

#シーンスタート
start_scene "start"

  • include?メソッド
配列の中に特定の値があるかを調べます。
result = arr.include?(1)

上の例では配列arr1という値があるかどうかを調べています。
あればtrue、無ければfalseが返ります。
どこにあるかって?闇の中です。

  • 比較
2つの配列が等しいかどうかを==で調べられます。
簡単なので説明を省きます。ドキュメントを読んで下さい。_(._.)_

  • eachメソッド
配列の値を最初から最後まで1個1個見ていくループ……って説明で良いのかな。
配列の要素数(入っている値の数)分ループします。
動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10]
  i = 0

  a.each do |item|
    debug_log "#{i = i + 1}回目のループ\n     item → #{item}"
  end

end

#シーンスタート
start_scene "start"

このように、一番最初のループでは配列の一番最初の値(a[0])が、2回目のループでは2番目の値(a[1])がitemに入っています。

  • mapメソッド
戻り値を集めた配列を作成出来るそうです。
戻り値を格納する配列 = 配列.map do |item|
  要素に対する処理
end

動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10, 15, 20]

  generated_arr = a.map do |item|
    item / 2
  end

  debug_log "a → #{a}\n   generated_arr → #{generated_arr}"
end

#シーンスタート
start_scene "start"

これも配列の全ての要素に対して処理されます。
上の例は、配列aを2で割り(item/2)、generated_arrに配列として格納しています。
returnを書かないのでちょっと難しく感じるけど、割と簡単なこと。

  • findメソッド
これは配列内の探索に使うメソッド。
簡単に言うと検索。
調べられるのは最初に見つかった1個だけ。
しかも場所じゃなくて要素を返してくる変わり者です。
戻り値を格納する変数 = 配列.find do |item|
  検索条件
end

動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10, 15, 20]

  result = a.find do |item|
   item > 5
  end

  debug_log "a → #{a}\n   item>5 → #{result}"
end

#シーンスタート
start_scene "start"

この例では、配列aのなかで5より大きい数は?と聞いています。
するとこの子は1つだけ教えてくれるので、「8だよ!」って教えてくれます。
可愛いですね!

  • find_allメソッド
お仕事はfindメソッドと同じなんですが、1つではなく全部見つけてくれます。
なので戻り値は配列になります。
戻り値を格納する変数 = 配列.find_all do |item|
  検索条件
end

動作例
scene 'start' do #シーンstart
  #変数定義
  a = [5, 8, 10, 15, 20]

  result = a.find_all do |item|
   item > 5
  end

  debug_log "a → #{a}\n   item>5 → #{result}"
end

#シーンスタート
start_scene "start"

今回も5より大きい数を聞いてみました。
するとご覧の通り、「8、10、15、20です!」と、全てを教えてくれました。
大人ですね!

  • sortメソッド
配列のソート(並び替え)をするメソッドです。
昇順(小さい順)に並び替えてくれます。
ソートした配列格納用変数 = 配列.sort

動作例
scene 'start' do #シーンstart
  #変数定義
  a = [15, 8, 10, 2, -6]

  b = a.sort

  debug_log "a → #{a}\n   b → #{b}"
end

#シーンスタート
start_scene "start"

因みに、降順(大きい順)にすることも出来ます。
ソートした配列格納用変数 = 配列.sort do |a, b|
  b <=> a
end


配列については以上です。
多次元配列はまた今度。

それではまた!

おまけ

配列の値が3の倍数の時アホになるプログラム
※3の付く数字の時の条件はありません!
scene 'start' do #シーンstart
  #変数定義
  text_sprite = nil
  text_sprite2 = nil
  arr = []
  40.times do |i| #40回ループ
    arr.push(i + 1) #1~40の数を配列arrに追加
  end
  debug_log "arr → #{arr}"

  create do #シーン初期化
    #テキストスプライト用意
    text_sprite = put_text 'Text' do
     position 450 / 2, 50
     text '3の倍数でアホになる'
    end
    text_sprite2 = put_text 'Text' do
     position 450 / 2, 100
    end
  end

  update do #メインループ
    wait_time(2000) #2000ミリ秒待つ

    #配列内探索ループ
    arr.each do |item|

      text_sprite.text "#{item}" #数字表示
      if item % 3 == 0 #itemが3の倍数か
        text_sprite2.text "( ゚∀゚)" #アホになる
      else
        text_sprite2.text "(^_^)" #普通
      end

      wait_time(1000) #1000ミリ秒待つ
    end

    game_clear #ゲームクリア
  end
end

#シーンスタート
start_scene "start"

#テキストスプライトを定義
text 'Text' do
  origin :center
  font_size 40
  color '#b0ff5a'
end

次回→【講座?】CoRを触ってみる11~多次元配列編~【自分用メモ?】

コメントする

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

コメント一覧

            mini mosmoss(投稿日:2017/03/13 14:53, 履歴)
配列が書きやすい!しかも今までのも使える!
よく使う処理がひとまとめでできるようになってる!
incrudeはあるかないかだけを教えてインデックスは返らない、
find関係の返り値はインデックスじゃなくて要素、なるほど。
場所が欲しい場合はeachを使うのがいいのかな…
大変わかりやすくためになる記事ありがとうございます!
Material 185033 3 mini 光楼(114)(投稿日:2017/03/14 18:48, 履歴)
こちらこそ読んで頂きありがとうございます~