Advertisement
Guest User

Pacman Engine

a guest
May 29th, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.97 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <time.h>
  4.  
  5. using namespace std;
  6.  
  7. struct vars{
  8.     int x;
  9.     int y;
  10. };
  11.  
  12. int _tmain(int argc, _TCHAR* argv[]) {
  13.  
  14.     srand((int)time(NULL));
  15.     vars size;
  16.     vars pacman;
  17.     vars ghosts;
  18.     char dir;
  19.     int numG, power, turn, lifes, who;
  20.     char last = '\0';
  21.     cin >> size.x >> size.y;
  22.     getchar();
  23.     char field[100][100] = { '\0' };
  24.  
  25. #pragma region Read Input
  26.     for (int i = 0; i != size.x; i++) {
  27.         for (int j = 0; j != size.y; j++) {
  28.             field[i][j] = cin.get();
  29.         }
  30.         getchar();
  31.     }
  32.     cin >> pacman.y >> pacman.x;
  33.     getchar();
  34.     cin >> numG;
  35.     getchar();
  36.     if (numG > 0) {
  37.         cin >> ghosts.y >> ghosts.x;
  38.         getchar();
  39.     }
  40.     cin >> power;
  41.     getchar();
  42.     cin >> turn;
  43.     getchar();
  44.     cin >> lifes;
  45.     getchar();
  46.     cin >> who;
  47.     getchar();
  48.     cin >> last;
  49.     getchar();
  50. #pragma endregion
  51.  
  52. #pragma region Check Vars
  53.     /*cout << "SizeX: " << size.x << " SizeY: " << size.y << "\n";
  54.     for (int i = 0; i != size.x; i++) {
  55.         for (int j = 0; j != size.y; j++) {
  56.             cout << field[i][j];
  57.         }
  58.         cout << "\n";
  59.     }
  60.     cout << "PacmanX: " << pacman.x << " PacmanY: " << pacman.y << "\n";
  61.     cout << "numG: " << numG << "\n";
  62.     if (numG > 0) {
  63.         cout << "GhostsX: " << ghosts.x << " GhostsY: " << ghosts.y << "\n";
  64.     }
  65.     cout << "Power: " << power << "\n";
  66.     cout << "Turn: " << turn << "\n";
  67.     cout << "Lifes: " << lifes << "\n";
  68.     cout << "Who: " << who << "\n";
  69.     cout << "Last: " << last << " or " << int(last) << "\n";*/
  70.    
  71. #pragma endregion
  72.  
  73. #pragma region Processing
  74.  
  75.     dir = last;
  76.     bool right = false, left = false, up = false, down = false, hasUp = false, hasDown = false, hasLeft = false, hasRight = false;
  77.    
  78.     for (int i = 1; field[pacman.y][pacman.x - i] != 35; i++) if (field[pacman.y][pacman.x - i] == 111 || field[pacman.y][pacman.x - i] == 79) left = true;
  79.     for (int i = 1; field[pacman.y][pacman.x + i] != 35; i++) if (field[pacman.y][pacman.x + i] == 111 || field[pacman.y][pacman.x + i] == 79) right = true;
  80.     for (int i = 1; field[pacman.y - i][pacman.x] != 35; i++) if (field[pacman.y - i][pacman.x] == 111 || field[pacman.y - i][pacman.x] == 79) up = true;
  81.     for (int i = 1; field[pacman.y + i][pacman.x] != 35; i++) if (field[pacman.y + i][pacman.x] == 111 || field[pacman.y + i][pacman.x] == 79) down = true;
  82.  
  83.     for (int i = pacman.y; i != 0; i--) for (int j = 0; j != size.x; j++) if (field[j][i] == 111 || field[j][i] == 79) hasUp = true;
  84.     for (int i = pacman.y; i != size.y; i++) for (int j = 0; j != size.x; j++) if (field[j][i] == 111 || field[j][i] == 79) hasDown = true;
  85.     for (int i = pacman.x; i != 0; i--) for (int j = 0; j != size.y; j++) if (field[j][i] == 111 || field[j][i] == 79) hasLeft = true;
  86.     for (int i = pacman.x; i != size.x; i++) for (int j = 0; j != size.y; j++) if (field[j][i] == 111 || field[j][i] == 79) hasRight = true;
  87.  
  88.     if (field[pacman.y + 1][pacman.x] == 111 || field[pacman.y + 1][pacman.x] == 79) cout << "D";
  89.     else if (field[pacman.y - 1][pacman.x] == 111 || field[pacman.y - 1][pacman.x] == 79) cout << "U";
  90.     else if (field[pacman.y][pacman.x + 1] == 111 || field[pacman.y][pacman.x + 1] == 79) cout << "R";
  91.     else if (field[pacman.y][pacman.x - 1] == 111 || field[pacman.y][pacman.x - 1] == 79) cout << "L";
  92.  
  93.     else if (right) cout << "R";
  94.     else if (left) cout << "L";
  95.     else if (up) cout << "U";
  96.     else if (down) cout << "D";
  97.  
  98.     else if (last == 76 && field[pacman.y][pacman.x - 1] != 35) cout << last;
  99.     else if (last == 85 && field[pacman.y - 1][pacman.x] != 35) cout << last;
  100.     else if (last == 68 && field[pacman.y + 1][pacman.x] != 35) cout << last;
  101.     else if (last == 82 && field[pacman.y][pacman.x + 1] != 35) cout << last;
  102.  
  103.     else if (last == 68 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "R";
  104.     else if (last == 68 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "L";
  105.  
  106.     else if (last == 85 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "L";
  107.     else if (last == 85 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "R";
  108.  
  109.     else if (last == 76 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "D";
  110.     else if (last == 76 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "U";
  111.  
  112.     else if (last == 82 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "D";
  113.     else if (last == 82 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "U";
  114.  
  115.     else{
  116.         while (dir == last){
  117.             int random = rand() % 4 + 1;
  118.             if (random == 1) if (field[pacman.y - 1][pacman.x] != 35 && hasUp && last != 68) dir = 'U';
  119.             if (random == 2) if (field[pacman.y + 1][pacman.x] != 35 && hasDown && last != 85) dir = 'D';
  120.             if (random == 3) if (field[pacman.y][pacman.x - 1] != 35 && hasLeft && last != 82) dir = 'L';
  121.             if (random == 4) if (field[pacman.y][pacman.x + 1] != 35 && hasRight && last != 76) dir = 'R';
  122.         }
  123.         cout << dir;
  124.     }
  125.  
  126. #pragma endregion
  127.  
  128.     return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement