Prolog - necesito el juego del gato en prolog

 
Vista:

necesito el juego del gato en prolog

Publicado por johny (2 intervenciones) el 07/11/2006 19:32:49
espero que alla alguien que me quiera proporcionar su codigo del juego del gato es urgente y se los agradeceria gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:necesito el juego del gato en prolog

Publicado por zacarias blanco (1 intervención) el 06/12/2006 16:30:46
ni te preocupes, que aqui nunca responden ni madres, siempre dicen ay si!!! te respondemos inmediato, pasan los años y nomas nada, por eso haslo tu che webon jajajaj
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:necesito el juego del gato en prolog

Publicado por pako (2 intervenciones) el 12/12/2006 02:42:01
jajajajajaa chale que amargado estas compa deja que exista la esperanza entre los que bisitan el foro...
que vales...........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tengo tu programa que necesitas

Publicado por angelica huerta (1 intervención) el 21/11/2007 22:14:41
hola ya ponte hacer tus programas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:tengo tu programa que necesitas

Publicado por johny (2 intervenciones) el 26/11/2007 20:41:55
gracias por tu consejo quiero pensar que viste la fecha de mi pregunta, se que nunca es tarde me lo vas a mostrar o que oye de donde eres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:necesito el juego del gato en prolog

Publicado por jorge (1 intervención) el 01/05/2008 00:08:57
hola necesito el gato en prolog
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

si me pueden ayudar con el juego del gato en java

Publicado por fabricio (1 intervención) el 02/04/2009 08:10:18
necesito alguien me facilite el juego del gato en java
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Aqui tienes tu gato xD!

Publicado por Roberto (1 intervención) el 21/05/2015 04:42:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
go :- nl, write('Jugando Gato.'), nl, explainMoves, !, games, !, nl, nl.
 
explainMoves :- nl, write('Usted elige un movimiento al dar el número del'),
nl, write('lugar a la que desea mover:'), nl, nl,
write(' 1 | 2 | 3'), nl, printline,
write(' 4 | 5 | 6'), nl, printline,
write(' 7 | 8 | 9'), nl.
 
/* mostrar los números cuadrados */
 
printline :- write(' -----------'), nl.
 
games :- game, !, optionalGames.
 
optionalGames :- nl, write('Quieres Jugar Otra Vez (Si/No)? '),
inputResponse(Response1), !, process1(Response1).
okResponse1(si, yes). okResponse1('Si', yes). okResponse1(yes, yes).
okResponse1('SI', yes). okResponse1('Si', yes).
okResponse1(no, no). okResponse1('No', no). okResponse1(no, no).
okResponse1('NO', no). okResponse1('No', no).
process1(yes) :- games.
 
/* Continua Jugando */
 
inputResponse(Response) :- read(Answer), okResponse(Answer, Response), !.
 
/* Comprobación de errores y poner en forma estándar  */
inputResponse(Response) :- write('No es una respuesta válida -- Respuestas si o no: '),
inputResponse(Response). /* reinput */
 
/* Los formularios de respuesta estándar son sí y no: */
okResponse(si, yes). okResponse('Si', yes). okResponse(yes, yes).
okResponse('SI', yes). okResponse('Si', yes).
okResponse(no, no). okResponse('No', no). okResponse(no, no).
okResponse('NO', no). okResponse('No', no).
 
process(no) :- !. /* Fin del Juego */
process(yes) :- games. /* Continua Jugando */
 
game :- nl, write('Quieres ser X o O '), inputPlayer(Player), nl,
write('Quieres ir primero (Si/No)? '), inputResponse(PlayerMoves), !,
play(Player, PlayerMoves, 9, board(_,_,_,_,_,_,_,_,_)).
/* Tercero paso de juego es el # de plazas abiertas, originalmente 9 */
 
printBoard(board(V1, V2, V3, V4, V5, V6, V7, V8, V9)) :-
write(' '), writeVal(V1), write('|'), writeVal(V2), write('|'),
writeVal(V3), nl, printline,
write(' '), writeVal(V4), write('|'), writeVal(V5), write('|'),
writeVal(V6), nl, printline,
write(' '), writeVal(V7), write('|'), writeVal(V8), write('|'),
writeVal(V9), nl, nl.
 
writeVal(V) :- var(V), !, write(' ').
writeVal(x) :- write(' x ').
writeVal(o) :- write(' o ').
 
inputPlayer(Player) :- read(Player), x_or_o(Player). /* comprobación de error */
inputPlayer(Player) :- write('Not a valid response -- type x or o: '),
inputPlayer(Player).
 
x_or_o(x). x_or_o(o).
 
play(Player, PlayerMoves, NumOpen, Board) :-
oneMove(Player, PlayerMoves, Board), !,
negate(PlayerMoves, NewPlayerMoves),
Open is NumOpen - 1,
continuePlay(Player, NewPlayerMoves, Open, Board).
 
oneMove(Player, yes, Board) :- !, inputMove(Board, Location),
makeMove(m(Location, Player), Board). /* Jugador se mueve */
oneMove(Player, no, Board) :- opposite(Player, Computer),
generateMove(Computer, Board, Location),
write('Mi movimiento: '), write(Location), nl,
makeMove(m(Location, Computer), Board). /* Computadora se mueve */
 
negate(yes, no). negate(no, yes).
 
opposite(x, o). opposite(o, x).
 
inputMove(Board, Location) :- nl, write('Tu Movimiento: '), read(Location),
 
 
location(Location), argb(Location, Board, Val), var(Val). /* debe estar abierto */
inputMove(Board, Location) :- nl, write('Lugar no Disponible.'),
inputMove(Board, Location). /* Reingresa Locacion */
 
location(1). location(2). location(3). location(4). location(5).
location(6). location(7). location(8). location(9).
 
argb(1, board(Val,_,_,_,_,_,_,_,_), Val) :- !.
argb(2, board(_,Val,_,_,_,_,_,_,_), Val) :- !.
argb(3, board(_,_,Val,_,_,_,_,_,_), Val) :- !.
argb(4, board(_,_,_,Val,_,_,_,_,_), Val) :- !.
argb(5, board(_,_,_,_,Val,_,_,_,_), Val) :- !.
argb(6, board(_,_,_,_,_,Val,_,_,_), Val) :- !.
argb(7, board(_,_,_,_,_,_,Val,_,_), Val) :- !.
argb(8, board(_,_,_,_,_,_,_,Val,_), Val) :- !.
argb(9, board(_,_,_,_,_,_,_,_,Val), Val).
 
makeMove(m(Location, Val), Board) :- argb(Location, Board, Val),
printBoard(Board).
 
position(1, 1, 2). position(2, 1, 6). position(3, 1, 10).
position(4, 3, 2). position(5, 3, 6). position(6, 3, 10).
position(7, 5, 2). position(8, 5, 6). position(9, 5, 10).
 
generateMove(Computer, Board, Location) :- slice(Pos1, Pos2, Pos3),
argb(Pos1, Board, Val1), argb(Pos2, Board, Val2), argb(Pos3, Board, Val3),
winningMove(Computer, Pos1, Pos2, Pos3, Val1, Val2, Val3, Location), !.
 
/* Primero verifique si el equipo puede ganar con este movimiento */
 
generateMove(_, Board, Location) :- slice(Pos1, Pos2, Pos3),
argb(Pos1, Board, Val1), argb(Pos2, Board, Val2), argb(Pos3, Board, Val3),
forcedMove(Pos1, Pos2, Pos3, Val1, Val2, Val3, Location), !.
 
/* A continuación, compruebe si el equipo se ve obligado a moverse */
 
generateMove(Computer, Board, Pos3) :- diagonal(Pos1, Pos2, Pos3),
argb(Pos1, Board, Val1), argb(Pos2, Board, Val2), argb(Pos3, Board, Val3),
neighbors(Pos3, NbrA, NbrB),
argb(NbrA, Board, ValA), argb(NbrB, Board, ValB),
specialMove(Computer, Val1, Val2, Val3, ValA, ValB), !.
 
/* Computadora intenta 2 en una fila a lo largo de una diagonal con tercera plaza
* open and with enemy occupied cells as neighbors of location to which
* to move, which is a corner.
*/
 
generateMove(Computer, Board, Pos3) :- diagonal(Pos1, Pos2, Pos3),
argb(Pos1, Board, Val1), argb(Pos2, Board, Val2), argb(Pos3, Board, Val3),
neighbors(Pos3, NbrA, NbrB),
argb(NbrA, Board, ValA), argb(NbrB, Board, ValB),
special2Move(Computer, Val1, Val2, Val3, ValA, ValB), !.
 
/* Computer tries to get 2 in a row along a diagonal with 3rd square
* open, location to move to is a corner, and neighbors of this 
* corner are such that 1 is open and 1 is held by the opponent.
*/
 
generateMove(Computer, Board, Location) :- slice(Pos1, Pos2, Pos3),
argb(Pos1, Board, Val1), argb(Pos2, Board, Val2), argb(Pos3, Board, Val3),
goodMove(Computer, Pos1, Pos3, Val1, Val2, Val3, Location), !.
 
/* Computer tries to get 2 in a row with 3rd square open */
 
generateMove(_, Board, 5) :- argb(5, Board, Val), var(Val), !.
 
/* Computer takes the center square, if open */
 
generateMove(_, Board, Location) :- openCorner(Board, Location), !.
 
/* Computer prefers a corner position */
 
generateMove(_, Board, Location) :- location(Location),
argb(Location, Board, Val), var(Val), !.
 
/* tomar cualquier plaza abierta */
 
slice(1,2,3). slice(4,5,6). slice(7,8,9). slice(1,4,7).
slice(2,5,8). slice(3,6,9). slice(9,5,1). slice(7,5,3).
 
diagonal(1,5,9). diagonal(9,5,1). /* list both orders */
diagonal(3,5,7). diagonal(7,5,3).
 
neighbors(1,2,4). neighbors(3,2,6).
neighbors(7,4,8). neighbors(9,6,8).
 
/* Un movimiento que gana se encuentran si el equipo tiene 2 en una fila, tercera plaza abierta */
 
winningMove(Computer, Pos1,_,_, Val1, Val2, Val3, Pos1) :- var(Val1),
nonvar(Val2), Val2 == Computer, nonvar(Val3), Val3 == Computer, !.
winningMove(Computer,_, Pos2,_, Val1, Val2, Val3, Pos2) :- var(Val2),
nonvar(Val1), Val1 == Computer, nonvar(Val3), Val3 == Computer, !.
winningMove(Computer,_,_, Pos3, Val1, Val2, Val3, Pos3) :- var(Val3),
nonvar(Val1), Val1 == Computer, nonvar(Val2), Val2 == Computer, !.
 
/* Ordenador está obligado a mover si el jugador tiene 2 en una fila, tercera plaza abierta */
forcedMove(_,_, Pos3, Val1, Val2, Val3, Pos3) :- var(Val3),
nonvar(Val1), nonvar(Val2), Val1 == Val2, !.
forcedMove(_, Pos2,_, Val1, Val2, Val3, Pos2) :- var(Val2),
nonvar(Val1), nonvar(Val3), Val1 == Val3, !.
forcedMove(Pos1,_,_, Val1, Val2, Val3, Pos1) :- var(Val1),
nonvar(Val2), nonvar(Val3), Val2 == Val3, !.
 
/* This special move was added 11/13/93 to block a known way to beat
* the program. The suggested move is to Pos3.
*/
 
specialMove(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val2), var(Val3), nonvar(Val1), Val1 == Computer,
nonvar(ValA), ValA == Computer, nonvar(ValB), ValB == Computer, !.
specialMove(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val1), var(Val3), nonvar(Val2), Val2 == Computer,
nonvar(ValA), ValA == Computer, nonvar(ValB), ValB == Computer, !.
 
/* This special move was also added 11/13/93 to block a known way to
* beat the program. The suggested move is to Pos3.
*/
special2Move(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val2), var(Val3), nonvar(Val1), Val1 == Computer,
nonvar(ValA), ValA == Computer, var(ValB), !.
special2Move(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val1), var(Val3), nonvar(Val2), Val2 == Computer,
var(ValA), nonvar(ValB), ValB == Computer, !.
special2Move(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val2), var(Val3), nonvar(Val1), Val1 == Computer,
var(ValA), nonvar(ValB), ValB == Computer, !.
special2Move(Computer, Val1, Val2, Val3, ValA, ValB) :-
var(Val1), var(Val3), nonvar(Val2), Val2 == Computer,
nonvar(ValA), ValA == Computer, var(ValB), !.
 
/* A good move is for the computer to get 2 in a row, 3rd square open */
 
goodMove(Computer,_, Pos3, Val1, Val2, Val3, Pos3) :- var(Val2),
var(Val3), nonvar(Val1), Val1 == Computer, !.
goodMove(Computer, Pos1,_, Val1, Val2, Val3, Pos1) :- var(Val1),
var(Val3), nonvar(Val2), Val2 == Computer, !.
goodMove(Computer, Pos1, _, Val1, Val2, Val3, Pos1) :- var(Val1),
var(Val2), nonvar(Val3), Val3 == Computer, !.
 
openCorner(Board, Location) :- corner(Location),
argb(Location, Board, Val), var(Val).
 
corner(1). corner(3). corner(7). corner(9).
 
continuePlay(Player,_,_, Board) :- won(Who, Board),
 
/* comprobar si hay victoria */
!, winnerOut(Who, Player).
continuePlay(Player, PlayerMoves, NumOpen, Board) :- NumOpen < 3,
getMover(Player, PlayerMoves, Mover),
openSquares(Board, Positions),
willBeDraw(Mover, Positions, Board), !,
write('El juego es empate.'), nl.
 
/* If NumOpen is 1 or 2 we check for a draw */
continuePlay(Player, PlayerMoves, NumOpen, Board) :-
play(Player, PlayerMoves, NumOpen, Board).
 
/* Continuar el juego si no hay victoria o empate */
 
won(Who, Board) :- slice(Pos1, Pos2, Pos3), argb(Pos1, Board, Val1),
nonvar(Val1), Who = Val1, /* Who is potential winner */
argb(Pos2, Board, Val2), nonvar(Val2), Val1 == Val2,
argb(Pos3, Board, Val3), nonvar(Val3), Val1 == Val3.
 
winnerOut(Player, Player) :- !, write('You won. Congratulations!'), nl.
winnerOut(_,_) :- write('I won!'), nl.
 
/* getMover gets letter (x or o) of player ready to move */
getMover(Player, yes, Player) :- !.
getMover(Player, no, Computer) :- opposite(Player, Computer).
 
openSquares(Board, Positions) :-
findall(Pos, openPos(Board, Pos), Positions).
 
/* Positions becomes list of open positions in Board */
 
openPos(Board, Pos) :- location(Pos), argb(Pos, Board, Val), var(Val).
 
willBeDraw(Mover, Positions, Board) :-
not(couldBeWin(Mover, Positions, Board)).
 
couldBeWin(Mover, [Pos1, Pos2], Board) :-
test2(Mover, Pos1, Pos2, Board), !.
 
/* Comprueba si los posibles últimos 2 movimientos podrían conducir a una victoria */
couldBeWin(Mover, [Pos1, Pos2], Board) :- !,
test2(Mover, Pos2, Pos1, Board).
couldBeWin(Mover, [Pos], Board) :- test1(Mover, Pos, Board).
 
/* Comprueba si el último movimiento posible da un empate */
 
test2(Mover, Pos1, Pos2, Board) :- argb(Pos1, Board, Mover),
opposite(Mover, Next), argb(Pos2, Board, Next), win(Board).
 
/* Prueba si paso a Pos1 y el próximo movimiento para Pos2 conduce a ganador */
 
test1(Mover, Pos, Board) :- argb(Pos, Board, Mover), win(Board).
 
/* Prueba si paso a Pos conduce a ganador */
 
win(Board) :- won(x, Board), !.
win(Board) :- won(o, Board).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar