Machen Sie mit Ruby2D ein Labyrinth

IMAGE ALT TEXT HERE Ich habe versucht, ein "Bohrlabyrinth" mit Gem "Ruby2D" zu implementieren. Sie können sehen, wie die "Straße" in Echtzeit allmählich wächst. Das Bild oben ist mit einem YouTube-Video verknüpft.

Code

dig_maze.rb


require "ruby2d"

L = 20    #Die Größe des Labyrinths
W = L * 2 + 3

Block_w = 10   #Die Größe eines Blocks
set width: W * Block_w, height: W * Block_w, fps_cap: 10

blocks = W.times.map {|y|
  W.times.map {|x|
    Square.new x: x * Block_w, y: y * Block_w,
               size: Block_w, color: "green"
  }
}

field = Array.new(W) {Array.new(W, 1)}
#Setzen Sie einen "Wächter"
field[0] = field[-1] = Array.new(W, -1)
(1..W - 2).each {|y| field[y][0] = field[y][-1] = -1}

field.define_singleton_method(:show) do
  each_index do |y|
    self[y].each_index do |x|
      self[y][x].zero? ? blocks[y][x].remove : blocks[y][x].add
    end
  end
end

start = [2, 2]
stack = [start]
show_stack = [start]

dig = ->(now) {
  movable = []
  [[1, 0], [0, -1], [-1, 0], [0, 1]].each do |dx, dy|
    x = now[0] + dx * 2
    y = now[1] + dy * 2
    movable << [x, y] if field[y][x] == 1
  end
  if movable.empty?
    return if stack.empty?
    jump = stack.delete_at(rand(stack.size))
    dig.(jump)
  else
    nxt = movable.sample
    show_stack << [(now[0] + nxt[0]) / 2, (now[1] + nxt[1]) / 2]
    show_stack << nxt
    stack << nxt
  end
}


update do
  now = show_stack.shift
  next unless now
  field[now[1]][now[0]] = 0
  field.show
  dig.(now) if show_stack.empty?
end

show

Ich werde kurz die Methode von Ruby2D erklären.

--set Legt die Größe des Fensters usw. fest. --Square.new Erstellt ein Objekt, das ein Quadrat darstellt. Objekte können durch Hinzufügen von .add``.remove ein- oder ausgeblendet werden. --update Der Block wird in einem bestimmten Zeitraum (normalerweise 60 fps) aktualisiert. Hier wird es mit 10 fps angezeigt. --show Betritt die Hauptschleife.

Das Graben selbst wird durch einfache Rekursion implementiert. Wenn die Array-Variable "Feld" ein Labyrinth darstellt und der Wert "0" ist, bedeutet dies, dass es einen "Weg" gibt. Es gibt "Wachen", so dass es draußen keine "Straße" gibt.

Recommended Posts

Machen Sie mit Ruby2D ein Labyrinth
Erstellen Sie mit JavaFX ein Diashow-Tool
Machen Sie eine Müllabfuhr mit line-bot-sdk-java
Erstellen Sie eine Listenkarte mit LazyMap
Machen Sie ein Tippspiel mit Ruby
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Machen wir eine Weihnachtskarte mit Verarbeitung!
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Erstellen Sie trotzdem eine Anmeldefunktion mit Rails
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
Lassen Sie uns eine Suchfunktion mit Rails (Ransack) machen
Machen Sie System.out Mock mit dem Spock Test Framework
Führen Sie Scala mit GraalVM aus und machen Sie es zu einem nativen Image
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
[Arbeitsnotiz für persönliche Anwendungen] Erstellen Sie einen Kalender mit simple_calendar
Erstellen Sie ein Reflexionsprogramm ②
Erstellen Sie ein Reflexionsprogramm ③
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Erstellen Sie ein Reflexionsprogramm ①
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Erstellen Sie mit SpringBoot + JPA + Thymeleaf ein einfaches CRUD ~ ~ Hallo Welt ~
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ⑤ ~ Common template ~
Microservices mit DevOps nehmen Änderungen vor
Erstellen Sie einen Spielplatz mit Xcode 12
[Java] Mach es konstant
[Schienen] Machen Sie eine Brotkrumenliste
Machen Sie einen Diamanten mit Java
Eine Geschichte, die bei NotSerializableException steckt
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Versuchen Sie, mit JRuby eine plattformübergreifende Anwendung zu erstellen (Generierung von JAR-Dateien).
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Erstellen Sie einen C-Compiler zur Verwendung mit Rust x CLion mit Docker
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen