Skip to content

Instantly share code, notes, and snippets.

@katsuyoshi
Created February 16, 2025 01:21
Show Gist options
  • Save katsuyoshi/7363aec42535ea7d1cf2c3d9140b17c3 to your computer and use it in GitHub Desktop.
Save katsuyoshi/7363aec42535ea7d1cf2c3d9140b17c3 to your computer and use it in GitHub Desktop.
tako_src = <<EOS
1C00: 00 00 39 79 7A 6E EC FA FA EC 6E 7A 79 39 00 00
EOS
beam_src = <<EOS
1C90: 0F ; ++++....
EOS
@field = Array.new(16) { Array.new(32,0) }#[([false] * 32).dup] * 16
def src2a src
src.each_line.map do |line|
line.split(/\:/).last.split(/\;/).first.split(/\s/)[1..-1].map{|e| e.to_i(16)}
end.flatten
end
def draw image, x, y, collision = false
hit = false
image.each_with_index do |d, dx|
8.times do |dy|
if (d & 1) == 1
case @field[x + dx][y + dy]
when 1
if collision
@field[x + dx][y + dy] = 2
hit = true
else
@field[x + dx][y + dy] = 1
end
else
@field[x + dx][y + dy] = 1
end
end
d >>= 1
end
end
hit
end
def erase image, x, y
image.each_with_index do |d, dx|
8.times do |dy|
@field[x + dx][y + dy] = 0 if (d & 1) == 1
d >>= 1
end
end
end
def show_field
s = @field.map do |row|
row.map do |d|
case d
when 0
' '
when 1
'. '
when 2
'* '
end
end.join("")
end.join("\n")
puts s
end
def rollback
print "\e[16A"
end
tako = src2a tako_src
beam = src2a beam_src
spd = 4
5.times do |i|
erase beam, 8, i * spd
draw tako, 0, 16
hit = draw beam, 8, (i + 1) * spd, true
break if hit
show_field
sleep 1
rollback
end
show_field
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment