CoRサンプル集: テトリスのような落ちものパズルゲームのサンプル

テトリスのような落ちものパズルゲームのサンプル。
音楽・画像などの素材は一切使用していないので、コピペだけで移植出来ます。

操作方法
横移動:←→
ソフトドロップ:↓
ハードドロップ:↑
左回転:Z
右回転:X
ホールド:C
プレー:3 (人数:2) クリア:2 評価: 10 (1回)
タグが設定されていません
#============================================================================== # 日時を扱うためのユーティリティクラス # getLocalCurrentTimeMillisecond()が使えなかったので、getLocalCurrentDate()で対応 #============================================================================== class DateTimeArray DAY_MS = 24 * 60 * 60 * 1000 # 読み取り専用のメソッドを定義 attr_reader :year, :month, :day, :hour, :minute, :second, :millisecond # 指定された配列からインスタンスを生成する # # @param date [Array<Integer>] 日時配列 [年, 月, 日, 時, 分, 秒, ミリ秒] def initialize(date) @year, @month, @day, @hour, @minute, @second, @millisecond = date end # 2つの日時配列の差分をミリ秒単位で計算する # # @param date1_array [Array<Integer>] 1つ目の日時配列 # @param date2_array [Array<Integer>] 2つ目の日時配列 # @return [Integer] ミリ秒単位の差分(絶対値) def self.diff_ms(date1_array, date2_array) d1 = DateTimeArray.new(date1_array) d2 = DateTimeArray.new(date2_array) total_ms = 0 # 年差の計算(異なる場合のみ) if d1.year != d2.year start_year, end_year = [d1.year, d2.year].minmax (start_year...end_year).each do |y| total_ms += (leap_year?(y) ? 366 : 365) * DAY_MS end end # 日数の差分 # 同じ年かつ同じ月なら日差を直接計算 if d1.year == d2.year && d1.month == d2.month total_ms += (d1.day - d2.day).abs * DAY_MS else # 年または月が異なる場合、各日付を年初からの日数で表し差分を計算 total_ms += (d1.day_of_year - d2.day_of_year).abs * DAY_MS end # 時刻部分の差分 total_ms += (d1.time_of_day_ms - d2.time_of_day_ms).abs return total_ms end # 指定日時が1970年1月1日から何ミリ秒経過しているかを返す # # @param date_array [Array<Integer>] 日時配列 # @return [Integer] UNIXエポックからのミリ秒 def self.to_unixepoch_ms(date_array) return diff_ms(date_array, [1970, 1, 1, 0, 0, 0, 0]) end # 指定年がうるう年かどうかを判定する # # @param year [Integer] 対象の年 # @return [Boolean] うるう年であればtrue def self.leap_year?(year) return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) end # 指定年・月の月日数を返す # # @param year [Integer] 対象の年 # @param month [Integer] 対象の月 # @return [Integer] 日数 def self.days_in_month(year, month) case month when 1, 3, 5, 7, 8, 10, 12 return 31 when 4, 6, 9, 11 return 30 when 2 return leap_year?(year) ? 29 : 28 else raise "Invalid month: #{month}" end end # 年始からの通算日数(0開始)を返す # # @return [Integer] 日数(0始まり) def day_of_year days = @day (1...@month).each do |m| days += self.class.days_in_month(@year, m) end return days - 1 end # 時刻部分(時・分・秒・ミリ秒)をミリ秒に換算して返す # # @return [Integer] ミリ秒 def time_of_day_ms return @hour * 3600000 + @minute * 60000 + @second * 1000 + @millisecond end # UNIXエポックからの経過時間(ミリ秒)を返す # # @return [Integer] UNIX時間(ミリ秒) def to_unixepoch_ms return self.class.to_unixepoch_ms([@year, @month, @day, @hour, @minute, @second, @millisecond]) end end
投稿者:Material 185033 3 mini 光楼(114) 対象Lv1 公開日:2025年07月19日 20:48:05
プレー内容を公開する

違反を通報する

コメントする

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

コメント一覧

Rmakeic1 mini muga(投稿日:2025/07/19 23:10, 履歴)
すばらしいです!普通に遊べるところがすごいです!
プレー履歴
  • Rmakeic1 mini muga: スコア:1350
    (07/19 23:09)

全てのプレー履歴を見る

新着レビュー

レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?

全てのレビュー

フォロー/シェア

ブログ/Wiki/掲示板で共有する

Rmake内(ブログ/Wiki/掲示板)に貼り付ける場合は以下のタグを利用してください。

リンク

プレイヤー

外部ホームページに貼り付ける

外部ホームページに貼り付ける場合は以下のタグを利用してください。