Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6. const int LIM{ 8 };
  7.  
  8. void show(char(*plansza)[LIM]);
  9. void show(int(*plansza)[LIM]);
  10. void choice(char(*plansza)[LIM], int pion[], int poziom[], int & x, int & y);
  11. void inicjuj(char(*plansza)[LIM], int(*dostep)[LIM], int & x, int & y);
  12. bool isAvailable(char(*plansza)[LIM], int x, int y);
  13. void checkAvaibility(char plansza[][LIM], int dostep[][LIM], int pion[], int poziom[]);
  14. int pickHardest(char plansza[][LIM], int dostep[][LIM], int pion[], int poziom[], int & x, int & y);
  15.  
  16.  
  17. int main() {
  18.     srand(time(NULL));
  19.     int x, y;
  20.     char plansza[LIM][LIM];
  21.     int dostep[LIM][LIM]{};
  22.     int poziom[LIM] = { 2, 1, -1, -2, -2, -1, 1, 2 };
  23.     int pion[LIM] = { -1, -2, -2, -1, 1, 2, 2, 1 };
  24.     int move_, i;
  25.     inicjuj(plansza, dostep, x, y);
  26.     checkAvaibility(plansza, dostep, pion, poziom);
  27.     for ( i = 0; i<64; i++) {
  28.         show(plansza);
  29.         cout << endl;
  30.         plansza[x][y] = 'O';
  31.         checkAvaibility(plansza, dostep, pion, poziom);
  32.         move_ = pickHardest(plansza, dostep, pion, poziom, x, y);
  33.         if (move_ == 9)
  34.             break;
  35.         else {
  36.             x = x + pion[move_];
  37.             y = y + poziom[move_];
  38.         }
  39.         plansza[x][y] = 'S';
  40.     }
  41.     cout << endl << "Wykonano " << i << " ruchow.";
  42.     cin.sync();
  43.     cin.get();
  44.     return 0;
  45. }
  46.  
  47.  
  48.  
  49.  
  50. void inicjuj(char(*plansza)[LIM], int(*dostep)[LIM], int & x, int & y) {
  51.     int i, j;
  52.     for (i = 0; i<LIM; i++) {
  53.         for (j = 0; j<LIM; j++)
  54.             plansza[i][j] = 'x';
  55.     }
  56.     cout << "PODAJ POCZATKOWE POLE SKOCZKA\n";
  57.     while (!(cin >> x && cin >> y && isAvailable(plansza, x, y))) {
  58.         cout << "PODAJ POPRAWNE DANE: ";
  59.         cin.clear();
  60.         cin.sync();
  61.     }
  62.     plansza[x][y] = 'S';
  63. }
  64.  
  65. void checkAvaibility(char plansza[][LIM], int dostep[][LIM], int pion[], int poziom[]) {
  66.     int i, j, k;
  67.     for (i = 0; i< LIM; i++){
  68.         for (j = 0; j<LIM; j++){
  69.             dostep[i][j] = 0;
  70.             for (k = 0; k<LIM; k++) {
  71.                 if (isAvailable(plansza, i + pion[k], j + poziom[k]))
  72.                     dostep[i][j]++;
  73.             }
  74.         }
  75.     }
  76. }
  77.  
  78. void show(char (*plansza)[LIM]) {
  79.     int i, j;
  80.     cout << ">>STAN PLANSZY<<\n";
  81.     for (i = 0; i<LIM; i++) {
  82.         for (j = 0; j<LIM; j++)
  83.             cout << plansza[i][j] << " ";
  84.         cout << endl;
  85.     }
  86. }
  87.  
  88. void show(int (*plansza)[LIM]) {
  89.     int i, j;
  90.     cout << ">>STAN PLANSZY<<\n";
  91.     for (i = 0; i<LIM; i++) {
  92.         for (j = 0; j<LIM; j++)
  93.             cout << plansza[i][j] << " ";
  94.         cout << endl;
  95.     }
  96. }
  97.  
  98.  
  99. void choice(char(*plansza)[LIM], int pion[], int poziom[], int & x, int & y) {
  100.     for (int i{}; i<LIM; i++)
  101.         cout << "Ruch " << i << ": " << "poziom " << poziom[i] << "; pion " << pion[i] << endl;
  102.     int ch;
  103.     cout << "Wybierz ruch: ";
  104.     while (!(cin >> ch && isAvailable(plansza, x + pion[ch], y + poziom[ch]))) {
  105.         cin.clear();
  106.         cin.sync();
  107.     }
  108.     x += pion[ch];
  109.     y += poziom[ch];
  110. }
  111.  
  112. bool isAvailable(char(*plansza)[LIM], int x, int y) {
  113.     if ((x<0 || x>7) || (y<0 || y>7) || plansza[x][y] == 'O' || plansza[x][y]=='S')
  114.         return false;
  115.     return true;
  116. }
  117.  
  118. int pickHardest(char plansza[][LIM], int dostep[][LIM], int pion[], int poziom[], int & x, int & y) {
  119.     int move_ = 9;
  120.     int x1, y1;
  121.     for (int i = 0; i<LIM; i++) {
  122.         x1 = x + pion[i];
  123.         y1 = y + poziom[i];
  124.         if (isAvailable(plansza,x1,y1)){
  125.             if (dostep[x1][y1] < move_)
  126.                 move_ = i;
  127.             else if (dostep[x1][y1] == move_) {
  128.                 if (rand() % 2 == 0)
  129.                     move_ = i;
  130.             }
  131.         }
  132.     }
  133.     return move_;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement