Created
November 27, 2020 03:50
-
-
Save Rabios/9aca3003f5a4b6ff2cb27c63c606bfab to your computer and use it in GitHub Desktop.
Lumines block rotation in DRGTK
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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