mygem_tictactoe 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +15 -0
  2. data/lib/mygem_tictactoe.rb +178 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZGQ3MTZmZGMyYjA2YzBmMjIyODdlNWU1NWIzZWMxNWE2ZTU0NmU0MA==
5
+ data.tar.gz: !binary |-
6
+ OWEzOTI0Y2Y1Y2I5YmZhZDMzNGQzMzI4N2EzZjY2NWIwN2E1MjVkZA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YmJlZjE5OWY5ZmM5MzM0M2I5YjNlNTI0Zjc0NGEyMTg1MzUzMmQzNmQ2ZDYx
10
+ YWY2MTBlYjExZGQ3MmE2ZjhmZWMwODE3YzNjNDc0NDNkZmJmMDgzNTc0ZTEx
11
+ ZDAwMmNiOTI1ZDIyMzc2MjNhMWNlMzBjMTcxZmU3YmI1MGFiYjg=
12
+ data.tar.gz: !binary |-
13
+ ZGIxZTJmZjk5YzNlNTI2ZDMxZDA0NmQ4M2U3M2ZmYmQ2ZDM3NjI1MGFiODdj
14
+ OGU5OWQ3NWZmZmE5MTI2Y2JjZDFhMzRiZTkzY2ZiNDBjNTYyOWMyYTBhOTQ5
15
+ NzUzYzhhNDk4MmI0Y2I4NDc0NGFkN2Y2MDAxZTZkZTA0NGUyOGI=
@@ -0,0 +1,178 @@
1
+
2
+ class Gato
3
+
4
+ module Patrones
5
+
6
+ Ganando =
7
+ [[(/ OO....../),0],[(/O..O.. ../),6],
8
+ [(/......OO /),8],[(/.. ..O..O/),2],
9
+ [(/ ..O..O../),0],[(/...... OO/),6],
10
+ [(/..O..O.. /),8],[(/OO ....../),2],
11
+ [(/ ...O...O/),0],[(/..O.O. ../),6],
12
+ [(/O...O... /),8],[(/.. .O.O../),2],
13
+ [(/O O....../),1],[(/O.. ..O../),3],
14
+ [(/......O O/),7],[(/..O.. ..O/),5],
15
+ [(/. ..O..O./),1],[(/... OO.../),3],
16
+ [(/.O..O.. ./),7],[(/...OO .../),5]]
17
+
18
+ Bloqueando =
19
+ [[(/ X . X /),1],[(/ XX....../),0],[(/X..X.. ../),6],
20
+ [(/......XX /),8],[(/.. ..X..X/),2],[(/ ..X..X../),0],
21
+ [(/...... XX/),6],[(/..X..X.. /),8],[(/XX ....../),2],
22
+ [(/ ...X...X/),0],[(/..X.X. ../),6],[(/X...X... /),8],
23
+ [(/.. .X.X../),2],[(/X X....../),1],[(/X.. ..X../),3],
24
+ [(/......X X/),7],[(/..X.. ..X/),5],[(/. ..X..X./),1],
25
+ [(/... XX.../),3],[(/.X..X.. ./),7],[(/...XX .../),5],
26
+ [(/ X X.. ../),0],[(/ ..X.. X /),6],[(/.. ..X X /),8],
27
+ [(/ X ..X.. /),2],[(/ XX.. ../),0],[(/X.. .. X /),6],
28
+ [(/.. .XX /),8],[(/X ..X.. /),2],[(/ X ..X../),0],
29
+ [(/ ..X.. X/),6],[(/..X.. X /),8],[(/X ..X.. /),2]]
30
+
31
+ Gano =
32
+ [[(/OOO....../),:O], [(/...OOO.../),:O],
33
+ [(/......OOO/),:O], [(/O..O..O../),:O],
34
+ [(/.O..O..O./),:O], [(/..O..O..O/),:O],
35
+ [(/O...O...O/),:O], [(/..O.O.O../),:O],
36
+ [(/XXX....../),:X], [(/...XXX.../),:X],
37
+ [(/......XXX/),:X], [(/X..X..X../),:X],
38
+ [(/.X..X..X./),:X], [(/..X..X..X/),:X],
39
+ [(/X...X...X/),:X], [(/..X.X.X../),:X]]
40
+ end
41
+
42
+
43
+ def initialize
44
+ @mapa = [].fill(0, 9) { " " }
45
+ @jugadores = { :X => 'X', :O => 'O' }
46
+ @turno = :X
47
+ end
48
+
49
+
50
+ def jugar
51
+ banderaGanadora = false
52
+ 9.times do
53
+ if @turno === :X
54
+ mostrar
55
+ movimientoJugador
56
+ else
57
+ movimientoCPU
58
+ end
59
+ ganador = posibleGanador
60
+ unless ganador.nil?
61
+ mostrar
62
+ print "\n#{ganador} es el ganador!\n"
63
+ banderaGanadora = true
64
+ break
65
+ end
66
+ @turno = (@turno === :X) ? :O : :X
67
+ end
68
+ if (!banderaGanadora)
69
+ mostrar
70
+ print "\nJuego empate.\n"
71
+ end
72
+ end
73
+
74
+
75
+ private
76
+
77
+ def movimientoJugador
78
+ print "Haga su movimiento por favor [0-8]: "
79
+ movimientoPosicion = gets.chomp.to_i
80
+ unless (0..8) === movimientoPosicion
81
+ print "\nMovimiento invalido: #{movimientoPosicion}. Por favor re-intentar.\n"
82
+ movimientoJugador
83
+ return
84
+ end
85
+ if @mapa.at(movimientoPosicion) != ' '
86
+ print "\nEspacio ocupado. Por favor re-intentar.\n"
87
+ movimientoJugador
88
+ return
89
+ end
90
+ movimiento movimientoPosicion, 'X'
91
+ end
92
+
93
+
94
+ def movimientoCPU
95
+ movimientoPosicion = movimientoPatronGanando
96
+ if movimientoPosicion.nil?
97
+ movimientoPosicion = movimientoPatronBloqueando
98
+ if movimientoPosicion.nil?
99
+ movimientoPosicion = primerMovimiento
100
+ end
101
+ end
102
+ movimiento movimientoPosicion, 'O'
103
+ end
104
+
105
+
106
+ def movimiento(pos, piece)
107
+ @mapa.delete_at(pos)
108
+ @mapa.insert(pos, piece)
109
+ end
110
+
111
+
112
+ def mostrar
113
+ print "\n\n"
114
+ print " #{@mapa[0]} |"
115
+ print " #{@mapa[1]} |"
116
+ print " #{@mapa[2]}"
117
+ print "\n---+---+---\n"
118
+ print " #{@mapa[3]} |"
119
+ print " #{@mapa[4]} |"
120
+ print " #{@mapa[5]}"
121
+ print "\n---+---+---\n"
122
+ print " #{@mapa[6]} |"
123
+ print " #{@mapa[7]} |"
124
+ print " #{@mapa[8]}"
125
+ print "\n\n"
126
+ end
127
+
128
+
129
+ def posibleGanador
130
+ symbol = nil
131
+ array = Patrones::Gano.find { |p| p.first =~ @mapa.join }
132
+ unless array.nil?
133
+ symbol = (array.last === :X) ? 'X' : 'O'
134
+ end
135
+ symbol
136
+ end
137
+
138
+
139
+ def movimientoPatronGanando
140
+ movimientoPosicion = nil
141
+ array = Patrones::Ganando.find { |p| p.first =~ @mapa.join }
142
+ unless array.nil?
143
+ movimientoPosicion = array.last
144
+ end
145
+ movimientoPosicion
146
+ end
147
+
148
+
149
+ def movimientoPatronBloqueando
150
+ movimientoPosicion = nil
151
+ array = Patrones::Bloqueando.find { |p| p.first =~ @mapa.join }
152
+ unless array.nil?
153
+ movimientoPosicion = array.last
154
+ end
155
+ movimientoPosicion
156
+ end
157
+
158
+
159
+ def primerMovimiento
160
+ if @mapa.at(4) == ' '
161
+ movimientoPosicion = 4
162
+ else
163
+ movimientoPosicion = @mapa.index(' ')
164
+ end
165
+ movimientoPosicion
166
+ end
167
+ end
168
+
169
+
170
+ if __FILE__ == $0
171
+ print "Digite su nombre: "
172
+ nombre = gets.chomp
173
+ print "\n\n#{nombre} Usted es X."
174
+ Gato.new.jugar
175
+ end
176
+
177
+
178
+
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mygem_tictactoe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Pincelancer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This tictactoe is the best.
14
+ email:
15
+ - pincelancer@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/mygem_tictactoe.rb
21
+ homepage: http://pincelancer.com/
22
+ licenses: []
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.0.3
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: A simple tictactoe scrypt
44
+ test_files: []