忙着做一场短暂的比赛。我必须逐块移动一个2d阵列的人。 事情是我知道如何移动它,但只有一个街区远离原来的BLOCK。 我想知道如何保存数组中此刻的位置。
void DisplayBoard(char** array,int row,int col,char direction){
int NewRow(0),NewCol(1);//I believe my problem is here.
if(direction =='a')
{
NewCol--;
}
if(direction =='s')
{
NewRow++;
}
if(direction == 'd')
{
NewCol++;
}
if(direction == 'w')
{
NewRow--;
}
array[0][1] = EMPTY;
array[NewRow][NewCol] = MAN;
for(int i = 0;i < row ; i++){
for(int c = 0; c < col; c++){
cout << array[i][c]<<" ";
}
cout <<endl<<endl;
}
}
我认为我的问题出在我为新数组赋予初始值的部分。我想保存我所在的块并将其移动到eg.down并保存该位置并从那里向下移动。
我该怎么做才能帮忙。
谢谢。
答案 0 :(得分:1)
一个简单的解决方案是将静态变量用于当前块位置。静态变量存在并保持其在程序生命周期中的值。在您当前的实现中, NewRow 和 NewCol 是自动变量,这意味着它们在函数完成时被取消分配,并在函数完成时重新分配调用。这将导致值重置为0和1.静态定义当前行变量如下所示:
static int NewRow(0), NewCol(1);
这会将变量初始化为0和1,但是,即使在函数结束后,对这些变量的任何更新或更改都将保持不变。
答案 1 :(得分:1)
一个简单的解决方法是将NewCol
和NewRow
移出方法,从而使其状态不依赖于方法调用。
更好的解决方案是创建类似于包含数组和当前位置的新结构的内容,例如:
struct GameBoard {
char **fields;
int col;
int row;
};
然后将GameBoard作为输入:
void DisplayBoard(Gameboard& board,int row,int col,char direction){
int prevCol = board.col, prevRow = board.row;
if(direction =='a')
{
board.col--;
}
if(direction =='s')
{
board.row++;
}
if(direction == 'd')
{
board.col++;
}
if(direction == 'w')
{
board.row--;
}
array[prevRow][prevCol] = EMPTY;
array[board.row][board.col] = MAN;
for(int i = 0;i < row ; i++){
for(int c = 0; c < col; c++){
cout << array[i][c]<<" ";
}
cout <<endl<<endl;
}
}
<强>更新强> 正如beta提出的那样,可以将这些东西作为成员函数来代替。我也会使用std :: vector而不是二维数组,因为它有安全检查。 因此,我的最终解决方案是:
class GameBoard {
private:
std::vector< std::vector<char> > _fields;
int _col;
int _row;
public:
GameBoard(int ncol, int nrow, int startcol, int startrow)
: _col(startcol), _row(startrow), _fields(nrow) {
for(int i = 0; i < nrow; i++) {
for (int j = 0; j < ncol; j++) {
_fields[i].push_back(EMPTY);
}
}
_fields[_row][_col] = MAN;
}
void move_man(char direction) {
int prevCol = _col, prevRow = _row;
switch(direction) {
case 'a': _col--; break;
case 'd': _col++; break;
case 'w': _row--; break;
case 's': _row++; break;
}
_fields[prevRow][prevCol] = EMPTY;
_fields[_row][_col] = MAN;
}
void display_board() {
for (int i = 0; i < _fields.size(); i++) {
for (int j = 0; j < _fields[i].size(); j++) {
std::cout << _fields[i][j] << " ";
}
std::cout << std::endl;
}
}
};