fork download
  1. :- use_module(library(pce)).
  2.  
  3.  
  4. initial_state([0,0,0,0,0,0,0,0,0]).
  5.  
  6. �������_�����([|_], 0,).
  7. �������_�����([_|[1|]], �����, �������) :- �����1 is �����-1, �������_�����([1|], �����1, �������).
  8.  
  9. ��������_�_������([], �������, 0, [�������]).
  10. ��������_�_������([|], �������, 0, [�������|[|]]).
  11. ��������_�_������([|], �������, �����, [|1]) :- �����1 is �����-1,
  12. ��������_�_������(, �������, �����1,1) .
  13.  
  14. �������_��_������([_|], 0,).
  15. �������_��_������([|], �����, [|1]) :- �����1 is �����-1,
  16. �������_��_������(, �����1,1).
  17.  
  18. win_stateX([1,1,1,_,_,_,_,_,_]).
  19. win_stateX([_,_,_,1,1,1,_,_,_]).
  20. win_stateX([_,_,_,_,_,_,1,1,1]).
  21. win_stateX([1,_,_,1,_,_,1,_,_]).
  22. win_stateX([_,1,_,_,1,_,_,1,_]).
  23. win_stateX([_,_,1,_,_,1,_,_,1]).
  24. win_stateX([1,_,_,_,1,_,_,_,1]).
  25. win_stateX([_,_,1,_,1,_,1,_,_]).
  26.  
  27. win_stateO([2,2,2,_,_,_,_,_,_]).
  28. win_stateO([_,_,_,2,2,2,_,_,_]).
  29. win_stateO([_,_,_,_,_,_,2,2,2]).
  30. win_stateO([2,_,_,2,_,_,2,_,_]).
  31. win_stateO([_,2,_,_,2,_,_,2,_]).
  32. win_stateO([_,_,2,_,_,2,_,_,2]).
  33. win_stateO([2,_,_,_,2,_,_,_,2]).
  34. win_stateO([_,_,2,_,2,_,2,_,_]).
  35.  
  36.  
  37. pattern([_, _,_, _, 0, _, _, _, _], 1, 1) :- !.
  38.  
  39. pattern([0,2,2,_,_,_,_,_,_], 0, 0) :- !.
  40. pattern([_,_,_,0,2,2,_,_,_], 0, 1) :- !.
  41. pattern([_,_,_,_,_,_,0,2,2], 0, 2) :- !.
  42. pattern([0,_,_,2,_,_,2,_,_], 0, 0) :- !.
  43. pattern([_,0,_,_,2,_,_,2,_], 1, 0) :- !.
  44. pattern([_,_,0,_,_,2,_,_,2], 2, 0) :- !.
  45. pattern([0,_,_,_,2,_,_,_,2], 0, 0) :- !.
  46. pattern([_,_,0,_,2,_,2,_,_], 2, 0) :- !.
  47.  
  48. pattern([2,0,2,_,_,_,_,_,_], 1, 0) :- !.
  49. pattern([_,_,_,2,0,2,_,_,_], 1, 1) :- !.
  50. pattern([_,_,_,_,_,_,2,0,2], 1, 2) :- !.
  51. pattern([2,_,_,0,_,_,2,_,_], 0, 1) :- !.
  52. pattern([_,2,_,_,0,_,_,2,_], 1, 1) :- !.
  53. pattern([_,_,2,_,_,0,_,_,2], 2, 1) :- !.
  54. pattern([2,_,_,_,0,_,_,_,2], 1, 1) :- !.
  55. pattern([_,_,2,_,0,_,2,_,_], 1, 1) :- !.
  56.  
  57. pattern([2,2,0,_,_,_,_,_,_], 2, 0) :- !.
  58. pattern([_,_,_,2,2,0,_,_,_], 2, 1) :- !.
  59. pattern([_,_,_,_,_,_,2,2,0], 2, 2) :- !.
  60. pattern([2,_,_,2,_,_,0,_,_], 0, 2) :- !.
  61. pattern([_,2,_,_,2,_,_,0,_], 1, 2) :- !.
  62. pattern([_,_,2,_,_,2,_,_,0], 2, 2) :- !.
  63. pattern([2,_,_,_,2,_,_,_,0], 2, 2) :- !.
  64. pattern([_,_,2,_,2,_,0,_,_], 0, 2) :- !.
  65.  
  66.  
  67. pattern([0,1,1,_,_,_,_,_,_], 0, 0) :- !.
  68. pattern([_,_,_,0,1,1,_,_,_], 0, 1) :- !.
  69. pattern([_,_,_,_,_,_,0,1,1], 0, 2) :- !.
  70. pattern([0,_,_,1,_,_,1,_,_], 0, 0) :- !.
  71. pattern([_,0,_,_,1,_,_,1,_], 1, 0) :- !.
  72. pattern([_,_,0,_,_,1,_,_,1], 2, 0) :- !.
  73. pattern([0,_,_,_,1,_,_,_,1], 0, 0) :- !.
  74. pattern([_,_,0,_,1,_,1,_,_], 2, 0) :- !.
  75.  
  76. pattern([1,0,1,_,_,_,_,_,_], 1, 0) :- !.
  77. pattern([_,_,_,1,0,1,_,_,_], 1, 1) :- !.
  78. pattern([_,_,_,_,_,_,1,0,1], 1, 2) :- !.
  79. pattern([1,_,_,0,_,_,1,_,_], 0, 1) :- !.
  80. pattern([_,1,_,_,0,_,_,1,_], 1, 1) :- !.
  81. pattern([_,_,1,_,_,0,_,_,1], 2, 1) :- !.
  82. pattern([1,_,_,_,0,_,_,_,1], 1, 1) :- !.
  83. pattern([_,_,1,_,0,_,1,_,_], 1, 1) :- !.
  84.  
  85. pattern([1,1,0,_,_,_,_,_,_], 2, 0) :- !.
  86. pattern([_,_,_,1,1,0,_,_,_], 2, 1) :- !.
  87. pattern([_,_,_,_,_,_,1,1,0], 2, 2) :- !.
  88. pattern([1,_,_,1,_,_,0,_,_], 0, 2) :- !.
  89. pattern([_,1,_,_,1,_,_,0,_], 1, 2) :- !.
  90. pattern([_,_,1,_,_,1,_,_,0], 2, 2) :- !.
  91. pattern([1,_,_,_,1,_,_,_,0], 2, 2) :- !.
  92. pattern([_,_,1,_,1,_,0,_,_], 0, 2) :- !.
  93.  
  94.  
  95.  
  96. pattern([_, 0,_, _, 2, _, _, _, 1], 1, 0).
  97. pattern([_, 0,1, _, 2, _, _, _, _], 1, 0).
  98. pattern([_, 0,_, _, 2, _, 1, _, _], 1, 0).
  99. pattern([1, 0,_, _, 2, _, _, _, _], 1, 0).
  100.  
  101. pattern([0, _,_, _, 1, _, _, _, _], 0, 0).
  102. pattern([_, _,_, _, 1, _, _, _, _], 0, 2).
  103. pattern([_, _,_, _, 1, _, _, _, _], 2, 0).
  104. pattern([_, _,_, _, 1, _, _, _, _], 2, 2).
  105.  
  106. pattern(_, 0, 0).
  107. pattern(_, 1, 0).
  108. pattern(_, 2, 0).
  109. pattern(_, 1, 0).
  110. pattern(_, 1, 1).
  111. pattern(_, 1, 2).
  112. pattern(_, 2, 0).
  113. pattern(_, 2, 1).
  114. pattern(_, 2, 2).
  115.  
  116.  
  117.  
  118.  
  119. x_o(0, ' ').
  120. x_o(1, 'X').
  121. x_o(2, 'O').
  122.  
  123.  
  124. show(State) :-
  125. �������_�����(State, 0, A),
  126. �������_�����(State, 1, B),
  127. �������_�����(State, 2, C),
  128. �������_�����(State, 3, D),
  129. �������_�����(State, 4, E),
  130. �������_�����(State, 5, F),
  131. �������_�����(State, 6, G),
  132. �������_�����(State, 7, H),
  133. �������_�����(State, 8, I),
  134. x_o(A, A1),
  135. x_o(B, B1),
  136. x_o(C, C1),
  137. x_o(D, D1),
  138. x_o(E, E1),
  139. x_o(F, F1),
  140. x_o(G, G1),
  141. x_o(H, H1),
  142. x_o(I, I1),
  143. write(" "),
  144. write(" "),
  145. write("0"),
  146. write("1"),
  147. write("2"),
  148. write('\n'),
  149. write(" "),
  150. write(" "),
  151. write("-"),
  152. write("-"),
  153. write("-"),
  154. write('\n'),
  155. write("0"),
  156. write("|"),
  157. write(A1),
  158. write(B1),
  159. write(C1),
  160. write('\n'),
  161. write("1"),
  162. write("|"),
  163. write(D1),
  164. write(E1),
  165. write(F1),
  166. write('\n'),
  167. write("2"),
  168. write("|"),
  169. write(G1),
  170. write(H1),
  171. write(I1),
  172. write('\n').
  173.  
  174. is_free(X, Y, State) :-
  175. N is Y*3+X,
  176. �������_�����(State, N, A),
  177. A = 0.
  178.  
  179. make_move(X, Y, State, Type, State_next) :-
  180. is_free(X, Y, State),
  181. N is Y*3+X,
  182. �������_��_������(State, N, State1),
  183. ��������_�_������(State1, Type, N, State_next),
  184. show(State_next).
  185.  
  186. check(State) :-
  187. win_stateX(StateX),
  188. member(State, [StateX]),
  189. write("�������� ��������"),write('\n'),
  190. new(Dialog, dialog("�������� ��������")),
  191. new(F, text("�������� ��������")),
  192. send(Dialog, append, F),
  193. send(Dialog, open), !.
  194.  
  195. check(State) :-
  196. win_stateO(StateO),
  197. member(State, [StateO]),
  198. write("������ ��������"),write('\n'),
  199. new(Dialog, dialog("������ ��������")),
  200. new(F, text("������ ��������")),
  201. send(Dialog, append, F),
  202. send(Dialog, open), !.
  203.  
  204. check(State) :-
  205. not(member(0, State)),
  206. write("�����"),write('\n'),
  207. new(Dialog, dialog("�����")),
  208. new(F, text("�����")),
  209. send(Dialog, append, F),
  210. send(Dialog, open),!.
  211.  
  212. next_move(State, N) :-
  213. I is N mod 2,
  214. I = 0,
  215. Type is 1,
  216. write("������� ����� ������� ������ ����"),write('\n'),
  217. read(X),
  218. write("������� ����� ������ ������ ����"),write('\n'),
  219. read(Y),
  220. make_move(X, Y, State, Type, NewState), !,
  221. not(check(NewState)),
  222. N1 is N+1,
  223. next_move(NewState, N1).
  224.  
  225. next_move(State, N) :-
  226. I is N mod 2,
  227. I = 1,
  228. Type is 2,
  229. pattern(State, X, Y),
  230. make_move(X, Y, State, Type, NewState), !,
  231. not(check(NewState)),
  232. N1 is N+1,
  233. next_move(NewState, N1).
  234.  
  235.  
  236.  
  237. game():-
  238. initial_state(State),
  239. next_move(State, 0).
  240.  
  241. menu():-
  242. new(Main, dialog('����')),
  243. send_list(Main, append, [
  244. button('������ ����', message(@prolog, init)),
  245. button('�����', message(Main, destroy))
  246. ]), send(Main, open).
  247.  
  248. init() :-
  249. new(Game, dialog('����')),
  250. new(X_11, button('X')),
  251. new(X_12, button('X')),
  252. new(X_13, button('X')),
  253.  
  254. new(X_14, button('X')),
  255. new(X_15, button('X')),
  256. new(X_16, button('X')),
  257.  
  258. new(X_17, button('X')),
  259. new(X_18, button('X')),
  260. new(X_19, button('X')),
  261.  
  262. new(X_21,button('���', message(@prolog, change, X_11, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  263. new(X_22,button('���', message(@prolog, change, X_12, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  264. new(X_23,button('���', message(@prolog, change, X_13, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  265. send(Game, append, X_11),
  266. send(Game, append, X_12, right),
  267. send(Game, append, X_13, right),
  268. send(Game, append, X_21, below),
  269. send(Game, append, X_22, right),
  270. send(Game, append, X_23, right),
  271.  
  272.  
  273. new(X_24,button('���', message(@prolog, change, X_14, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  274. new(X_25,button('���', message(@prolog, change, X_15, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  275. new(X_26,button('���', message(@prolog, change, X_16, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  276. send(Game, append, X_14, below),
  277. send(Game, append, X_15, right),
  278. send(Game, append, X_16, right),
  279. send(Game, append, X_24, below),
  280. send(Game, append, X_25, right),
  281. send(Game, append, X_26, right),
  282.  
  283.  
  284. new(X_27,button('���', message(@prolog, change, X_17, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  285. new(X_28,button('���', message(@prolog, change, X_18, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  286. new(X_29,button('���', message(@prolog, change, X_19, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19))),
  287. send(Game, append, X_17, below),
  288. send(Game, append, X_18, right),
  289. send(Game, append, X_19, right),
  290. send(Game, append, X_27, below),
  291. send(Game, append, X_28, right),
  292. send(Game, append, X_29, right),
  293.  
  294. send(Game, open),
  295. game1([X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19]).
  296.  
  297. game1(ListPole) :- change_view(ListPole, [0,0,0,0,0,0,0,0,0]).
  298.  
  299. change_view(ListPole, State) :-
  300. �������_�����(State, 0, A),
  301. �������_�����(State, 1, B),
  302. �������_�����(State, 2, C),
  303. �������_�����(State, 3, D),
  304. �������_�����(State, 4, E),
  305. �������_�����(State, 5, F),
  306. �������_�����(State, 6, G),
  307. �������_�����(State, 7, H),
  308. �������_�����(State, 8, I),
  309. x_o(A, A1),
  310. x_o(B, B1),
  311. x_o(C, C1),
  312. x_o(D, D1),
  313. x_o(E, E1),
  314. x_o(F, F1),
  315. x_o(G, G1),
  316. x_o(H, H1),
  317. x_o(I, I1),
  318. �������_�����(ListPole, 0, A2),
  319. �������_�����(ListPole, 1, B2),
  320. �������_�����(ListPole, 2, C2),
  321. �������_�����(ListPole, 3, D2),
  322. �������_�����(ListPole, 4, E2),
  323. �������_�����(ListPole, 5, F2),
  324. �������_�����(ListPole, 6, G2),
  325. �������_�����(ListPole, 7, H2),
  326. �������_�����(ListPole, 8, I2),
  327. send(A2, name, A1),
  328. send(B2, name, B1),
  329. send(C2, name, C1),
  330. send(D2, name, D1),
  331. send(E2, name, E1),
  332. send(F2, name, F1),
  333. send(G2, name, G1),
  334. send(H2, name, H1),
  335. send(I2, name, I1).
  336.  
  337. get_state(ListPole, [A, B, C, D, E, F, G, H, I]) :-
  338. write(ListPole),
  339. �������_�����(ListPole, 0, A2),
  340. write(A2),
  341. �������_�����(ListPole, 1, B2),
  342. �������_�����(ListPole, 2, C2),
  343. �������_�����(ListPole, 3, D2),
  344. �������_�����(ListPole, 4, E2),
  345. �������_�����(ListPole, 5, F2),
  346. �������_�����(ListPole, 6, G2),
  347. �������_�����(ListPole, 7, H2),
  348. �������_�����(ListPole, 8, I2),
  349. get(A2, name, A1),
  350. get(B2, name, B1),
  351. get(C2, name, C1),
  352. get(D2, name, D1),
  353. get(E2, name, E1),
  354. get(F2, name, F1),
  355. get(G2, name, G1),
  356. get(H2, name, H1),
  357. get(I2, name, I1),
  358. x_o(A, A1),
  359. x_o(B, B1),
  360. x_o(C, C1),
  361. x_o(D, D1),
  362. x_o(E, E1),
  363. x_o(F, F1),
  364. x_o(G, G1),
  365. x_o(H, H1),
  366. x_o(I, I1).
  367.  
  368. change(X, A, B, C, D, E, F, J, H, I) :-
  369. get(X, name, X1),
  370. %write(ListPole),
  371. x_o(N, X1),
  372. N = 0,
  373. send(X, name, "X"),
  374. get_state([A, B, C, D, E, F, J, H, I], State), !,
  375. not(check(State)),
  376. Type is 2,
  377. pattern(State, X0, Y0),
  378. make_move(X0, Y0, State, Type, NewState), !,
  379. change_view([A, B, C, D, E, F, J, H, I], NewState),
  380. not(check(NewState)).
  381.  
  382. % ���������() :-
  383. % game().
  384. %:- ���������.
  385. :-menu.
  386.  
  387.  
Success #stdin #stdout #stderr 0.16s 14516KB
stdin
Standard input is empty
stdout
[PCE fatal: @display/display: Failed to connect to X-server at `': no DISPLAY environment variable
*********************************************************************
* You MUST be running the X11 Windowing environment.  If you are,   *
* check the setting of your DISPLAY environment variable as well    *
* the access rights to your X11 server.  See xauth(1) and xhost(1). *
*********************************************************************
	in: 	<No exception goal>
]
Host stack:
stderr
ERROR: /home/TuZCGt/prog:6:21: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:7:21: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:9:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:10:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:11:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:14:21: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:15:21: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:125:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:176:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:182:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:300:24: Syntax error: Operator expected
ERROR: /home/TuZCGt/prog:339:24: Syntax error: Operator expected
     [29] pce_principal:new(_542, dialog(����))
     [28] menu
     [27] catch(user:menu, _494, system:'$exception_in_directive'(_494))
     [26] '$execute_directive_3'(menu)
     [21] '$load_file'('/home/TuZCGt/prog', '/home/TuZCGt/prog', _136, [if(not_loaded)])