Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.72 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)) || (!Free_place(arr, 1) && !Free_place(arr, 5)) || (!Free_place(arr, 3) && !Free_place(arr, 5)) || (!Free_place(arr, 4) && !Free_place(arr, 2)) || (!Free_place(arr, 6) && !Free_place(arr, 2)) || (!Free_place(arr, 7) && !Free_place(arr, 5)))
  171. {
  172. comp_pos = GetRandPlace(arr);
  173. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  174. }
  175. else if (!Free_place(arr, 0) && Free_place(arr, 2))
  176. {
  177. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  178. }
  179. else if (!Free_place(arr, 1) && Free_place(arr, 5))
  180. {
  181. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  182. }
  183. else if (!Free_place(arr, 3) && Free_place(arr, 5))
  184. {
  185. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  186. }
  187. else if (!Free_place(arr, 4) && Free_place(arr, 2))
  188. {
  189. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  190. }
  191. else if (!Free_place(arr, 6) && Free_place(arr, 2))
  192. {
  193. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  194. }
  195. else if (!Free_place(arr, 7) && Free_place(arr, 5))
  196. {
  197. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  198. }
  199. else
  200. {
  201. comp_pos = GetRandPlace(arr);
  202. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  203. }
  204. }
  205. else
  206. {
  207. if (Free_place(arr, 1))
  208. {
  209. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  210. }
  211. else
  212. {
  213. if (!Free_place(arr, 3) && Free_place(arr, 6))
  214. {
  215. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  216. }
  217. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  218. {
  219. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  220. }
  221. else
  222. {
  223. comp_pos = GetRandPlace(arr);
  224. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  225. }
  226. }
  227. }
  228. }
  229. if (n == 9)
  230. {
  231. if (player == 1)
  232. {
  233. 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)))
  234. {
  235. comp_pos = GetRandPlace(arr);
  236. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  237. }
  238. else if (!Free_place(arr, 4) && Free_place(arr, 0))
  239. {
  240. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  241. }
  242. else if (!Free_place(arr, 4) && !Free_place(arr, 0))
  243. {
  244. if (!Free_place(arr, 2) && Free_place(arr, 7))
  245. {
  246. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  247. }
  248. else
  249. {
  250. comp_pos = GetRandPlace(arr);
  251. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  252. }
  253. }
  254. else if (!Free_place(arr, 0) && Free_place(arr, 5))
  255. {
  256. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  257. }
  258. else if (!Free_place(arr, 1) && Free_place(arr, 3))
  259. {
  260. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  261. }
  262. else if (!Free_place(arr, 2) && Free_place(arr, 5))
  263. {
  264. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  265. }
  266. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  267. {
  268. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  269. }
  270. else if (!Free_place(arr, 7) && Free_place(arr, 5))
  271. {
  272. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  273. }
  274. else if (!Free_place(arr, 8) && Free_place(arr, 3))
  275. {
  276. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  277. }
  278. else
  279. {
  280. comp_pos = GetRandPlace(arr);
  281. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  282. }
  283. }
  284. else
  285. {
  286. if (Free_place(arr, 4))
  287. {
  288. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  289. }
  290. else
  291. {
  292. if (!Free_place(arr, 0) && Free_place(arr, 8))
  293. {
  294. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  295. }
  296. else if (!Free_place(arr, 1) && Free_place(arr, 7))
  297. {
  298. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  299. }
  300. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  301. {
  302. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  303. }
  304. else if (!Free_place(arr, 3) && Free_place(arr, 5))
  305. {
  306. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  307. }
  308. else if (!Free_place(arr, 5) && Free_place(arr, 3))
  309. {
  310. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  311. }
  312. else if (!Free_place(arr, 6) && Free_place(arr, 2))
  313. {
  314. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  315. }
  316. else if (!Free_place(arr, 7) && Free_place(arr, 1))
  317. {
  318. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  319. }
  320. else if (!Free_place(arr, 8) && Free_place(arr, 0))
  321. {
  322. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  323. }
  324. }
  325. }
  326. }
  327. if (n == 10)
  328. {
  329. if (player == 1)
  330. {
  331. if ((!Free_place(arr, 1) && !Free_place(arr, 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_place(arr, 6) && !Free_place(arr, 3) && !Free(arr, 6, 3)) || (!Free_place(arr, 8) && !Free_place(arr, 3) && !Free(arr, 8, 3)))
  332. {
  333. comp_pos = GetRandPlace(arr);
  334. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  335. }
  336. else if (!Free_place(arr, 2) && Free_place(arr, 5))
  337. {
  338. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  339. }
  340. else if (!Free_place(arr, 2) && !Free_place(arr, 5))
  341. {
  342. if (!Free_place(arr, 0) && Free_place(arr, 8))
  343. {
  344. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  345. }
  346. else
  347. {
  348. comp_pos = GetRandPlace(arr);
  349. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  350. }
  351. }
  352. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  353. {
  354. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  355. }
  356. else if (!Free_place(arr, 7) && !Free_place(arr, 4))
  357. {
  358. if (!Free_place(arr, 9) && Free_place(arr, 1))
  359. {
  360. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  361. }
  362. else
  363. {
  364. comp_pos = GetRandPlace(arr);
  365. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  366. }
  367. }
  368. else if (!Free_place(arr, 0) && Free_place(arr, 3))
  369. {
  370. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  371. }
  372. else if (!Free_place(arr, 0) && !Free_place(arr, 3))
  373. {
  374. if (!Free_place(arr, 5) && Free_place(arr, 8))
  375. {
  376. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  377. }
  378. else if (!Free_place(arr, 9) && Free_place(arr, 6))
  379. {
  380. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  381. }
  382. else
  383. {
  384. comp_pos = GetRandPlace(arr);
  385. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  386. }
  387. }
  388. else if (!Free_place(arr, 9) && Free_place(arr, 1))
  389. {
  390. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  391. }
  392. else if (!Free_place(arr, 9) && !Free_place(arr, 1))
  393. {
  394. if (!Free_place(arr, 3) && Free_place(arr, 6))
  395. {
  396. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  397. }
  398. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  399. {
  400. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  401. }
  402. else
  403. {
  404. comp_pos = GetRandPlace(arr);
  405. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  406. }
  407. }
  408. else if (!Free_place(arr, 1) && Free_place(arr, 6))
  409. {
  410. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  411. }
  412. else if (!Free_place(arr, 3) && Free_place(arr, 6))
  413. {
  414. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  415. }
  416. else if (!Free_place(arr, 4) && Free_place(arr, 1))
  417. {
  418. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  419. }
  420. else if (!Free_place(arr, 5) && Free_place(arr, 8))
  421. {
  422. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  423. }
  424. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  425. {
  426. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  427. }
  428. else if (!Free_place(arr, 8) && Free_place(arr, 3))
  429. {
  430. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  431. }
  432. else
  433. {
  434. comp_pos = GetRandPlace(arr);
  435. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  436. }
  437. }
  438. else
  439. {
  440. if (Free_place(arr, 2))
  441. {
  442. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  443. }
  444. else if (!Free_place(arr, 5) && Free_place(arr, 7))
  445. {
  446. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  447. }
  448. else if (!Free_place(arr, 8) && Free_place(arr, 6))
  449. {
  450. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  451. }
  452. else
  453. {
  454. comp_pos = GetRandPlace(arr);
  455. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  456. }
  457. }
  458. }
  459. if (n == 11)
  460. {
  461. if (player == 1)
  462. {
  463. if ((!Free_place(arr, 2) && !Free_place(arr, 6) && !Free(arr, 2, 6)) || (!Free_place(arr, 8) && !Free_place(arr, 4)))
  464. {
  465. comp_pos = GetRandPlace(arr);
  466. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  467. }
  468. else if (!Free_place(arr, 3) && !Free_place(arr, 6))
  469. {
  470. if (!Free_place(arr, 0) && Free_place(arr, 9))
  471. {
  472. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  473. }
  474. else if (!Free_place(arr, 1) && Free_place(arr, 9))
  475. {
  476. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  477. }
  478. else
  479. {
  480. comp_pos = GetRandPlace(arr);
  481. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  482. }
  483. }
  484. else if (!Free_place(arr, 4) && !Free_place(arr, 7))
  485. {
  486. if (!Free_place(arr, 9) && Free_place(arr, 1))
  487. {
  488. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  489. }
  490. else if (!Free_place(arr, 10) && Free_place(arr, 1))
  491. {
  492. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  493. }
  494. else
  495. {
  496. comp_pos = GetRandPlace(arr);
  497. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  498. }
  499. }
  500. else if (!Free_place(arr, 0) && Free_place(arr, 6))
  501. {
  502. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  503. }
  504. else if (!Free_place(arr, 0) && !Free_place(arr, 6))
  505. {
  506. if (!Free_place(arr, 3) && Free_place(arr, 9))
  507. {
  508. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  509. }
  510. else if (!Free_place(arr, 9) && Free_place(arr, 3))
  511. {
  512. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  513. }
  514. else if (!Free_place(arr, 2) && Free_place(arr, 8))
  515. {
  516. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  517. }
  518. else if (!Free_place(arr, 4) && Free_place(arr, 8))
  519. {
  520. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  521. }
  522. else if (!Free_place(arr, 8) && Free_place(arr, 2))
  523. {
  524. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  525. }
  526. else if (!Free_place(arr, 10) && Free_place(arr, 2))
  527. {
  528. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  529. }
  530. else
  531. {
  532. comp_pos = GetRandPlace(arr);
  533. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  534. }
  535. }
  536. else if (!Free_place(arr, 9) && Free_place(arr, 6))
  537. {
  538. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  539. }
  540. else if (!Free_place(arr, 9) && !Free_place(arr, 6))
  541. {
  542. if (!Free_place(arr, 4) && Free_place(arr, 1))
  543. {
  544. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  545. }
  546. else if (!Free_place(arr, 0) && Free_place(arr, 3))
  547. {
  548. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  549. }
  550. else
  551. {
  552. comp_pos = GetRandPlace(arr);
  553. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  554. }
  555. }
  556. else if (!Free_place(arr, 1) && Free_place(arr, 4))
  557. {
  558. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  559. }
  560. else if (!Free_place(arr, 1) && !Free_place(arr, 4))
  561. {
  562. if (!Free_place(arr, 6) && Free_place(arr, 9))
  563. {
  564. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  565. }
  566. else if (!Free_place(arr, 10) && Free_place(arr, 7))
  567. {
  568. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  569. }
  570. else
  571. {
  572. comp_pos = GetRandPlace(arr);
  573. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  574. }
  575. }
  576. else if (!Free_place(arr, 10) && Free_place(arr, 4))
  577. {
  578. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  579. }
  580. else if (!Free_place(arr, 10) && !Free_place(arr, 4))
  581. {
  582. if (!Free_place(arr, 7) && Free_place(arr, 1))
  583. {
  584. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  585. }
  586. else if (!Free_place(arr, 1) && Free_place(arr, 7))
  587. {
  588. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  589. }
  590. else if (!Free_place(arr, 0) && Free_place(arr, 6))
  591. {
  592. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  593. }
  594. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  595. {
  596. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  597. }
  598. else if (!Free_place(arr, 6) && Free_place(arr, 0))
  599. {
  600. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  601. }
  602. else if (!Free_place(arr, 8) && Free_place(arr, 0))
  603. {
  604. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  605. }
  606. else
  607. {
  608. comp_pos = GetRandPlace(arr);
  609. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  610. }
  611. }
  612. else if (!Free_place(arr, 2) && Free_place(arr, 6))
  613. {
  614. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  615. }
  616. else if (!Free_place(arr, 3) && Free_place(arr, 6))
  617. {
  618. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  619. }
  620. else if (!Free_place(arr, 4) && Free_place(arr, 7))
  621. {
  622. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  623. }
  624. else if (!Free_place(arr, 8) && Free_place(arr, 4))
  625. {
  626. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  627. }
  628. else if (!Free_place(arr, 7) && Free_place(arr, 4))
  629. {
  630. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  631. }
  632. else if (!Free_place(arr, 6) && Free_place(arr, 3))
  633. {
  634. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  635. }
  636. else
  637. {
  638. comp_pos = GetRandPlace(arr);
  639. arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
  640. }
  641. }
  642. else
  643. {
  644. if (Free_place(arr, 5))
  645. {
  646. arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
  647. }
  648. else
  649. {
  650. if (!Free_place(arr, 0) && Free_place(arr, 10))
  651. {
  652. arr[10] = Xor(player); MarkNeighbors(arr); comp_coord = 10;
  653. }
  654. else if (!Free_place(arr, 1) && Free_place(arr, 9))
  655. {
  656. arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
  657. }
  658. else if (!Free_place(arr, 2) && Free_place(arr, 8))
  659. {
  660. arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
  661. }
  662. else if (!Free_place(arr, 3) && Free_place(arr, 7))
  663. {
  664. arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
  665. }
  666. else if (!Free_place(arr, 4) && Free_place(arr, 6))
  667. {
  668. arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
  669. }
  670. else if (!Free_place(arr, 6) && Free_place(arr, 4))
  671. {
  672. arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
  673. }
  674. else if (!Free_place(arr, 7) && Free_place(arr, 3))
  675. {
  676. arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
  677. }
  678. else if (!Free_place(arr, 8) && Free_place(arr, 2))
  679. {
  680. arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
  681. }
  682. else if (!Free_place(arr, 9) && Free_place(arr, 1))
  683. {
  684. arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
  685. }
  686. else if (!Free_place(arr, 10) && Free_place(arr, 0))
  687. {
  688. arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
  689. }
  690. }
  691. }
  692. }
  693. }
  694. public:
  695. Kamilla_tigr(QWidget *parent = 0, Qt::WFlags flags = 0);
  696. bool IsLost()
  697. {
  698. for (int j = 0; j < l_size; j++)
  699. {
  700. if (free_pts[j])
  701. return false;
  702. }
  703. return true;
  704. /*if (free_pts[0] && free_pts[1])
  705. return false;
  706. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  707. return false;
  708. for (int j = 1; j < l_size - 1; j++)
  709. {
  710. if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
  711. return false;
  712. }
  713. return true;*/
  714. }
  715. bool IsAvailablePos(int pos)
  716. {
  717. if (free_pts[pos])
  718. return true;
  719. return false;
  720. /*if (pos > l_size - 1)
  721. return false;
  722. if (pos == l_size - 1)
  723. {
  724. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  725. return true;
  726. else
  727. return false;
  728. }
  729. if (pos == 0)
  730. {
  731. if (free_pts[0] && free_pts[1])
  732. return true;
  733. else
  734. return false;
  735. }
  736. if (free_pts[pos - 1] && free_pts[pos + 1] && free_pts[pos])
  737. return true;
  738. return false;*/
  739. }
  740. int GetAITurn()
  741. {
  742. if (IsLost())
  743. return -1;
  744.  
  745. comp_coord = -1;
  746. solve(vector<int> (1), live_player, l_size);
  747. /*if (free_pts[0] && free_pts[1])
  748. return 0;
  749. if (free_pts[l_size - 1] && free_pts[l_size - 2])
  750. return l_size - 1;
  751. for (int j = 1; j < l_size - 1; j++)
  752. {
  753. if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
  754. return j;
  755. }
  756. return -1;*/
  757. int i;
  758. i = 10;
  759. i -= 100;
  760. return comp_coord;
  761. }
  762. void AITurn()
  763. {
  764. int pos = GetAITurn();
  765.  
  766. if (pos == -1)
  767. {
  768. gamefinished = 1;
  769. ui.label->setText(QString("You won!"));
  770. return;
  771. //exit(0);
  772. }
  773. QString num;
  774. num.setNum(pos, 10);
  775. free_pts[pos] = 0;
  776. if (pos + 1 < l_size)
  777. free_pts[pos + 1] = 0;
  778. if (pos - 1 >= 0)
  779. free_pts[pos - 1] = 0;
  780. col[pos] = 1;
  781. if (pos + 1 < l_size)
  782. col[pos + 1] = 2;
  783. if (pos - 1 >= 0)
  784. col[pos - 1] = 2;
  785. ui.label->setText(QString("AI selected position ") + num);
  786. if (currentturn == 2)
  787. currentturn = 1;
  788. else
  789. currentturn = 2;
  790. this->repaint();
  791. // curtimer->start(3000);
  792. }
  793. void PlayerTurn()
  794. {
  795. if (IsLost())
  796. {
  797. gamefinished = 1;
  798. ui.label->setText(QString("You lost!"));
  799. return;
  800. //exit(0);
  801. }
  802. ui.label->setText(QString("Select the position"));
  803.  
  804. }
  805. virtual void paintEvent ( QPaintEvent * event )
  806. {
  807.  
  808. if (currentturn == 0)
  809. return;
  810. QPainter pnt(this);
  811. int x = 0;
  812.  
  813. for (int j = 0; j < free_pts.size(); j++)
  814. {
  815. QPoint tmp(x, DRAW_Y);
  816.  
  817. if (col[j] == 2)
  818. {
  819. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nobody_pt.jpg"));
  820. }
  821. if (col[j] == 1)
  822. {
  823. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt_ai.jpg"));
  824. }
  825. if (free_pts[j])
  826. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\free_pt.jpg"));
  827. else if (!col[j])
  828. pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt.jpg"));
  829.  
  830. x += PIC_SIZE;
  831. }
  832. if (gamefinished)
  833. return;
  834. if (currentturn == live_player)
  835. {
  836. PlayerTurn();
  837. }
  838. else
  839. {
  840. AITurn();
  841. }
  842. }
  843. virtual void mousePressEvent ( QMouseEvent * event )
  844. {
  845. QPoint ev = event->pos();
  846.  
  847. int pos = ev.x() / PIC_SIZE;
  848. if (ev.y() > DRAW_Y + PIC_SIZE || ev.y() < DRAW_Y)
  849. return;
  850. if (IsAvailablePos(pos))
  851. {
  852. SetPlayerTurn(pos, live_player, vector<int> (1));
  853. free_pts[pos] = 0;
  854. if (pos + 1 < l_size)
  855. free_pts[pos + 1] = 0;
  856. if (pos - 1 >= 0)
  857. free_pts[pos - 1] = 0;
  858. if (pos + 1 < l_size)
  859. col[pos + 1] = 2;
  860. if (pos - 1 >= 0)
  861. col[pos - 1] = 2;
  862. if (currentturn == 2)
  863. currentturn = 1;
  864. else
  865. currentturn = 2;
  866. this->repaint();
  867. }
  868. }
  869. ~Kamilla_tigr();
  870.  
  871. private:
  872. bool CheckNum(QString str)
  873. {
  874. bool ok = 1;
  875. if (str.isEmpty())
  876. return false;
  877. int num = str.toInt(&ok, 10);
  878. if (!ok)
  879. return false;
  880. if (num >= 6 && num <= 15)
  881. return true;
  882. return false;
  883. }
  884. Ui::Kamilla_tigrClass ui;
  885.  
  886. public slots:
  887. void CurTimer()
  888. {
  889. if (currentturn == 2)
  890. currentturn = 1;
  891. else
  892. currentturn = 2;
  893. curtimer->stop();
  894. this->repaint();
  895. }
  896. void ButtonClicked()
  897. {
  898. QString text = ui.lineEdit->text();
  899. if (CheckNum(text))
  900. {
  901. bool ok = 1;
  902. l_size = text.toInt(&ok, 10);
  903. ui.num_players_button->setEnabled(false);
  904. if (ui.radio_player_1->isChecked())
  905. live_player = 1;
  906. else
  907. live_player = 2;
  908. ui.radio_player_1->setEnabled(false);
  909. ui.radio_player_2->setEnabled(false);
  910. currentturn = 1;
  911. free_pts.resize(l_size, 1);
  912. col.resize(l_size, 0);
  913. arr.resize(l_size, 0);
  914. this->repaint();
  915. }
  916. }
  917. };
  918.  
  919. #endif // KAMILLA_TIGR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement