CoRサンプル集: テトリスのような落ちものパズルゲームのサンプル
テトリスのような落ちものパズルゲームのサンプル。
音楽・画像などの素材は一切使用していないので、コピペだけで移植出来ます。
操作方法
横移動:←→
ソフトドロップ:↓
ハードドロップ:↑
左回転:Z
右回転:X
ホールド:C
音楽・画像などの素材は一切使用していないので、コピペだけで移植出来ます。
操作方法
横移動:←→
ソフトドロップ:↓
ハードドロップ:↑
左回転:Z
右回転:X
ホールド:C
プレー:3
(人数:2)
クリア:2
評価: 10 (1回)
タグが設定されていません
#==============================================================================
# 入力状態を管理するクラス
#==============================================================================
class InputManager
# リピート開始までの遅延フレーム数と連続実行間隔(フレーム数)
INITIAL_DELAY = CONFIG[:input_delay] # キーを押してから初回リピートまでの待ち時間
REPEAT_INTERVAL = CONFIG[:input_interval] # リピート実行の間隔
def initialize
@key_states = {} # キーごとの押下状態を保持
end
# 指定キーの入力状態を取得する
# 初回は即時、長押し中は一定間隔ごとにtrueを返す
#
# @param keyboard [Object] keyboardオブジェクト(クラス内で使えないため、オブジェクトを渡す使用)
# @param key [String] チェック対象のキー(例: 'LEFT', 'RIGHT')
# @param current_time [Array<Integer>] 現在時刻の配列 [年, 月, 日, 時, 分, 秒, ミリ秒]
# @return [Boolean] 実行すべきタイミングであればtrue
def key_pressed?(keyboard, key, current_time)
state = (@key_states[key] ||= { pressed: false, last_pressed_time: nil, first_pressed_time: nil })
if keyboard.down?(key)
unless state[:pressed]
# 初回押下
state[:pressed] = true
state[:first_pressed_time] = current_time
state[:last_pressed_time] = current_time
return true
else
# 長押し時
elapsed = DateTimeArray.diff_ms(current_time, state[:first_pressed_time])
if elapsed >= INITIAL_DELAY && DateTimeArray.diff_ms(current_time, state[:last_pressed_time]) >= REPEAT_INTERVAL
state[:last_pressed_time] = current_time
return true
end
end
else
# 離された
state[:pressed] = false
state[:first_pressed_time] = nil
state[:last_pressed_time] = nil
end
return false
end
end
コード一覧
- datetime_array.rb
- defines.rb
- extension.rb
- grid_util.rb
- hold.rb
- input_handler.rb
- input_manager.rb
- piece.rb
- score.rb
- start.rb
プレー内容を公開する