Sinisterly
[Ruby] TicTacTWO! [updated] - Printable Version

+- Sinisterly (https://sinister.li)
+-- Forum: Coding (https://sinister.li/Forum-Coding)
+--- Forum: Coding (https://sinister.li/Forum-Coding--71)
+--- Thread: [Ruby] TicTacTWO! [updated] (/Thread-Ruby-TicTacTWO-updated)



[Ruby] TicTacTWO! [updated] - Inori - 05-05-2015

I couldn't resist making that pun.
Anyway, this is TicTacToe V2.0, or TicTacTWO!.

I've compacted the actual play sequence, made the AI waaay smarter and actually implemented a win method!

Pretty proud of this, to be honest.
(if you find a bug while playing, please tell me)

Update:
made AI better
Added tie check

Code:
#TicTacTWO! by Touka, ©2015 #====default variables============= $moves = ["x", "o"] $move = 1 m_index = 0 $spots = Array.new(9, " ") $possiblesx = [1, 2, 3] $possiblesy = [1, 2, 3] #================================== #=============board================ def board puts """ TicTacTWO! by Touka #{$spots[0]}|#{$spots[1]}|#{$spots[2]} ----- #{$spots[3]}|#{$spots[4]}|#{$spots[5]} ----- #{$spots[6]}|#{$spots[7]}|#{$spots[8]} move: #{$c_move} """ end #================================== #=======ai movement================ def ai_move if $spots[3] == "#{$moves[$nextmove]}" && $spots[6] == "#{$moves[$nextmove]}" && $spots[0] == " " $pos_in = "1 1" elsif $spots[4] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[0] == " " $pos_in = "1 1" elsif $spots[1] == "#{$moves[$nextmove]}" && $spots[2] == "#{$moves[$nextmove]}" && $spots[0] == " " $pos_in = "1 1" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[2] == "#{$moves[$nextmove]}" && $spots[1] == " " $pos_in = "1 2" elsif $spots[4] == "#{$moves[$nextmove]}" && $spots[7] == "#{$moves[$nextmove]}" && $spots[1] == " " $pos_in = "1 2" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[1] == "#{$moves[$nextmove]}" && $spots[2] == " " $pos_in = "1 3" elsif $spots[6] == "#{$moves[$nextmove]}" && $spots[4] == "#{$moves[$nextmove]}" && $spots[2] == " " $pos_in = "1 3" elsif $spots[5] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[2] == " " $pos_in = "1 3" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[6] == "#{$moves[$nextmove]}" && $spots[3] == " " $pos_in = "2 1" elsif $spots[4] == "#{$moves[$nextmove]}" && $spots[5] == "#{$moves[$nextmove]}" && $spots[3] == " " $pos_in = "2 1" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[4] == " " $pos_in = "2 2" elsif $spots[1] == "#{$moves[$nextmove]}" && $spots[7] == "#{$moves[$nextmove]}" && $spots[4] == " " $pos_in = "2 2" elsif $spots[2] == "#{$moves[$nextmove]}" && $spots[6] == "#{$moves[$nextmove]}" && $spots[4] == " " $pos_in = "2 2" elsif $spots[5] == "#{$moves[$nextmove]}" && $spots[3] == "#{$moves[$nextmove]}" && $spots[4] == " " $pos_in = "2 2" elsif $spots[2] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[5] == " " $pos_in = "2 3" elsif $spots[3] == "#{$moves[$nextmove]}" && $spots[4] == "#{$moves[$nextmove]}" && $spots[5] == " " $pos_in = "2 3" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[3] == "#{$moves[$nextmove]}" && $spots[6] == " " $pos_in = "3 1" elsif $spots[2] == "#{$moves[$nextmove]}" && $spots[4] == "#{$moves[$nextmove]}" && $spots[6] == " " $pos_in = "3 1" elsif $spots[7] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[6] == " " $pos_in = "3 1" elsif $spots[1] == "#{$moves[$nextmove]}" && $spots[4] == "#{$moves[$nextmove]}" && $spots[7] == " " $pos_in = "3 2" elsif $spots[6] == "#{$moves[$nextmove]}" && $spots[8] == "#{$moves[$nextmove]}" && $spots[7] == " " $pos_in = "3 2" elsif $spots[6] == "#{$moves[$nextmove]}" && $spots[7] == "#{$moves[$nextmove]}" && $spots[8] == " " $pos_in = "3 3" elsif $spots[0] == "#{$moves[$nextmove]}" && $spots[4] == "#{$moves[$nextmove]}" && $spots[8] == " " $pos_in = "3 3" elsif $spots[2] == "#{$moves[$nextmove]}" && $spots[5] == "#{$moves[$nextmove]}" && $spots[8] == " " $pos_in = "3 3" else aimx = $possiblesx.sample aimy = $possiblesy.sample $pos_in = "#{aimx} #{aimy}" end end #================================== #===========checks================= def win system "cls" puts " _______________________________ | | | Player \"#{$c_move}\" has won TicTacTWO! | |_______________________________|" board sleep end def cats if $spots.include?(" ") game else system "cls" puts " _______________________________ | | | Cat's game | |_______________________________|" board sleep end end def has_won if $spots[0] == $c_move && $spots[1] == $c_move && $spots[2] == $c_move win elsif $spots[3] == $c_move && $spots[4] == $c_move && $spots[5] == $c_move win elsif $spots[6] == $c_move && $spots[7] == $c_move && $spots[8] == $c_move win elsif $spots[0] == $c_move && $spots[3] == $c_move && $spots[6] == $c_move win elsif $spots[1] == $c_move && $spots[4] == $c_move && $spots[7] == $c_move win elsif $spots[2] == $c_move && $spots[5] == $c_move && $spots[8] == $c_move win elsif $spots[0] == $c_move && $spots[4] == $c_move && $spots[8] == $c_move win elsif $spots[2] == $c_move && $spots[4] == $c_move && $spots[6] == $c_move win else cats end end #================================== #=========turn cycle=============== def game system "cls" if $move == 1 $move = 0 $nextmove = 1 else $move = 1 $nextmove = 0 end $c_move = $moves[$move] board if $opp == 2 && $c_move == "o" ai_move else puts "Enter move coordinates (ex \"1 1\"):" $pos_in = gets.chomp end case $pos_in when "1 1" m_index = 0 when "1 2" m_index = 1 when "1 3" m_index = 2 when "2 1" m_index = 3 when "2 2" m_index = 4 when "2 3" m_index = 5 when "3 1" m_index = 6 when "3 2" m_index = 7 when "3 3" m_index = 8 end if $spots[m_index] == " " $spots[m_index] = "#{$c_move}" else if $opp == 2 && $c_move == "o" $move = $c_move game end system "cls" puts " Error. Re-enter move." sleep(3) system "cls" $move = $c_move game end system "cls" has_won end #================================== puts "Play vs. [1]Friend [2]AI" $opp = gets.to_i game