mygem_tictactoe 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/lib/mygem_tictactoe.rb +178 -0
- 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: []
|