Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.03 KB | None | 0 0
  1. #ifndef KAMILLA_TIGR_H
  2. #define KAMILLA_TIGR_H
  3.  
  4. #include <QtGui/QWidget>
  5. #include "QPainter"
  6. #include "QString"
  7. #include "QTimer"
  8. #include "QPoint"
  9. #include "QMouseEvent"
  10. #include "QPixmap"
  11. #include "vector"
  12. #include "ui_kamilla_tigr.h"
  13.  
  14. #define PIC_SIZE 50
  15. #define DRAW_Y 400
  16.  
  17. using std::vector;
  18.  
  19. class Kamilla_tigr : public QWidget
  20. {
  21. Q_OBJECT
  22.  
  23. vector<bool> free_pts;
  24. vector<int> col;
  25. QTimer *curtimer;
  26. int l_size;
  27. int live_player;
  28. int currentturn;
  29. int gamefinished;
  30. int comp_coord;
  31. vector<int> arr;
  32.  
  33. void MarkNeighbors(vector <int> & barr)
  34. {
  35. int i;
  36. if (arr[0] == 1 || arr[0] == 2)
  37. arr[1] = 3;
  38. if (arr[arr.size()-1] == 1 || arr[arr.size()-1] == 2)
  39. arr[arr.size()-2] = 3;
  40. for (i = 1; i < arr.size()-1; i++)
  41. {
  42. if (arr[i] == 1 || arr[i] == 2)
  43. {
  44. arr[i-1] = 3;
  45. arr[i+1] = 3;
  46. }
  47. }
  48. }
  49.  
  50. int Xor(int player)
  51. {
  52. if (player == 1)
  53. return 2;
  54. else
  55. return 1;
  56. }
  57.  
  58. void SetPlayerTurn(int pos, int player, vector <int> & barr)
  59. {
  60. arr[pos] = player;
  61. MarkNeighbors(arr);
  62. }
  63.  
  64. int Free_place(vector <int> barr, int pos)
  65. {
  66. if (arr[pos] != 1 && arr[pos] != 2)
  67. return 1;
  68. else return 0;
  69. }
  70.  
  71. int Free(vector <int> barr, int pos1, int pos2)
  72. {
  73. int i;
  74. for (i = 0; i < arr.size(); i++)
  75. {
  76. if (i != pos1 && i != pos2)
  77. if (arr[i] != 1 && arr[i] != 2)
  78. return 1;
  79. }
  80. return 0;
  81. }
  82.  
  83. int GetRandPlace(vector <int> barr)
  84. {
  85. int i;
  86. for (i = 0; i < arr.size(); i++)
  87. if (arr[i] == 0)
  88. {
  89. return i;
  90. }
  91. }
  92.  
  93. void solve(vector <int> & barr, int player, int n)
  94. {
  95. int i, pos, comp_pos;
  96. if (n == 6)
  97. {
  98. if (player == 1)
  99. {
  100. if (!Free_place(arr, 4) && Free_place(arr, 1))
  101. {
  102. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  103. }
  104. else if (!Free_place(arr, 1) && Free_place(arr, 4))
  105. {
  106. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  107. }
  108. else
  109. {
  110. comp_pos = GetRandPlace(arr);
  111. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  112. }
  113. }
  114. else
  115. {
  116. if (Free_place(arr, 0))
  117. {
  118. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  119. }
  120. else
  121. {
  122. comp_pos = GetRandPlace(arr);
  123. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  124. }
  125. }
  126. }
  127. if (n == 7)
  128. {
  129. if (player == 1)
  130. {
  131. if (!Free_place(arr, 0) && Free_place(arr, 4))
  132. {
  133. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  134. }
  135. else if (!Free_place(arr, 2) && Free_place(arr, 4))
  136. {
  137. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  138. }
  139. else if (!Free_place(arr, 4) && Free_place(arr, 2))
  140. {
  141. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  142. }
  143. else if (!Free_place(arr, 6) && Free_place(arr, 2))
  144. {
  145. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  146. }
  147. else
  148. {
  149. comp_pos = GetRandPlace(arr);
  150. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  151. }
  152. }
  153. else
  154. {
  155. if (Free_place(arr, 3))
  156. {
  157. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  158. }
  159. else
  160. {
  161. comp_pos = GetRandPlace(arr);
  162. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  163. }
  164. }
  165. }
  166. if (n == 8)
  167. {
  168. if (player == 1)
  169. {
  170. if (!Free_place(arr, 0) && Free_place(arr, 2))
  171. {
  172. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  173. }
  174. else if (!Free_place(arr, 1) && Free_place(arr, 5))
  175. {
  176. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  177. }
  178. else if (!Free_place(arr, 3) && Free_place(arr, 5))
  179. {
  180. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  181. }
  182. else if (!Free_place(arr, 4) && Free_place(arr, 2))
  183. {
  184. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  185. }
  186. else if (!Free_place(arr, 6) && Free_place(arr, 2))
  187. {
  188. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  189. }
  190. else if (!Free_place(arr, 7) && Free_place(arr, 5))
  191. {
  192. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  193. }
  194. else
  195. {
  196. comp_pos = GetRandPlace(arr);
  197. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  198. }
  199. }
  200. else
  201. {
  202. if (Free_place(arr, 1))
  203. {
  204. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  205. }
  206. else
  207. {
  208. if (!Free_place(arr, 3) && Free_place(arr, 6))
  209. {
  210. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  211. }
  212. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  213. {
  214. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  215. }
  216. else
  217. {
  218. comp_pos = GetRandPlace(arr);
  219. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  220. }
  221. }
  222. }
  223. }
  224. if (n == 9)
  225. {
  226. if (player == 1)
  227. {
  228. if ((!Free_place(arr, 0) && !Free_place(arr, 5)) || (!Free_place(arr, 1) && !Free_place(arr, 3)) || (!Free_place(arr, 2) && !Free_place(arr, 5)) || (!Free_place(arr, 6) && !Free_place(arr, 3)) || (!Free_place(arr, 7) && !Free_place(arr, 5)) || (!Free_place(arr, 8) && !Free_place(arr, 3)))
  229. {
  230. comp_pos = GetRandPlace(arr);
  231. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  232. }
  233. else if (!Free_place(arr, 4) && Free_place(arr, 0))
  234. {
  235. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  236. }
  237. else if (!Free_place(arr, 4) && !Free_place(arr, 0))
  238. {
  239. if (!Free_place(arr, 2) && Free_place(arr, 7))
  240. {
  241. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  242. }
  243. else
  244. {
  245. comp_pos = GetRandPlace(arr);
  246. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  247. }
  248. }
  249. else if (!Free_place(arr, 0) && Free_place(arr, 5))
  250. {
  251. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  252. }
  253. else if (!Free_place(arr, 1) && Free_place(arr, 3))
  254. {
  255. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  256. }
  257. else if (!Free_place(arr, 2) && Free_place(arr, 5))
  258. {
  259. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  260. }
  261. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  262. {
  263. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  264. }
  265. else if (!Free_place(arr, 7) && Free_place(arr, 5))
  266. {
  267. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  268. }
  269. else if (!Free_place(arr, 8) && Free_place(arr, 3))
  270. {
  271. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  272. }
  273. else
  274. {
  275. comp_pos = GetRandPlace(arr);
  276. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  277. }
  278. }
  279. else
  280. {
  281. if (Free_place(arr, 4))
  282. {
  283. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  284. }
  285. else
  286. {
  287. if (!Free_place(arr, 0) && Free_place(arr, 8))
  288. {
  289. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  290. }
  291. else if (!Free_place(arr, 1) && Free_place(arr, 7))
  292. {
  293. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  294. }
  295. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  296. {
  297. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  298. }
  299. else if (!Free_place(arr, 3) && Free_place(arr, 5))
  300. {
  301. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  302. }
  303. else if (!Free_place(arr, 5) && Free_place(arr, 3))
  304. {
  305. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  306. }
  307. else if (!Free_place(arr, 6) && Free_place(arr, 2))
  308. {
  309. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  310. }
  311. else if (!Free_place(arr, 7) && Free_place(arr, 1))
  312. {
  313. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  314. }
  315. else if (!Free_place(arr, 8) && Free_place(arr, 0))
  316. {
  317. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  318. }
  319. }
  320. }
  321. }
  322. if (n == 10)
  323. {
  324. if (player == 1)
  325. {
  326. if ((!Free_place(arr, 1) && !Free_place(arr, 6) && !Free(arr, 1, 6)) || (!Free_place(arr, 3) && !Free_place(arr, 6) && !Free(arr, 3, 6)) || (!Free_place(arr, 4) && !Free_place(arr, 1) && !Free(arr, 4, 1)) || (!Free_place(arr, 5) && !Free_place(arr, 8) && !Free(arr, 5, 8)) || (!Free_place(arr, 6) && !Free_place(arr, 3) && !Free(arr, 6, 3)) || (!Free_place(arr, 8) && !Free_place(arr, 3) && !Free(arr, 8, 3)) || (!Free_place(arr, 2) && !Free_place(arr, 5)) || (!Free_place(arr, 7) && !Free_place(arr, 4)))
  327. {
  328. comp_pos = GetRandPlace(arr);
  329. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  330. }
  331. else if (!Free_place(arr, 0) && Free_place(arr, 3))
  332. {
  333. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  334. }
  335. else if (!Free_place(arr, 0) && !Free_place(arr, 3))
  336. {
  337. if (!Free_place(arr, 5) && Free_place(arr, 8))
  338. {
  339. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  340. }
  341. else if (!Free_place(arr, 9) && Free_place(arr, 6))
  342. {
  343. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  344. }
  345. else
  346. {
  347. comp_pos = GetRandPlace(arr);
  348. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  349. }
  350. }
  351. else if (!Free_place(arr, 9) && Free_place(arr, 1))
  352. {
  353. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  354. }
  355. else if (!Free_place(arr, 9) && !Free_place(arr, 1))
  356. {
  357. if (!Free_place(arr, 3) && Free_place(arr, 6))
  358. {
  359. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  360. }
  361. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  362. {
  363. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  364. }
  365. else
  366. {
  367. comp_pos = GetRandPlace(arr);
  368. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  369. }
  370. }
  371. else if (!Free_place(arr, 1) && Free_place(arr, 6))
  372. {
  373. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  374. }
  375. else if (!Free_place(arr, 3) && Free_place(arr, 6))
  376. {
  377. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  378. }
  379. else if (!Free_place(arr, 4) && Free_place(arr, 1))
  380. {
  381. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  382. }
  383. else if (!Free_place(arr, 5) && Free_place(arr, 8))
  384. {
  385. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  386. }
  387. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  388. {
  389. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  390. }
  391. else if (!Free_place(arr, 8) && Free_place(arr, 3))
  392. {
  393. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  394. }
  395. else if (!Free_place(arr, 2) && Free_place(arr, 5))
  396. {
  397. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  398. }
  399. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  400. {
  401. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  402. }
  403. else
  404. {
  405. comp_pos = GetRandPlace(arr);
  406. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  407. }
  408. }
  409. else
  410. {
  411. if (Free_place(arr, 2))
  412. {
  413. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  414. }
  415. else if (!Free_place(arr, 5) && Free_place(arr, 7))
  416. {
  417. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  418. }
  419. else if (!Free_place(arr, 8) && Free_place(arr, 6))
  420. {
  421. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  422. }
  423. else
  424. {
  425. comp_pos = GetRandPlace(arr);
  426. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  427. }
  428. }
  429. }
  430. if (n == 11)
  431. {
  432. if (player == 1)
  433. {
  434. if ((!Free_place(arr, 2) && !Free_place(arr, 6) && !Free(arr, 2, 6)) || (!Free_place(arr, 3) && !Free_place(arr, 6)) || (!Free_place(arr, 4) && !Free_place(arr, 7)) || (!Free_place(arr, 8) && !Free_place(arr, 4)&& !Free(arr, 8, 4)) || (!Free_place(arr, 7) && !Free_place(arr, 4) && !Free(arr, 7, 4)))
  435. {
  436. comp_pos = GetRandPlace(arr);
  437. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  438. }
  439. else if (!Free_place(arr, 0) && Free_place(arr, 6))
  440. {
  441. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  442. }
  443. else if (!Free_place(arr, 0) && !Free_place(arr, 6))
  444. {
  445. if (!Free_place(arr, 3) && Free_place(arr, 9))
  446. {
  447. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  448. }
  449. else if (!Free_place(arr, 9) && Free_place(arr, 3))
  450. {
  451. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  452. }
  453. else if (!Free_place(arr, 2) && Free_place(arr, 8))
  454. {
  455. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  456. }
  457. else if (!Free_place(arr, 4) && Free_place(arr, 8))
  458. {
  459. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  460. }
  461. else if (!Free_place(arr, 8) && Free_place(arr, 2))
  462. {
  463. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  464. }
  465. else if (!Free_place(arr, 10) && Free_place(arr, 2))
  466. {
  467. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  468. }
  469. else
  470. {
  471. comp_pos = GetRandPlace(arr);
  472. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  473. }
  474. }
  475. else if (!Free_place(arr, 9) && Free_place(arr, 6))
  476. {
  477. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  478. }
  479. else if (!Free_place(arr, 9) && !Free_place(arr, 6))
  480. {
  481. if (!Free_place(arr, 4) && Free_place(arr, 1))
  482. {
  483. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  484. }
  485. else if (!Free_place(arr, 0) && Free_place(arr, 3))
  486. {
  487. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  488. }
  489. else
  490. {
  491. comp_pos = GetRandPlace(arr);
  492. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  493. }
  494. }
  495. else if (!Free_place(arr, 1) && Free_place(arr, 4))
  496. {
  497. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  498. }
  499. else if (!Free_place(arr, 1) && !Free_place(arr, 4))
  500. {
  501. if (!Free_place(arr, 6) && Free_place(arr, 9))
  502. {
  503. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  504. }
  505. else if (!Free_place(arr, 10) && Free_place(arr, 7))
  506. {
  507. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  508. }
  509. else
  510. {
  511. comp_pos = GetRandPlace(arr);
  512. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  513. }
  514. }
  515. else if (!Free_place(arr, 10) && Free_place(arr, 4))
  516. {
  517. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  518. }
  519. else if (!Free_place(arr, 10) && !Free_place(arr, 4))
  520. {
  521. if (!Free_place(arr, 7) && Free_place(arr, 1))
  522. {
  523. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  524. }
  525. else if (!Free_place(arr, 1) && Free_place(arr, 7))
  526. {
  527. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  528. }
  529. else if (!Free_place(arr, 0) && Free_place(arr, 6))
  530. {
  531. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  532. }
  533. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  534. {
  535. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  536. }
  537. else if (!Free_place(arr, 6) && Free_place(arr, 0))
  538. {
  539. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  540. }
  541. else if (!Free_place(arr, 8) && Free_place(arr, 0))
  542. {
  543. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  544. }
  545. else
  546. {
  547. comp_pos = GetRandPlace(arr);
  548. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  549. }
  550. }
  551. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  552. {
  553. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  554. }
  555. else if (!Free_place(arr, 3) && Free_place(arr, 6))
  556. {
  557. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  558. }
  559. else if (!Free_place(arr, 4) && Free_place(arr, 7))
  560. {
  561. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  562. }
  563. else if (!Free_place(arr, 8) && Free_place(arr, 4))
  564. {
  565. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  566. }
  567. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  568. {
  569. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  570. }
  571. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  572. {
  573. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  574. }
  575. else
  576. {
  577. comp_pos = GetRandPlace(arr);
  578. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  579. }
  580. }
  581. else
  582. {
  583. if (Free_place(arr, 5))
  584. {
  585. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  586. }
  587. else
  588. {
  589. if (!Free_place(arr, 0) && Free_place(arr, 10))
  590. {
  591. arr[10] = Xor(player); MarkNeighbors(arr); comp_coord = 10;
  592. }
  593. else if (!Free_place(arr, 1) && Free_place(arr, 9))
  594. {
  595. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  596. }
  597. else if (!Free_place(arr, 2) && Free_place(arr, 8))
  598. {
  599. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  600. }
  601. else if (!Free_place(arr, 3) && Free_place(arr, 7))
  602. {
  603. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  604. }
  605. else if (!Free_place(arr, 4) && Free_place(arr, 6))
  606. {
  607. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  608. }
  609. else if (!Free_place(arr, 6) && Free_place(arr, 4))
  610. {
  611. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  612. }
  613. else if (!Free_place(arr, 7) && Free_place(arr, 3))
  614. {
  615. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  616. }
  617. else if (!Free_place(arr, 8) && Free_place(arr, 2))
  618. {
  619. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  620. }
  621. else if (!Free_place(arr, 9) && Free_place(arr, 1))
  622. {
  623. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  624. }
  625. else if (!Free_place(arr, 10) && Free_place(arr, 0))
  626. {
  627. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  628. }
  629. }
  630. }
  631. }
  632. }
  633. public:
  634. Kamilla_tigr(QWidget *parent = 0, Qt::WFlags flags = 0);
  635. bool IsLost()
  636. {
  637. for (int j = 0; j < l_size; j++)
  638. {
  639. if (free_pts[j])
  640. return false;
  641. }
  642. return true;
  643. /*if (free_pts[0] && free_pts[1])
  644. return false;
  645. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  646. return false;
  647. for (int j = 1; j < l_size - 1; j++)
  648. {
  649. if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
  650. return false;
  651. }
  652. return true;*/
  653. }
  654. bool IsAvailablePos(int pos)
  655. {
  656. if (free_pts[pos])
  657. return true;
  658. return false;
  659. /*if (pos > l_size - 1)
  660. return false;
  661. if (pos == l_size - 1)
  662. {
  663. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  664. return true;
  665. else
  666. return false;
  667. }
  668. if (pos == 0)
  669. {
  670. if (free_pts[0] && free_pts[1])
  671. return true;
  672. else
  673. return false;
  674. }
  675. if (free_pts[pos - 1] && free_pts[pos + 1] && free_pts[pos])
  676. return true;
  677. return false;*/
  678. }
  679. int GetAITurn()
  680. {
  681. if (IsLost())
  682. return -1;
  683.  
  684. comp_coord = -1;
  685. solve(vector<int> (1), live_player, l_size);
  686. /*if (free_pts[0] && free_pts[1])
  687. return 0;
  688. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  689. return l_size - 1;
  690. for (int j = 1; j < l_size - 1; j++)
  691. {
  692. if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
  693. return j;
  694. }
  695. return -1;*/
  696. int i;
  697. i = 10;
  698. i -= 100;
  699. return comp_coord;
  700. }
  701. void AITurn()
  702. {
  703. int pos = GetAITurn();
  704.  
  705. if (pos == -1)
  706. {
  707. gamefinished = 1;
  708. ui.label->setText(QString("You won!"));
  709. return;
  710. //exit(0);
  711. }
  712. QString num;
  713. num.setNum(pos, 10);
  714. free_pts[pos] = 0;
  715. if (pos + 1 < l_size)
  716. free_pts[pos + 1] = 0;
  717. if (pos - 1 >= 0)
  718. free_pts[pos - 1] = 0;
  719. col[pos] = 1;
  720. if (pos + 1 < l_size)
  721. col[pos + 1] = 2;
  722. if (pos - 1 >= 0)
  723. col[pos - 1] = 2;
  724. ui.label->setText(QString("AI selected position ") + num);
  725. if (currentturn == 2)
  726. currentturn = 1;
  727. else
  728. currentturn = 2;
  729. this->repaint();
  730. // curtimer->start(3000);
  731. }
  732. void PlayerTurn()
  733. {
  734. if (IsLost())
  735. {
  736. gamefinished = 1;
  737. ui.label->setText(QString("You lost!"));
  738. return;
  739. //exit(0);
  740. }
  741. ui.label->setText(QString("Select the position"));
  742.  
  743. }
  744. virtual void paintEvent ( QPaintEvent * event )
  745. {
  746.  
  747. if (currentturn == 0)
  748. return;
  749. QPainter pnt(this);
  750. int x = 0;
  751.  
  752. for (int j = 0; j < free_pts.size(); j++)
  753. {
  754. QPoint tmp(x, DRAW_Y);
  755.  
  756. if (col[j] == 2)
  757. {
  758. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nobody_pt.jpg"));
  759. }
  760. if (col[j] == 1)
  761. {
  762. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt_ai.jpg"));
  763. }
  764. if (free_pts[j])
  765. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\free_pt.jpg"));
  766. else if (!col[j])
  767. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt.jpg"));
  768.  
  769. x += PIC_SIZE;
  770. }
  771. if (gamefinished)
  772. return;
  773. if (currentturn == live_player)
  774. {
  775. PlayerTurn();
  776. }
  777. else
  778. {
  779. AITurn();
  780. }
  781. }
  782. virtual void mousePressEvent ( QMouseEvent * event )
  783. {
  784. QPoint ev = event->pos();
  785.  
  786. int pos = ev.x() / PIC_SIZE;
  787. if (ev.y() > DRAW_Y + PIC_SIZE || ev.y() < DRAW_Y)
  788. return;
  789. if (IsAvailablePos(pos))
  790. {
  791. SetPlayerTurn(pos, live_player, vector<int> (1));
  792. free_pts[pos] = 0;
  793. if (pos + 1 < l_size)
  794. free_pts[pos + 1] = 0;
  795. if (pos - 1 >= 0)
  796. free_pts[pos - 1] = 0;
  797. if (pos + 1 < l_size)
  798. col[pos + 1] = 2;
  799. if (pos - 1 >= 0)
  800. col[pos - 1] = 2;
  801. if (currentturn == 2)
  802. currentturn = 1;
  803. else
  804. currentturn = 2;
  805. this->repaint();
  806. }
  807. }
  808. ~Kamilla_tigr();
  809.  
  810. private:
  811. bool CheckNum(QString str)
  812. {
  813. bool ok = 1;
  814. if (str.isEmpty())
  815. return false;
  816. int num = str.toInt(&ok, 10);
  817. if (!ok)
  818. return false;
  819. if (num >= 6 && num <= 15)
  820. return true;
  821. return false;
  822. }
  823. Ui::Kamilla_tigrClass ui;
  824.  
  825. public slots:
  826. void CurTimer()
  827. {
  828. if (currentturn == 2)
  829. currentturn = 1;
  830. else
  831. currentturn = 2;
  832. curtimer->stop();
  833. this->repaint();
  834. }
  835. void ButtonClicked()
  836. {
  837. QString text = ui.lineEdit->text();
  838. if (CheckNum(text))
  839. {
  840. bool ok = 1;
  841. l_size = text.toInt(&ok, 10);
  842. ui.num_players_button->setEnabled(false);
  843. if (ui.radio_player_1->isChecked())
  844. live_player = 1;
  845. else
  846. live_player = 2;
  847. ui.radio_player_1->setEnabled(false);
  848. ui.radio_player_2->setEnabled(false);
  849. currentturn = 1;
  850. free_pts.resize(l_size, 1);
  851. col.resize(l_size, 0);
  852. arr.resize(l_size, 0);
  853. this->repaint();
  854. }
  855. }
  856. };
  857.  
  858. #endif // KAMILLA_TIGR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement