Untitled

mail@pastecode.io avatar
unknown
ruby
2 months ago
4.3 kB
3
Indexable
Never
class Board
  @@number_of_boards = 1 
  def initialize(size)
    @board = Array.new(size) {Array.new(size) {0} } #Zastnawiałem się czy 2 size potrzebuję, ale  w sumie kółko i krzyżyk to chyba kwadratowa plansza?
    #Jak coś to robienie tej tabeli to też z googla. I to "{0}" to też z googla. Domyślam się co robi, ale jakbym
    #miał całą tabelę różnymi wartościami zrobić to bym chyba nie wiedział jak.
    #przetestuję następnym razem
  end

  attr_reader :board #<- tu zakładam, że to po prostu getter którego się nauczę na pamięć. Jakoś nic mi nie mówi "attribute reader.."
                    #mimo, że wydaję się być bardzo logiczne.


  def editBoard(player, square_a, square_b)
      square_a = square_a-1
      square_b = square_b-1
      
    if player == 1 and board[square_a][square_b] == 0
      board[square_a][square_b] = 'X'
    elsif player == 2 and board[square_a][square_b] == 0
      board[square_a][square_b] = 'O'
    elsif board[square_a][square_b] == 'X' or board[square_a][square_b] == 'O' # Czy tutaj nie wystarczyłby else bez warunku?
      # Bo jeśli nie jest 0 to musi być albo 'X' albo 'O' 
      # Tu zostawiam jak jest. Bo z jednej strony by wystarczyło, ale z drugiej strony boli mnie mózg, że może się wydarzyć jakieś gówno
      # Oprócz tego wydaję mi się, że tak jest trochę bardziej czytelnie...
      puts "This square is already taken!"
    end

  end

  def board_state
    puts "Board: "
    board.each { |x| # w Ruby mamy bloki jednolinijkowe pisane jako {|x| puts x.join(" ")} oraz wielolinijkowe do end
    # Tego "|x|" nie kminie jak coś tak dodatkowo (for był z googla -> how to print 2d arr ruby)
      puts x.join(" ")
    }
  end

  def check_win_con 
    if board[0] == ['X','X','X'] or board[1] == ['X','X','X'] or board[2] == ['X','X','X']
      puts "Player 1 won! Gratz"
      0 
      # było return 0
      # Zmieniłem na samo '0' ale nie wiem czy to tak ma być? XD i co to zero tu oznacza? Mnie?
    end
    if board[0] == ['O','O','O'] or board[1] == ['O','O','O'] or board[2] == ['O','O','O']
      puts "Player 2 won! Gratz"
      0
    end
  end
  
  def check_positions
    if positionA > size or positionA < 1 or positionB > size or positionB < 1 
    puts "U dumb fuck, wrong positions"
    return 0
    end
  end
end

board_size = 10
max_number_of_moves = board_size*2
board = Board.new(board_size) 

board.board_state
puts "X start. Where would you like to put X?"
player = 1
x = 0
while x != max_number_of_moves do
  puts "index A:"
  inputPositionA = gets # Człowiek tak odwykł od konsolowych aplikacji, że musiałem googlać gets xD
                        # Spoko, też musiałem...
  puts "index B:"
  inputPositionB = gets

  positionA = inputPositionA.to_i # możesz chainować funkkcje, spokojnie mogło być wyżej gets.to_i
  positionB = inputPositionB.to_i # Próbowałem tak, to był pierwszy odruch mój, ale coś kurczę mi wtedy nie działało


  #if positionA > 3 or positionA < 1 or positionB > 3 or positionB < 1 # Oddelegowałbym to do klasy Board, ona zna swój rozmiar to niech ona ocenia.
  #  puts "U dumb fuck, wrong positions"
  #  return 0
  #end

    #@up przeniesione


  board.editBoard(player,positionA,positionB) # IMO to że indeksy mają niższą wartość niż współrzędne to detal wymagający schowania na najniższym poziomie.
  # Albo bym to robił w boardzie przed samym użyciem, albo dodał jakieś prywatne translatory żeby to wyenkapsulować.
  # Jest taki mało populatny syntax jak endless method. Wyglądałoby to tak: def coord_to_index(coord) = coord -1
  # @up poprawione
  board.board_state
  #Check win con zamknięty bo nie działa i tak
  #board.check_win_con

  if player == 1 # A dodajmy więcej graczy, niech będzie hash mapujący gracza na jego symbol, np
    # players = { x: "Radek", y: "Krutas", z: "Gracmanollo"}
    # I niech gra sobie radzi ze zmienną ilością graczy
    player = 2
  else
    player = 1
  end
  x += 1 # W sumie zastanawiam się po co ten warunek 9 ruchów, grajmy do wygranej albo aż plansza się nie skończy.
  # No 9 ruchów jest maks... W kółko i krzyżyk nie można nadpisywać ruchów. Zmieniłem pyntle na taką żeby była zależna do size. Ale też mogę to zmienić.
end
Leave a Comment