Untitled
unknown
ruby
a year ago
4.4 kB
9
Indexable
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 :size #tu chciałem tak zrobić żeby móc w check_positions to wykorzystać. Ale nie działało.
#a nie chcę podawać obiektu tam chyba raczej...
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(position_a,position_b,board_size)
if position_a > board_size or position_a < 1 or position_b > board_size or position_b < 1
return false
else
return true
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
position_a = inputPositionA.to_i # możesz chainować funkkcje, spokojnie mogło być wyżej gets.to_i
position_b = inputPositionB.to_i # Próbowałem tak, to był pierwszy odruch mój, ale coś kurczę mi wtedy nie działało
if board.check_positions(position_a, position_b,board_size) == false
puts "Wrong positions"
max_number_of_moves = max_number_of_moves-1 #muszę odjąc to od ruchów bo ruch nie został zrobiony...
else #Tu musiałem to wszystko przenieść. Bo złe pozycje miały w dupie, że są złe
board.editBoard(player,position_a,position_b)
if player == 1
player = 2
else
player = 1
end
end
board.board_state
#Check win con zamknięty bo nie działa i tak
#board.check_win_con
#@down to zostawiam dla komentarza, bo to jest do zrobienia dalej
#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ć.
max_number_of_moves += 1
endEditor is loading...
Leave a Comment