//Loads maze from file located in 'path' bool MazeEnv::loadMaze(const char* path){ ifstream mazeFile(path); if (!mazeFile) throw (std::string("Can not open maze file: ")+ std::string(path)); int i = 0; while (mazeFile >> maze[i]){ if (nColumns == 0) nColumns = (int) strlen (maze[i]); else if (nColumns != strlen(maze[i])) throw (std::string("Wrong length of maze row")); i++; } nRows = i; std::stringstream ss; ss << "Maze description loaded from file: " << path; if (displayStatEvent) displayStatEvent(ss.str().c_str()); mazeFile.close(); return true; }
void microMouseServer::saveMaze() { //open file save window QString fileName = QFileDialog::getSaveFileName(this, tr("Select Maze File"), "", tr("Maze Files (*.maz)")); QFile inFile(fileName); //if file can't be opened throw error to UI if (!inFile.open(QIODevice::WriteOnly | QIODevice::Text)) { ui->txt_debug->append("ERROR 202: file not found"); return; } else { QTextStream mazeFile(&inFile); for(int i = 0; i < MAZE_WIDTH; i++) { for(int j = 0; j < MAZE_HEIGHT; j++) { int top = this->mazeData[i][j].isWallTop(); int bottom = this->mazeData[i][j].isWallBottom(); int left = this->mazeData[i][j].isWallLeft(); int right = this->mazeData[i][j].isWallRight(); mazeFile << this->mazeData[i][j].posX() << " " << this->mazeData[i][j].posY() << " " << top << " " << bottom << " " << left << " " << right << endl; } } mazeFile.flush(); inFile.close(); ui->txt_debug->append("Maze Saved to File."); } }
void microMouseServer::loadMaze() { //open file find window QString fileName = QFileDialog::getOpenFileName(this, tr("Open Maze File"), "./", tr("Maze Files (*.maz)")); QFile inFile(fileName); //if the file can't be opened throw error to ui if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text)) { ui->txt_debug->append("ERROR 202: file not found"); return; } //read maze QTextStream mazeFile(&inFile); int largestX =0, largestY=0; int x, y, wallTop, wallBottom, wallLeft,wallRight; while(!mazeFile.atEnd()) { mazeFile >> x; mazeFile >> y; mazeFile >> wallTop; mazeFile >> wallBottom; mazeFile >> wallLeft; mazeFile >> wallRight; //check formating if(x<0 || y<0 || wallTop<0 || wallBottom<0 || wallLeft<0 || wallRight<0 || wallTop>1 || wallBottom>1 || wallLeft>1 || wallRight>1) { ui->txt_debug->append("ERROR 201: file formating error"); return; } //check x boundary if(x > largestX) { if(x > MAZE_WIDTH) { ui->txt_debug->append("ERROR 204: maze file is wider than max maze size"); } else { largestX = x; } } //check y boundary if(y > largestY) { if(y > MAZE_HEIGHT) { ui->txt_debug->append("ERROR 205: maze file is taller than max maze size"); } else { largestY = y; } } baseMapNode *mover = &this->mazeData[x-1][y-1]; //load data into maze mover->setXY(x,y); if(wallLeft) { mover->setWall(LEFT, NULL); } else { // mover->setWall(LEFT, &this->mazeData[x-1][y]); } if(wallRight) { mover->setWall(RIGHT, NULL); } else { //mover->setWall(RIGHT, &this->mazeData[x+1][y]); } if(wallTop) { mover->setWall(TOP, NULL); } else { //mover->setWall(TOP, &this->mazeData[x][y+1]); } if(wallBottom) { mover->setWall(BOTTOM, NULL); } else { // mover->setWall(BOTTOM, &this->mazeData[x][y-1]); } } ui->txt_debug->append("Maze loaded"); mazeFile.flush(); inFile.close(); //draw maze and mouse this->maze->drawMaze(this->mazeData); this->maze->drawMouse(QPoint(1,1),dUP); }