Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <time.h>
- using namespace std;
- struct vars{
- int x;
- int y;
- };
- int _tmain(int argc, _TCHAR* argv[]) {
- srand((int)time(NULL));
- vars size;
- vars pacman;
- vars ghosts;
- char dir;
- int numG, power, turn, lifes, who;
- char last = '\0';
- cin >> size.x >> size.y;
- getchar();
- char field[100][100] = { '\0' };
- #pragma region Read Input
- for (int i = 0; i != size.x; i++) {
- for (int j = 0; j != size.y; j++) {
- field[i][j] = cin.get();
- }
- getchar();
- }
- cin >> pacman.y >> pacman.x;
- getchar();
- cin >> numG;
- getchar();
- if (numG > 0) {
- cin >> ghosts.y >> ghosts.x;
- getchar();
- }
- cin >> power;
- getchar();
- cin >> turn;
- getchar();
- cin >> lifes;
- getchar();
- cin >> who;
- getchar();
- cin >> last;
- getchar();
- #pragma endregion
- #pragma region Check Vars
- /*cout << "SizeX: " << size.x << " SizeY: " << size.y << "\n";
- for (int i = 0; i != size.x; i++) {
- for (int j = 0; j != size.y; j++) {
- cout << field[i][j];
- }
- cout << "\n";
- }
- cout << "PacmanX: " << pacman.x << " PacmanY: " << pacman.y << "\n";
- cout << "numG: " << numG << "\n";
- if (numG > 0) {
- cout << "GhostsX: " << ghosts.x << " GhostsY: " << ghosts.y << "\n";
- }
- cout << "Power: " << power << "\n";
- cout << "Turn: " << turn << "\n";
- cout << "Lifes: " << lifes << "\n";
- cout << "Who: " << who << "\n";
- cout << "Last: " << last << " or " << int(last) << "\n";*/
- #pragma endregion
- #pragma region Processing
- dir = last;
- bool right = false, left = false, up = false, down = false, hasUp = false, hasDown = false, hasLeft = false, hasRight = false;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- if (field[pacman.y + 1][pacman.x] == 111 || field[pacman.y + 1][pacman.x] == 79) cout << "D";
- else if (field[pacman.y - 1][pacman.x] == 111 || field[pacman.y - 1][pacman.x] == 79) cout << "U";
- else if (field[pacman.y][pacman.x + 1] == 111 || field[pacman.y][pacman.x + 1] == 79) cout << "R";
- else if (field[pacman.y][pacman.x - 1] == 111 || field[pacman.y][pacman.x - 1] == 79) cout << "L";
- else if (right) cout << "R";
- else if (left) cout << "L";
- else if (up) cout << "U";
- else if (down) cout << "D";
- else if (last == 76 && field[pacman.y][pacman.x - 1] != 35) cout << last;
- else if (last == 85 && field[pacman.y - 1][pacman.x] != 35) cout << last;
- else if (last == 68 && field[pacman.y + 1][pacman.x] != 35) cout << last;
- else if (last == 82 && field[pacman.y][pacman.x + 1] != 35) cout << last;
- else if (last == 68 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "R";
- else if (last == 68 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "L";
- else if (last == 85 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "L";
- else if (last == 85 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "R";
- else if (last == 76 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "D";
- else if (last == 76 && field[pacman.y][pacman.x - 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "U";
- else if (last == 82 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y - 1][pacman.x] == 35) cout << "D";
- else if (last == 82 && field[pacman.y][pacman.x + 1] == 35 && field[pacman.y + 1][pacman.x] == 35) cout << "U";
- else{
- while (dir == last){
- int random = rand() % 4 + 1;
- if (random == 1) if (field[pacman.y - 1][pacman.x] != 35 && hasUp && last != 68) dir = 'U';
- if (random == 2) if (field[pacman.y + 1][pacman.x] != 35 && hasDown && last != 85) dir = 'D';
- if (random == 3) if (field[pacman.y][pacman.x - 1] != 35 && hasLeft && last != 82) dir = 'L';
- if (random == 4) if (field[pacman.y][pacman.x + 1] != 35 && hasRight && last != 76) dir = 'R';
- }
- cout << dir;
- }
- #pragma endregion
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement