jeudi 8 novembre 2018

Condition operators don't give correct result in my code ruby

I am very very beginner in ruby and I try to develop battleship game in it. In the program I have to write this game in console with entering coordinates of guessing where the game is and I did it. But there are some problems and I added some if elsif else conditions to code to solve them. But these codes don't work. One of them is for entering coordinates out of board, the second one is for not entering any coordinate, and the last one is for bumped coordinate. If these three condition are bypassed the players can enter any coordinate. But when I check these three conditions the result is stupid errors. Can anyone tell me what is the problem with these conditions? Why they don't give suitable result?

#array1 and array2 are not obvious boards of player1 and player2 respectly 
array1 = [ ['*', 'A', 'B', 'C', 'D', 'E'],['1',0, 1, 1, 1, 0], ['2',1, 0, 0, 0, 0], ['3',1, 0, 1, 0, 0], ['4',0, 0, 1, 0, 1], ['5',0, 0, 0, 0, 0] ]
array2 = [ ['*', 'A', 'B', 'C', 'D', 'E'],['1',1, 0, 1, 1, 0], ['2',0, 0, 0, 0, 1], ['3',0, 1, 0, 0, 1], ['4',0, 1, 0, 0, 1], ['5',0, 0, 0, 0, 0] ]

#arr1 and arr2 are obvious boards of player1 and player2 respectly
arr1 = [['*', 'A', 'B', 'C', 'D', 'E'],['1','.','.','.','.','.'],['2','.','.','.','.','.'],['3','.','.','.','.','.'],['4','.','.','.','.','.'],['5','.','.','.','.','.']]
arr2 = [['*', 'A', 'B', 'C', 'D', 'E'],['1', '.','.','.','.','.'],['2', '.','.','.','.','.'],['3', '.','.','.','.','.'],['4', '.','.','.','.','.'],['5', '.','.','.','.','.']]
coor = ['A', 'B', 'C', 'D', 'E']

#board1 and board2 are the final boards of player1 and player2
#this arrays will be seen during game 
#every changes will be seen on these boards
board1 = arr1.map { |x| x.join(' ') }
board2 = arr2.map { |x| x.join(' ') }

#num1 and num2 are the numbers of the parts of ships respectively
num1 = 8
num2 = 8

#count1 and count2 are the numbers of poped ship parts respectively
count1 = 0
count2 = 0

#Starting of the game and the printing the board 
#If we type "start" game will be started
#"Reset" game will be ended
#If we type words except "start" or "reset" program will ask "Do you want to start? (start/reset)" again
while true do
    puts "Welcome to the game!!!"
    puts "Do you want to start? (start/reset):"
    respond = gets.chomp
    if respond == 'start'
        puts "\n"
        puts "Player ONE"
        puts board1
        puts "\n"
        puts "Player TWO"
        puts board2

        while true do
            #Burada while ile player1 in shertleri olacaq 
            while true do 
                puts "\n"
                puts "Turn - Player ONE"
                puts "Enter coordinate: " 
                a = gets.chomp
                a1 = a.split('')
                b = coor.index(a1[0]) +1
                col1 = b
                row1= a1[1].to_i
                if a == '""'
                    puts "You have to enter any coordinate"
                    break
                elsif array1[row1][col1] == 'X' or array1[row1][col1] == '0'
                    puts "You have already bumped this coordinate!"
                elsif col1<1 or col1>5 or row1>5 or row1<1
                    puts "This coordinate is out of board"
                else
                    if array1[row1][col1] == 1
                        count1 = count1 + 1
                        arr1[row1][col1] = "X"
                    elsif array1[row1][col1] == 0
                        arr1[row1][col1] = "0"
                    end
                    board1 = arr1.map { |x| x.join(' ') }        
                    puts "\n"
                    puts "Player ONE"
                    puts board1
                    puts "\n"
                    puts "Player TWO"
                    puts board2

                    if count1 == num1
                        puts "Player ONE won the game!"
                        break
                    end
                end
                break
            end


            while true do 
                #Burada while ile player2 in shertleri olacaq 
                puts "\n"
                puts "Turn - Player TWO"
                puts "Enter coordinate: " 
                c = gets.chomp
                c1 = c.split('')
                d = coor.index(c1[0]) + 1
                col2 = d
                row2= c1[1].to_i
                if c == '""'
                    puts "You have to enter any coordinate"
                    break
                elsif array2[row2][col2] == 'X' or array2[row2][col2] == '0'
                    puts "You have already bumped this coordinate!"
                elsif col2<1 or col2>5 or row2>5 or row2<1
                    puts "This coordinate is out of board"
                else
                    if array2[row2][col2] == 1
                        count2 = count2 + 1
                        arr2[row2][col2] = "X"
                    elsif array2[row2][col2] == 0
                        arr2[row2][col2] = "0"
                    end
                    board2 = arr2.map { |x| x.join(' ') } 
                    puts "Player ONE"
                    puts board1
                    puts "\n"
                    puts "Player TWO"
                    puts board2

                    if count2 == num2
                        puts "Player TWO won the game!"
                        break
                    end
                end
                break
            end
        end

    elsif respond == 'reset'
        puts "You are off the game"
        break
    else
        puts "\n"
        puts "Answer can be only {start} or {reset}"
    end
end

Aucun commentaire:

Enregistrer un commentaire