Avec ruby ● × Game et Othello (examen de base)

Rapport récent

Construire l'environnement Nginx de docker J'étais accro au marais et je n'ai rien étudié, alors j'ai fait un changement à Othello cette fois. Fondamentalement, cela ne s'écarte pas de la portée du didacticiel, j'ai donc pensé que c'était parfait pour réviser la grammaire. Quant à la structure de cette section, nous allons d'abord introduire le jeu ● × puis introduire le codage d'Othello.

Sujet du jour

Créer Othello ・ Création de board ・ Placement de pierre ・ Retournez la pierre · Répéter Je pense que cela fonctionnera si seuls les quatre éléments de ⬆️ peuvent être effectués

environnement

ruby: 2.5.3

● × jeu

Comme il est verticalement long, certaines pièces ont été modifiées.

line1 = "123"  line2 = "456"  line3 = "789" n = 1

puts line1  
met line2 ⇨ 3 * 3 carrés sont créés, après cela, cette partie est abrégée en (*).
puts line3
puts "#{n}Tour: tour du joueur 1"
input = gets.to_i

unless input >10 ⇨ Jouez autrement que 1-9 dans cette branche
  if 1 <= input && input <= 3
     line1.gsub!("#{input}", "×")⇨ Méthode de remplacement de caractères gsub
  elsif 4 <= input && input <= 6
    line2.gsub!("#{input}", "×")
  else
    line3.gsub!("#{input}", "×")
  end
else
  puts "Valeur illégale. Pénalité: sauter"
end
(*) n+= 1

while n <10 ⇨ Comme il ne peut être répété qu'un nombre pair de fois, le premier a été supprimé de while.
  puts "#{n}Tour 2 Tour du joueur 2"
  input = gets.to_i

  unless input > 10
    if 1 <= input && input <= 3
      line1.gsub!("#{input}", "●")
    elsif 4 <= input && input <= 6
      line2.gsub!("#{input}", "●")
    else
      line3.gsub!("#{input}", "●")
    end
  else puts "Valeur illégale. Pénalité: sauter"
  end
(*) n += 1
  puts "#{n}Tour: tour du joueur 1"
  input = gets.to_i

  unless input > 10
    if 1 <= input && input <= 3
      line1.gsub!("#{input}", "×")
    elsif 4 <= input && input <= 6
      line2.gsub!("#{input}", "×")
    else
      line3.gsub!("#{input}", "×")
    end
  else puts "Valeur illégale. Pénalité: sauter"
  end
(*) n += 1
end

Comme ça. Il est composé de phrases intuitives. Cependant, si vous faites cela avec Othello, vous vous retrouverez avec des instructions redondantes, vous pouvez donc utiliser des tableaux pour créer des images comme des matrices mathématiques et des fonctions quadratiques.

Othello

BL = "●" WH = "○" wall = "+" blank = "*" field = []
m_row = 10 m_col = 10

#Initialisation
m_row.fois ☆ Entré de 0 à 99 à ce stade
  row = []Le tableau est complet. Cependant, toujours
  m_col.fois faire À ce stade, une planche 8 * 8 est terminée
    row <<Puisqu'il n'y a pas de blanc, effectuez le traitement.
  end
  field << row 
end

#Création de mur
0.upto(m_col - 1) do |i|☆ Faites des murs dans les 0e et 9e rangées
  field[0][i] = wall     field[m_row - 1 ][i] = wall
end

0.upto(m_row - 1 ) do |i|☆ Faites des murs sur les lignes 0 et 9
  field[i][0] = wall     field[i][m_col - 1] = wall
end
#Position initiale ⇨ Avec le coin supérieur gauche comme origine
field[4][4] = WH         field[5][5] = WH
field[4][5] = BL         field[5][4] = BL

def print_field(field, m_row)⇨ Méthode de préparation au tableau
  print " 123456789\n"⇨ Ici\n Si vous ne le mettez pas, il changera
  for i in 0..m_row -1 ⇨ Méthode itérative
    print i.to_s ☆ À ce moment\Sans n
    row = field[i]    +++++++++++********++********...
    row.each do |stone|Il est affiché comme
      print stone
    end
    print "\n"
  end
end

#Méthode à l'envers(Noir ⇨ blanc)
def reverse_black(bl_row, bl_col, field)
  direcrions = [[-1,0], [-1,1], [0,1], [1,1], [1,0], [0,-1], [-1,-1]] 
  direcrions.each do |direction|☆ Jugez les pierres adjacentes une par une dans le sens des aiguilles d'une montre
    reverse_pos = []⇨ Si vous trouvez une pierre ennemie, stockez-la
    reverse_row = bl_row + direction[0].to_i ⇨ Confirmation de la position absolue
    reverse_col = bl_col + direction[1].to_i

    if field[reverse_row][reverse_col] != "●"⇨ S'il ne s'agit pas de la pierre d'un ami, procédez au traitement tel quel
      next
    end

    reverse_flag =false ⇨ Déterminer s'il s'agit d'un ennemi
    reverse_pos << [reverse_row, reverse_col]⇨ Stocker le placement des ennemis
tandis que vrai ☆ À la pointe de la pierre qui s'étend à partir de là
      reverse_row += direction[0]S'il y a une pierre alliée, rangez-la là
      reverse_col += direction[1]
      if field[reverse_row][reverse_col] == "●"
        reverse_pos << [reverse_row, reverse_col]
      elsif field[reverse_row][reverse_col] == "○"
        reverse_flag = true
        break
      else
        break
      end
    end
    if reverse_flag Transforme la pierre stockée en une pierre amicale
      reverse_pos.each do |pos|
        field[pos[0]][pos[1]] = "○"
end end end end
#Méthode à l'envers(Blanc ⇨ noir)
def reverse_white(wh_row, wh_col, field)
  direcrions = [[-1,0], [-1,1], [0,1], [1,1], [1,0], [0,-1], [-1,-1]]
  direcrions.each do |direction|
    reverse_pos = []
    reverse_row = wh_row + direction[0].to_i
    reverse_col = wh_col + direction[1].to_i

    if field[reverse_row][reverse_col] != "○"
      next
    end

    reverse_flag = false
    reverse_pos << [reverse_row, reverse_col]
    while true
      reverse_row += direction[0]
      reverse_col += direction[1]
      if field[reverse_row][reverse_col] == "○"
        reverse_pos << [reverse_row, reverse_col]
      elsif field[reverse_row][reverse_col] == "●"
        reverse_flag = true
        break
      else
        break
      end
    end
    if reverse_flag
      reverse_pos.each do |pos|
        field[pos[0]][pos[1]] = "●"
end end end end

#Poste initial terminé
print_field(field, m_row)

while true do
  #Mettre une pierre
  puts "C'est un tour noir Exemple d'entrée: 2(Verticale),3(côté) "
  puts "Vertical et horizontal(virgule)Entrez p pour les chemins séparés par"
  bl_side = gets
  unless bl_side == "p"
    bl_side = bl_side.split(",")⇨ Puisqu'il s'agit d'un type chaîne, c'est un entier
    bl_row = bl_side[0].to_Fermement changé en i
    bl_col = bl_side[1].to_i
    field[bl_row][bl_col] =BL ⇨ Placer une pierre dans une position absolue depuis l'origine
    reverse_white( bl_row, bl_col, field)
    print_field(field, m_row)
  end

  puts "C'est un tour blanc Exemple d'entrée: 2(Verticale),3(côté) "
  puts = "Vertical et horizontal(virgule)Entrez p pour les chemins séparés par"
  wh_side = gets
  unless wh_side == "p"
    wh_side = wh_side.split(",")
    wh_row = wh_side[0].to_i
    wh_col = wh_side[1].to_i
    field[wh_row][wh_col] = WH
    reverse_black( wh_row, wh_col, field)
    print_field(field, m_row)
  end
end

Veuillez modifier et utiliser le cas échéant.

en conclusion

Ce qui n'a pas pu être implémenté dans Othello · Les fonctions ・ Fonction d'annulation ・ Une fonction pour rediriger les lieux qui ne peuvent pas être placés

Je me demande si ce domaine est assez complet. Je pense que je peux faire ces échecs.

.. .. .. Shogi est impossible avec la capacité actuelle www

Recommended Posts

Avec ruby ● × Game et Othello (examen de base)
Ressentez facilement le type de base et le type de référence avec ruby
Ressentez facilement le type de base et le type de référence avec ruby 2
Méthodes et classes Ruby (basiques)
Faites un jeu de frappe avec ruby
Revue Ruby 2
Créer un jeu Chinchiro avec une amélioration de Ruby Final après avoir reçu un avis
Ruby Review 1
Conversion de JSON en TSV et TSV en JSON avec Ruby
Termes de base de Ruby
[Ruby] Mots clés avec mots clés et valeurs par défaut des arguments
J'ai essayé d'implémenter Ruby avec Ruby (et C) (j'ai joué avec intégré)
Essayez d'intégrer Ruby et Java avec Dapr
Créez un notebook Jupyter avec Docker et exécutez ruby
Un simple jeu de ciseaux-papier-pierre avec JavaFX et SceneBuilder
Rubis et gemme
[Review] Lecture et écriture de fichiers avec java (JDK6)
[Ruby] Liste de codes de base. Gardez les bases avec des exemples
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
[Ruby] Exclure et remplacer des modèles spécifiques par des expressions régulières
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
Concevoir et implémenter un jeu de rupture de bloc avec une architecture propre
[Débutant] Créez un jeu compétitif avec des connaissances de base sur Java
Création d'un jeu Chinchiro avec Ruby 4th Création d'un processus de progression du jeu
Concevoir et implémenter un jeu de rupture de bloc avec une architecture propre
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
Installez rbenv avec apt sur ubuntu et mettez ruby
[Ruby] Classes et instances
Symboles et rubis destructeur
Points d'apprentissage Ruby (basique)
[Ruby] Big Decimal et DECIMAL
notes de syntaxe de base ruby
Premiers pas avec Ruby
Classes et instances Ruby
Héritage et délégation Ruby
Evolve Eve avec Ruby
Opérateurs et opérations de base
Passez en revue les connaissances de base du rubis souvent oubliées
Installez Ruby 3.0.0 Preview 1 avec une combinaison de Homebrew et de rbenv
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
Comment gérer différentes versions de rbenv et Ruby
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Exemple de code pour la simulation de base et les tests avec Mockito 3 + JUnit 5