カレンダー



現在の日付をもとにカレンダーを作成、今日の日付を赤色で表示します。

学園系RPGとか、シミュレーション系のゲームで使えるかも・・・!?

※カレンダーをゲットするだけならなにも要りませんが、表示の際はdraw_text拡張 カスタムが必要です。

変更点
2024:06:01
・スクリプト中で使用されてる文字列の定義化追加

2024:11:01
・Rubyの場合、基本破壊的に変換するため、閏年の翌年も2月が29日になり、
 そのまま更に閏年を迎えると2月が30日に増えてしまうバグを修正

#==============================================================================
# ■ カレンダー By 貪藻矢射妥←
# 
#  カレンダーを作ってみました。
#   
#==============================================================================
# 更新っぽいもの
# 2024:06:01
# ・スクリプト中で使用されてる文字列の定義化追加
# 
# 2024:11:01
# ・Rubyの場合、基本破壊的に変換するため、閏年の翌年も2月が29日になり、
#  そのまま更に閏年を迎えると2月が30日に増えてしまうバグを修正

module CALENDAR
  # 各月の日数の配列
  DAYS_LIST = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  
  #--------------------------------------------------------------------------
  # ● カレンダー
  #--------------------------------------------------------------------------
  def get_cal(y=0, m=0)
    # 空なら現在の年月を使う
    t = Time.now
    y = t.year if y == 0
    m = t.month if m == 0
    
    list = []
    date = Time.local(y, m, 1)
    
    # うるう年なら2月の日数+1
    if leap?(y)
      CALENDAR::DAYS_LIST[1] =29
    else
      CALENDAR::DAYS_LIST[1] =28
    end
    # 曜日
    list.push("日 月 火 水 木 金 土\n")
    # 一日の表示位置を調整
    offset = date.wday % 7
    weeks = "   " * offset
    1.upto(CALENDAR::DAYS_LIST[m-1]) {|n|
      if n == t.day
        weeks += "\\c[2]" + n.to_s.rjust(2) + "\\c[0] "
      else
        weeks += n.to_s.rjust(2) + Vocab::BLANK_WORD
      end
      # 土曜なら改行
      if(offset + n) % 7 == 0
        weeks += "\n"
        list.push(weeks)
        weeks = ""
      end
    }
    list.push(weeks)
    
    return list
  end
  
  #--------------------------------------------------------------------------
  # ● 閏年判定
  # 4で割り切れる年は閏年だが、100で割り切れる場合は対象外
  # ただし、400で割り切れる場合は閏年
  #--------------------------------------------------------------------------
  def leap?(year)
    if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0
      return true
    else
      return false
    end
  end
end
〜使い方〜 カレンダーを使いたいclassにて include CALENDAR を追加。 描画させたい場所 にて cal_list = get_cal(あるいはget_cal(年, 月)) for text in cal_list draw_shadow_text([x, y, width, height], transfer(text), color, dflg) end を、追加。 これだけです。 ※描画させた時の日付からカレンダーを制作するので、ゲームプレイ中に、日付が変わった際、再描画を  行わない限り前日の日付が紅く表示されたままとなります。

戻る