Advertisement
Guest User

Untitled

a guest
Sep 30th, 2015
114
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None
  1. #include "stdafx.h"
  2. #include "Labirint.h"
  3.  
  4. #include <conio.h>
  5. #include <iostream>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. Labirint::Labirint()
  11. {
  12.     this->initData();
  13.     this->init();
  14. }
  15.  
  16. Labirint::~Labirint() {
  17.     cout << "By.." << endl;
  18. }
  19.  
  20. void Labirint::initData() {
  21.     ifstream ifs("data.txt");
  22.  
  23.     for (int i = 0; i < this->sizeRow; i++)
  24.     {
  25.         for (int j = 0; j < this->sizeCol; j++)
  26.         {
  27.             ifs >> (unsigned char)this->map[i][j];
  28.         }
  29.     }
  30. }
  31.  
  32. void Labirint::init() {
  33.     for (int i = 0; i < this->sizeRow; i++)
  34.         for (int j = 0; j < this->sizeCol; j++)
  35.             this->oke[i][j] = this->map[i][j];
  36.  
  37.     int a = 0,
  38.         b = 0;
  39.     unsigned char n = 2;
  40.  
  41.     this->map[0][1] = 2;
  42.  
  43.     for (int i = 0; i < this->sizeRow; i++) {
  44.         for (int j = 0; j < this->sizeCol; j++)
  45.             cout << this->map[i][j] << " ";
  46.         cout << endl;
  47.     }
  48.  
  49.     // работает пока flag == 1, tckb 0, то путь найден
  50.     // находит конечную точку
  51.     while (this->wave(n, a, b)) {
  52.         n++;
  53.     }
  54.  
  55.     // если не найшло, то хер
  56.     if (a == 0 && b == 0)
  57.         cout << endl << "Bad labirint." << endl;
  58.     //else cout << "(" << a << "," << b << ")" << endl;
  59.  
  60.     cout << endl << endl;
  61.  
  62.     this->oke[a][b] = '*';
  63.  
  64.     // походу присваивает правильному пути *
  65.     while (this->stepback(a, b)) {
  66.         this->oke[a][b] = '*';
  67.         //cout << "(" << a << "," << b << ")" << endl;
  68.     }
  69.  
  70.     // виводе пройдений лабіринт
  71.     for (int i = 0; i < this->sizeRow; i++) {
  72.         for (int j = 0; j < this->sizeCol; j++)
  73.             cout << this->oke[i][j] << " ";
  74.         cout << endl;
  75.     }
  76.  
  77.     cout << endl << "LABIRINT COMPLETED" << endl;
  78.  
  79.     _getch();
  80. }
  81.  
  82. char Labirint::wave(unsigned char n, int &a, int &b) {
  83.     char flag = 0;
  84.  
  85.     for (int i = 0; i < this->sizeRow; i++) {
  86.         for (int j = 0; j < 24; j++) {
  87.             if (this->map[j][i] == n) {
  88.                 // це все стіна
  89.                 if (this->map[j + 1][i] == 0) {
  90.                     this->map[j + 1][i] = n + 1;
  91.                     flag = 1;
  92.                 }
  93.                 if (this->map[j - 1][i] == 0) {
  94.                     this->map[j - 1][i] = n + 1;
  95.                     flag = 1;
  96.                 }
  97.                 if (this->map[j][i + 1] == 0) {
  98.                     this->map[j][i + 1] = n + 1;
  99.                     flag = 1;
  100.                 }
  101.                 if (this->map[j][i - 1] == 0) {
  102.                     this->map[j][i - 1] = n + 1;
  103.                     flag = 1;
  104.                 }
  105.  
  106.                 // если на финише
  107.                 if ((this->map[j + 1][i] == 'F')
  108.                     || (this->map[j - 1][i] == 'F')
  109.                     || (this->map[j][i + 1] == 'F')
  110.                     || (this->map[j][i - 1] == 'F') ) {
  111.                     a = j;
  112.                     b = i;
  113.                     flag = 0;
  114.                 }
  115.             }
  116.         }
  117.     }
  118.  
  119.     return flag;
  120. }
  121.  
  122. char Labirint::stepback(int &x, int &y) {
  123.     if (this->map[x][y] == 2) //старт точка
  124.         return 0;
  125.  
  126.     if (this->map[x + 1][y] < this->map[x][y] && this->map[x + 1][y] != 1) {
  127.         x++;
  128.         return 1;
  129.     }
  130.     if (this->map[x - 1][y] < this->map[x][y] && this->map[x - 1][y] != 1) {
  131.         x--;
  132.         return 1;
  133.     }
  134.     if (this->map[x][y + 1] < this->map[x][y] && this->map[x][y + 1] != 1) {
  135.         y++;
  136.         return 1;
  137.     }
  138.     if (this->map[x][y - 1] < this->map[x][y] && this->map[x][y - 1] != 1) {
  139.         y--;
  140.         return 1;
  141.     }
  142.  
  143.     return 0;
  144. }
Advertisement
RAW Paste Data Copied
Advertisement