Как проверить каждый элемент в массиве?
Я пытаюсь проанализировать каждый элемент, который был помещен в мой массив из текстового файла символов для игры-лабиринта. Массив должен быть проверен, чтобы мы могли определить, где в лабиринте находятся стены, игроки, призраки, ключи и лестницы, вход и т. Д. Поэтому мне нужно проверить наличие определенных символов (таких как #, P, K, D, G Е). Я не уверен, как все это настроить?
Вот функции для получения файлов Floor и размещения каждого символа в массиве, который называется tile.
const int ROWS = 20;
void Floor::Read (const char * filename)
{
size_t row = 0;
ifstream input(filename);
while (row < ROWS && input >> tiles[row++]);
}
void Game::readFloors()
{
m_floor[0].Read("FloorA.txt");
m_floor[1].Read("FloorB.txt");
m_floor[2].Read("FloorC.txt");
}
Тогда вот как выглядит один из этажей с каждым символом:
##############################
# K #
# ############## ### ### # #
# K # # #C# #K# # #
# ######### # A # # # # # # #
# K # # # #
# ############D#####D####### #
# #
# C G C #
# #
# ######D##############D#### #
# # C #K# # #
# #### ######## # # # #
# #K # # ### # # #### #
# # ## # #### # # # # # #
E # ## # # ### # # #### # #
# # # #K D # #
# #D#### ################### #
# K #
##############################
Заголовочный файл с двумя классами, используемыми с функциями выше:
class Floor {
char tiles[20][30];
void printToScreen();
public:
Floor();
void Read (const char * filename);
};
class Game {
private:
Floor m_floor [3];
vector<Character> characters;
public:
void readFloors();
};
Искал похожие вопросы, но большинство не анализируют много разных вариантов. Спасибо за помощь!
2 ответа
Я собрал простого читателя, который помещает карту (на основе вашего примера) в матрицу, с которой можно жонглировать.
#include <iostream>
#include <fstream>
#include <string>
std::ifstream f("/path/../txt.txt");
std::string str;
int cols = 0;
int rows = 0;
char mat[100][100];
int main(){
int line = 0;
while(std::getline(f, str)){
const char * chars = str.c_str();
for(int i=0; i<str.length(); i++){
mat[line][i] = chars[i];
}
cols = str.length();
line++;
rows++;
}
for(int i=0; i<line; i++){
for(int j=0; j<rows; j++){
std::cout<<mat[i][j]<<" ";
}
std::cout<<std::endl;
}
std::cout<<"Cols: "<<cols<<" Rows: "<<rows;
return 0;
}
Таким образом, вы можете получить положение каждого игрока, блока стены и т. Д. С помощью двухточечных координат, просто выполняя простые сравнения персонажей.
Вы можете использовать цикл for внутри цикла for, один для проверки столбцов в массиве и другой для проверки строк. Их нужно просто проверить каждый элемент, если он равен k,c,g и т. Д.