Привет всем Я надеялся, что смогу получить некоторую помощь в этом фрагменте кода, с которым у меня возникли проблемы. Извините за беспорядок, но я снова и снова переписывал эту часть, ища решения. Итак, вот сделка, я пытаюсь жестко закодировать массив внутри класса a.k.a «mLevelDesign». Поэтому я могу передать его mMapBuffer всякий раз, когда мне нужно обновить «карту». Моя проблема в том, что я чувствую, что мне это намного сложнее, чем нужно, но я уже пробовал создать третий экземпляр массива, чтобы я удалил mLevelDesign из частного в заголовке и добавил say mCopyLevel, а затем передал mLevelDesign в mCopyLevel, когда Карта построена, затем используйте mCopyLevel в месте mLevelDesign. Хотя я, похоже, получил много потерянной памяти и другие проблемы, которые запускаются именно так. Мне просто интересно, есть ли какой-нибудь простой способ, чтобы иметь возможность жестко закодировать массив, сохраняя при этом его содержимое в заголовочном файле и даже еще лучше не потерять его в памяти? На данный момент этот код вызывает ошибку: не может преобразовать «список инициализаторов, заключенных в скобки» в «int» при назначении.Проблемы с инициализацией массива без использования динамического массива
//Map.h
#ifndef MAP_H
#define MAP_H
class Map
{
public:
Map();
void update();
void drawMap();
private:
int mLevelDesign[100];
int* mMapBuffer;
int mMapX;
int mMapY;
int mPlayerX;
int mPlayerY;
bool mBossDead;
bool mEnemy1Dead;
bool mEnemy2Dead;
bool mTreasureLooted;
};
#endif // MAP_H
//Map.cpp
#include <iostream>
#include "Map.h"
using namespace std;
Map::Map()
{
mMapX = 10;
mMapY = 10;
mPlayerX = 6;
mPlayerY = 10;
mLevelDesign[100] =
/* 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 */
/*1*/ { 0 , 0 , 0 , 0 , 1 ,'D', 1 , 0 , 0 , 0 ,
/*2*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*3*/ 1 , 2 , 2 , 2 , 1 , 0 , 1 , 2 , 1 , 0 ,
/*4*/ 1 ,'T','E', 0 , 0 , 0 , 0 ,'F', 1 , 0 ,
/*5*/ 1 ,'B','E', 0 , 0 , 0 , 0 ,'M', 1 , 0 ,
/*6*/ 1 , 2 , 2 , 2 , 1 , 0 , 1 , 2 , 1 , 0 ,
/*7*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*8*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*9*/ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
/*10*/ 0 , 0 , 0 , 0 , 1 ,'D', 1 , 0 , 0 , 0 };
mBossDead = false;
mEnemy1Dead = false;
mEnemy2Dead = false;
mTreasureLooted = false;
}
void Map::update()
{
//Re-draw buffer from map copy
mMapBuffer = new int[0];
int arraySize = mMapX * mMapY;
for(int i = 0; i < arraySize; ++i)
{
mMapBuffer[i] = mLevelDesign[i];
}
//Convert player cooordinates to array standard and draw player to map.
int playerConversion = ((mPlayerY - 1) * mMapY) + (mPlayerX - 1);
mMapBuffer[playerConversion] = 'P';
//Check for changes in map.
if(mBossDead == true)
mMapBuffer[41] = 0;
if(mEnemy1Dead == true)
mMapBuffer[32] = 0;
if(mEnemy2Dead == true)
mMapBuffer[42] = 0;
}
void Map::drawMap()
{
int count = 0;
for(int y = 0; y < mMapY; ++y)
{
for(int x = 0; x < mMapX; ++x)
{
if(mMapBuffer[count] == 0)
{cout << " "; count ++;}
else if(mMapBuffer[count] == 1)
{cout << "| "; count ++;}
else if(mMapBuffer[count] == 2)
{cout << "= "; count ++;}
else if(mMapBuffer[count] == 'X')
{cout << "X "; count ++;}
else if(mMapBuffer[count] == 'D')
{cout << "D "; count ++;}
else if(mMapBuffer[count] == 'T')
{cout << "T "; count ++;}
else if(mMapBuffer[count] == 'P')
{cout << "@ "; count ++;}
else if(mMapBuffer[count] == 'M')
{cout << "$ "; count ++;}
else if (mMapBuffer[count] == 'F')
{cout << "F "; count ++;}
else if (mMapBuffer[count] == 'Q')
{cout << "Q "; count ++;}
else if(mMapBuffer[count] == 'E')
{cout << "E "; count ++;}
else if(mMapBuffer[count] == 'B')
{cout << "B "; count ++;}
else
{cout << " "; count ++;}
}
cout << endl;
}
}
То есть это работает до сих пор, спасибо. Я полагаю, что раньше, по моей предыдущей попытке, у меня была одна копия, которую все остальные пытались извлечь из нее, но ее сбрасывали, и все искало ее в той области, которой она больше не была. – user3065238