Skip to content

Instantly share code, notes, and snippets.

@Rabios
Created November 27, 2020 03:50
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Rabios/9aca3003f5a4b6ff2cb27c63c606bfab to your computer and use it in GitHub Desktop.
Save Rabios/9aca3003f5a4b6ff2cb27c63c606bfab to your computer and use it in GitHub Desktop.
Lumines block rotation in DRGTK
# Written by Rabia Alhaffar in 27/November/2020
# OpenLumines 1st test: Block rotation
# This demonstrates a Lumines block and it's rotatable with up arrow key.
=begin
Supporters:
@kniknoo
@LeviDuncanPixel
@Hiro_r_b
=end
def tick args
setup args
render args
if args.inputs.keyboard.key_up.up
rotate_block args
end
if args.inputs.keyboard.tab || args.inputs.keyboard.r
$gtk.reset seed: (Time.now.to_f * 100).to_i
end
if args.inputs.keyboard.escape
$gtk.exit
end
end
def setup args
args.state.block_colors ||= [{ r: 255, g: 255, b: 255, a: 255 }, { r: 255, g: 0, b: 0, a: 255 }]
args.state.block ||= [1, 1, 1, 0]
args.state.block_size ||= 25
args.state.block_pos ||= { x: 600, y: 500 }
end
def render args
4.times.map do |i|
x = (i + 1) % 2 == 0 ? args.state.block_pos[:x] + args.state.block_size : args.state.block_pos[:x]
y = (i + 1) > 2 ? args.state.block_pos[:y] - args.state.block_size : args.state.block_pos[:y]
args.outputs.primitives << {
x: x,
y: y,
w: args.state.block_size,
h: args.state.block_size,
r: args.state.block_colors[args.state.block[i]][:r],
g: args.state.block_colors[args.state.block[i]][:g],
b: args.state.block_colors[args.state.block[i]][:b],
a: args.state.block_colors[args.state.block[i]][:a]
}.solid
args.outputs.primitives << {
x: x,
y: y,
w: args.state.block_size,
h: args.state.block_size,
}.border
end
end
def array_match(arr1, arr2)
score = 0
if arr1.length() == arr2.length()
arr1.length().times.map do |i|
if arr1[i] == arr2[i]
score += 1
end
end
return score == arr1.length()
end
end
def block_match(args, arr)
return array_match(args.state.block, arr)
end
def rotate_block args
# Block pattern 4 won't rotated cause you will get same shape...
if !(block_match(args, [1, 1, 1, 1]) || block_match(args, [0, 0, 0, 0]))
# Block pattern 1
if (block_match(args, [1, 0, 0, 1]) || block_match(args, [0, 1, 1, 0]))
args.state.block[0], args.state.block[1] = args.state.block[1], args.state.block[3]
args.state.block[3], args.state.block[2] = args.state.block[2], args.state.block[3]
# Block pattern 2
elsif (block_match(args, [0, 1, 0, 1]))
args.state.block = [0, 0, 1, 1]
elsif (block_match(args, [0, 0, 1, 1]))
args.state.block = [1, 0, 1, 0]
elsif (block_match(args, [1, 0, 1, 0]))
args.state.block = [1, 1, 0, 0]
elsif (block_match(args, [1, 1, 0, 0]))
args.state.block = [0, 1, 0, 1]
# Block pattern 3
elsif (block_match(args, [1, 1, 1, 0]))
args.state.block = [1, 1, 0, 1]
elsif (block_match(args, [1, 1, 0, 1]))
args.state.block = [0, 1, 1, 1]
elsif (block_match(args, [0, 1, 1, 1]))
args.state.block = [1, 0, 1, 1]
elsif (block_match(args, [1, 0, 1, 1]))
args.state.block = [1, 1, 1, 0]
end
end
$gtk.log args.state.block
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment