Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef KAMILLA_TIGR_H
- #define KAMILLA_TIGR_H
- #include <QtGui/QWidget>
- #include "QPainter"
- #include "QString"
- #include "QTimer"
- #include "QPoint"
- #include "QMouseEvent"
- #include "QPixmap"
- #include "vector"
- #include "ui_kamilla_tigr.h"
- #define PIC_SIZE 50
- #define DRAW_Y 400
- using std::vector;
- class Kamilla_tigr : public QWidget
- {
- Q_OBJECT
- vector<bool> free_pts;
- vector<int> col;
- QTimer *curtimer;
- int l_size;
- int live_player;
- int currentturn;
- int gamefinished;
- int comp_coord;
- vector<int> arr;
- void MarkNeighbors(vector <int> & barr)
- {
- int i;
- if (arr[0] == 1 || arr[0] == 2)
- arr[1] = 3;
- if (arr[arr.size()-1] == 1 || arr[arr.size()-1] == 2)
- arr[arr.size()-2] = 3;
- for (i = 1; i < arr.size()-1; i++)
- {
- if (arr[i] == 1 || arr[i] == 2)
- {
- arr[i-1] = 3;
- arr[i+1] = 3;
- }
- }
- }
- int Xor(int player)
- {
- if (player == 1)
- return 2;
- else
- return 1;
- }
- void SetPlayerTurn(int pos, int player, vector <int> & barr)
- {
- arr[pos] = player;
- MarkNeighbors(arr);
- }
- int Free_place(vector <int> barr, int pos)
- {
- if (arr[pos] != 1 && arr[pos] != 2)
- return 1;
- else return 0;
- }
- int Free(vector <int> barr, int pos1, int pos2)
- {
- int i;
- for (i = 0; i < arr.size(); i++)
- {
- if (i != pos1 && i != pos2)
- if (arr[i] != 1 && arr[i] != 2)
- return 1;
- }
- return 0;
- }
- int GetRandPlace(vector <int> barr)
- {
- int i;
- for (i = 0; i < arr.size(); i++)
- if (arr[i] == 0)
- {
- return i;
- }
- }
- void solve(vector <int> & barr, int player, int n)
- {
- int i, pos, comp_pos;
- if (n == 6)
- {
- if (player == 1)
- {
- if (!Free_place(arr, 4) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- }
- if (n == 7)
- {
- if (player == 1)
- {
- if (!Free_place(arr, 0) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- }
- if (n == 8)
- {
- if (player == 1)
- {
- 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)))
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 3) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else
- {
- if (!Free_place(arr, 3) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- }
- }
- if (n == 9)
- {
- if (player == 1)
- {
- 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)))
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- else if (!Free_place(arr, 4) && !Free_place(arr, 0))
- {
- if (!Free_place(arr, 2) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else
- {
- if (!Free_place(arr, 0) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 3) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 5) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- }
- }
- }
- if (n == 10)
- {
- if (player == 1)
- {
- 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)))
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else if (!Free_place(arr, 2) && !Free_place(arr, 5))
- {
- if (!Free_place(arr, 0) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 7) && !Free_place(arr, 4))
- {
- if (!Free_place(arr, 9) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 0) && !Free_place(arr, 3))
- {
- if (!Free_place(arr, 5) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 9) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 9) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 9) && !Free_place(arr, 1))
- {
- if (!Free_place(arr, 3) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 3) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 5) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 5) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- }
- if (n == 11)
- {
- if (player == 1)
- {
- if ((!Free_place(arr, 2) && !Free_place(arr, 6) && !Free(arr, 2, 6)) || (!Free_place(arr, 8) && !Free_place(arr, 4)))
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- else if (!Free_place(arr, 3) && !Free_place(arr, 6))
- {
- if (!Free_place(arr, 0) && Free_place(arr, 9))
- {
- arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 9))
- {
- arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 4) && !Free_place(arr, 7))
- {
- if (!Free_place(arr, 9) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 10) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 0) && !Free_place(arr, 6))
- {
- if (!Free_place(arr, 3) && Free_place(arr, 9))
- {
- arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
- }
- else if (!Free_place(arr, 9) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 10) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 9) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 9) && !Free_place(arr, 6))
- {
- if (!Free_place(arr, 4) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 1) && !Free_place(arr, 4))
- {
- if (!Free_place(arr, 6) && Free_place(arr, 9))
- {
- arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
- }
- else if (!Free_place(arr, 10) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 10) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 10) && !Free_place(arr, 4))
- {
- if (!Free_place(arr, 7) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else if (!Free_place(arr, 0) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 3) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else
- {
- comp_pos = GetRandPlace(arr);
- arr[comp_pos] = Xor(player); MarkNeighbors(arr); comp_coord = comp_pos;
- }
- }
- else
- {
- if (Free_place(arr, 5))
- {
- arr[5] = Xor(player); MarkNeighbors(arr); comp_coord = 5;
- }
- else
- {
- if (!Free_place(arr, 0) && Free_place(arr, 10))
- {
- arr[10] = Xor(player); MarkNeighbors(arr); comp_coord = 10;
- }
- else if (!Free_place(arr, 1) && Free_place(arr, 9))
- {
- arr[9] = Xor(player); MarkNeighbors(arr); comp_coord = 9;
- }
- else if (!Free_place(arr, 2) && Free_place(arr, 8))
- {
- arr[8] = Xor(player); MarkNeighbors(arr); comp_coord = 8;
- }
- else if (!Free_place(arr, 3) && Free_place(arr, 7))
- {
- arr[7] = Xor(player); MarkNeighbors(arr); comp_coord = 7;
- }
- else if (!Free_place(arr, 4) && Free_place(arr, 6))
- {
- arr[6] = Xor(player); MarkNeighbors(arr); comp_coord = 6;
- }
- else if (!Free_place(arr, 6) && Free_place(arr, 4))
- {
- arr[4] = Xor(player); MarkNeighbors(arr); comp_coord = 4;
- }
- else if (!Free_place(arr, 7) && Free_place(arr, 3))
- {
- arr[3] = Xor(player); MarkNeighbors(arr); comp_coord = 3;
- }
- else if (!Free_place(arr, 8) && Free_place(arr, 2))
- {
- arr[2] = Xor(player); MarkNeighbors(arr); comp_coord = 2;
- }
- else if (!Free_place(arr, 9) && Free_place(arr, 1))
- {
- arr[1] = Xor(player); MarkNeighbors(arr); comp_coord = 1;
- }
- else if (!Free_place(arr, 10) && Free_place(arr, 0))
- {
- arr[0] = Xor(player); MarkNeighbors(arr); comp_coord = 0;
- }
- }
- }
- }
- }
- public:
- Kamilla_tigr(QWidget *parent = 0, Qt::WFlags flags = 0);
- bool IsLost()
- {
- for (int j = 0; j < l_size; j++)
- {
- if (free_pts[j])
- return false;
- }
- return true;
- /*if (free_pts[0] && free_pts[1])
- return false;
- if (free_pts[l_size - 1] && free_pts[l_size - 2])
- return false;
- for (int j = 1; j < l_size - 1; j++)
- {
- if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
- return false;
- }
- return true;*/
- }
- bool IsAvailablePos(int pos)
- {
- if (free_pts[pos])
- return true;
- return false;
- /*if (pos > l_size - 1)
- return false;
- if (pos == l_size - 1)
- {
- if (free_pts[l_size - 1] && free_pts[l_size - 2])
- return true;
- else
- return false;
- }
- if (pos == 0)
- {
- if (free_pts[0] && free_pts[1])
- return true;
- else
- return false;
- }
- if (free_pts[pos - 1] && free_pts[pos + 1] && free_pts[pos])
- return true;
- return false;*/
- }
- int GetAITurn()
- {
- if (IsLost())
- return -1;
- comp_coord = -1;
- solve(vector<int> (1), live_player, l_size);
- /*if (free_pts[0] && free_pts[1])
- return 0;
- if (free_pts[l_size - 1] && free_pts[l_size - 2])
- return l_size - 1;
- for (int j = 1; j < l_size - 1; j++)
- {
- if (free_pts[j] && free_pts[j - 1] && free_pts[j + 1])
- return j;
- }
- return -1;*/
- int i;
- i = 10;
- i -= 100;
- return comp_coord;
- }
- void AITurn()
- {
- int pos = GetAITurn();
- if (pos == -1)
- {
- gamefinished = 1;
- ui.label->setText(QString("You won!"));
- return;
- //exit(0);
- }
- QString num;
- num.setNum(pos, 10);
- free_pts[pos] = 0;
- if (pos + 1 < l_size)
- free_pts[pos + 1] = 0;
- if (pos - 1 >= 0)
- free_pts[pos - 1] = 0;
- col[pos] = 1;
- if (pos + 1 < l_size)
- col[pos + 1] = 2;
- if (pos - 1 >= 0)
- col[pos - 1] = 2;
- ui.label->setText(QString("AI selected position ") + num);
- if (currentturn == 2)
- currentturn = 1;
- else
- currentturn = 2;
- this->repaint();
- // curtimer->start(3000);
- }
- void PlayerTurn()
- {
- if (IsLost())
- {
- gamefinished = 1;
- ui.label->setText(QString("You lost!"));
- return;
- //exit(0);
- }
- ui.label->setText(QString("Select the position"));
- }
- virtual void paintEvent ( QPaintEvent * event )
- {
- if (currentturn == 0)
- return;
- QPainter pnt(this);
- int x = 0;
- for (int j = 0; j < free_pts.size(); j++)
- {
- QPoint tmp(x, DRAW_Y);
- if (col[j] == 2)
- {
- pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nobody_pt.jpg"));
- }
- if (col[j] == 1)
- {
- pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt_ai.jpg"));
- }
- if (free_pts[j])
- pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\free_pt.jpg"));
- else if (!col[j])
- pnt.drawPixmap(tmp, QPixmap("c:\\tigr\\nfree_pt.jpg"));
- x += PIC_SIZE;
- }
- if (gamefinished)
- return;
- if (currentturn == live_player)
- {
- PlayerTurn();
- }
- else
- {
- AITurn();
- }
- }
- virtual void mousePressEvent ( QMouseEvent * event )
- {
- QPoint ev = event->pos();
- int pos = ev.x() / PIC_SIZE;
- if (ev.y() > DRAW_Y + PIC_SIZE || ev.y() < DRAW_Y)
- return;
- if (IsAvailablePos(pos))
- {
- SetPlayerTurn(pos, live_player, vector<int> (1));
- free_pts[pos] = 0;
- if (pos + 1 < l_size)
- free_pts[pos + 1] = 0;
- if (pos - 1 >= 0)
- free_pts[pos - 1] = 0;
- if (pos + 1 < l_size)
- col[pos + 1] = 2;
- if (pos - 1 >= 0)
- col[pos - 1] = 2;
- if (currentturn == 2)
- currentturn = 1;
- else
- currentturn = 2;
- this->repaint();
- }
- }
- ~Kamilla_tigr();
- private:
- bool CheckNum(QString str)
- {
- bool ok = 1;
- if (str.isEmpty())
- return false;
- int num = str.toInt(&ok, 10);
- if (!ok)
- return false;
- if (num >= 6 && num <= 15)
- return true;
- return false;
- }
- Ui::Kamilla_tigrClass ui;
- public slots:
- void CurTimer()
- {
- if (currentturn == 2)
- currentturn = 1;
- else
- currentturn = 2;
- curtimer->stop();
- this->repaint();
- }
- void ButtonClicked()
- {
- QString text = ui.lineEdit->text();
- if (CheckNum(text))
- {
- bool ok = 1;
- l_size = text.toInt(&ok, 10);
- ui.num_players_button->setEnabled(false);
- if (ui.radio_player_1->isChecked())
- live_player = 1;
- else
- live_player = 2;
- ui.radio_player_1->setEnabled(false);
- ui.radio_player_2->setEnabled(false);
- currentturn = 1;
- free_pts.resize(l_size, 1);
- col.resize(l_size, 0);
- arr.resize(l_size, 0);
- this->repaint();
- }
- }
- };
- #endif // KAMILLA_TIGR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement