Créez un labyrinthe de fouilles avec Ruby2D

IMAGE ALT TEXT HERE J'ai essayé d'implémenter un "labyrinthe de forage" en utilisant Gem "Ruby2D". Vous pouvez voir la "route" grandir progressivement en temps réel. L'image ci-dessus est liée à une vidéo YouTube.

code

dig_maze.rb


require "ruby2d"

L = 20    #La taille du labyrinthe
W = L * 2 + 3

Block_w = 10   #La taille d'un bloc
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)}
#Mettez un "tuteur"
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

Je vais expliquer brièvement la méthode de Ruby2D.

--set Définit la taille de la fenêtre, etc. --Square.new Crée un objet qui représente un carré. Les objets peuvent être affichés ou masqués en ajoutant .add`` .remove. --ʻUpdate Le bloc est mis à jour dans une certaine période de temps (généralement 60fps). Ici, il est affiché à 10 fps. --show` Entrez dans la boucle principale.

Le creusement lui-même est implémenté par simple récursif. Si la variable de tableau «field» représente un labyrinthe et que la valeur est «0», cela signifie qu'il existe un «moyen». Il y a des «gardes» autour, de sorte qu'il n'y a pas de «route» à l'extérieur.

Recommended Posts

Créez un labyrinthe de fouilles avec Ruby2D
Créer un outil de diaporama avec JavaFX
Faire un rappel de garbage avec line-bot-sdk-java
Créer une carte de liste avec LazyMap
Faites un jeu de frappe avec ruby
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
Faisons une carte de Noël avec Processing!
Faites une liste de choses à faire en famille avec Sinatra
Faites une liste de choses à faire en famille avec Sinatra
Créez quand même une fonction de connexion avec Rails
[docker] [nginx] Créer un ALB simple avec nginx
Faisons une fonction de recherche avec Rails (ransack)
Rendre System.out Mock avec Spock Test Framework
Exécutez Scala avec GraalVM et créez-en une image native
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
[Bases de Java] Créons un triangle avec une instruction for
[Mémo de travail de l'application personnelle] Créez un calendrier avec simple_calendar
Créer un utilitaire de réflexion ②
Créer un utilitaire de réflexion ③
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
Créer un utilitaire de réflexion ①
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ① ~ Hello World ~
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Faisons une API simple avec EC2 + RDS + Spring boot ①
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ⑤ ~ Modèle commun ~
Les microservices avec DevOps apportent des modifications
Créez un terrain de jeu avec Xcode 12
[Java] Rendez-le constant
[Rails] Faites une liste de miettes de pain
Faire un diamant en utilisant Java
Une histoire bloquée avec NotSerializableException
Créons une application Web de gestion de livres avec Spring Boot part1
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Comment créer un fichier jar sans dépendances dans Maven
Créons une application Web de gestion de livres avec Spring Boot part3
Faisons une application multiplateforme avec JRuby (génération de fichier jar)
Créons une application Web de gestion de livres avec Spring Boot part2
Créer un compilateur C à utiliser avec Rust x CLion avec Docker
J'ai essayé de créer une fonction de groupe (babillard) avec Rails