Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "Labirint.h"
- #include <conio.h>
- #include <iostream>
- #include <fstream>
- using namespace std;
- Labirint::Labirint()
- {
- this->initData();
- this->init();
- }
- Labirint::~Labirint() {
- cout << "By.." << endl;
- }
- void Labirint::initData() {
- ifstream ifs("data.txt");
- for (int i = 0; i < this->sizeRow; i++)
- {
- for (int j = 0; j < this->sizeCol; j++)
- {
- ifs >> (unsigned char)this->map[i][j];
- }
- }
- }
- void Labirint::init() {
- for (int i = 0; i < this->sizeRow; i++)
- for (int j = 0; j < this->sizeCol; j++)
- this->oke[i][j] = this->map[i][j];
- int a = 0,
- b = 0;
- unsigned char n = 2;
- this->map[0][1] = 2;
- for (int i = 0; i < this->sizeRow; i++) {
- for (int j = 0; j < this->sizeCol; j++)
- cout << this->map[i][j] << " ";
- cout << endl;
- }
- // работает пока flag == 1, tckb 0, то путь найден
- // находит конечную точку
- while (this->wave(n, a, b)) {
- n++;
- }
- // если не найшло, то хер
- if (a == 0 && b == 0)
- cout << endl << "Bad labirint." << endl;
- //else cout << "(" << a << "," << b << ")" << endl;
- cout << endl << endl;
- this->oke[a][b] = '*';
- // походу присваивает правильному пути *
- while (this->stepback(a, b)) {
- this->oke[a][b] = '*';
- //cout << "(" << a << "," << b << ")" << endl;
- }
- // виводе пройдений лабіринт
- for (int i = 0; i < this->sizeRow; i++) {
- for (int j = 0; j < this->sizeCol; j++)
- cout << this->oke[i][j] << " ";
- cout << endl;
- }
- cout << endl << "LABIRINT COMPLETED" << endl;
- _getch();
- }
- char Labirint::wave(unsigned char n, int &a, int &b) {
- char flag = 0;
- for (int i = 0; i < this->sizeRow; i++) {
- for (int j = 0; j < 24; j++) {
- if (this->map[j][i] == n) {
- // це все стіна
- if (this->map[j + 1][i] == 0) {
- this->map[j + 1][i] = n + 1;
- flag = 1;
- }
- if (this->map[j - 1][i] == 0) {
- this->map[j - 1][i] = n + 1;
- flag = 1;
- }
- if (this->map[j][i + 1] == 0) {
- this->map[j][i + 1] = n + 1;
- flag = 1;
- }
- if (this->map[j][i - 1] == 0) {
- this->map[j][i - 1] = n + 1;
- flag = 1;
- }
- // если на финише
- if ((this->map[j + 1][i] == 'F')
- || (this->map[j - 1][i] == 'F')
- || (this->map[j][i + 1] == 'F')
- || (this->map[j][i - 1] == 'F') ) {
- a = j;
- b = i;
- flag = 0;
- }
- }
- }
- }
- return flag;
- }
- char Labirint::stepback(int &x, int &y) {
- if (this->map[x][y] == 2) //старт точка
- return 0;
- if (this->map[x + 1][y] < this->map[x][y] && this->map[x + 1][y] != 1) {
- x++;
- return 1;
- }
- if (this->map[x - 1][y] < this->map[x][y] && this->map[x - 1][y] != 1) {
- x--;
- return 1;
- }
- if (this->map[x][y + 1] < this->map[x][y] && this->map[x][y + 1] != 1) {
- y++;
- return 1;
- }
- if (this->map[x][y - 1] < this->map[x][y] && this->map[x][y - 1] != 1) {
- y--;
- return 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement