我正在为战舰游戏创建一个10x10网格。我正在使用2D数组的矢量模板,并在初始化时遇到麻烦。当我初始化2D矢量时,我试图将10x10矢量的每个空间设置为' '
,但由于某种原因,我将每个坐标初始化为10个空格而不是1个空格。
board.hpp
#ifndef BOARD_HPP
#define BOARD_HPP
#include "ship.hpp"
#include <vector>
class Board
{
private:
std::vector<std::vector<char> > coordinate;
Ship carrier;
Ship battleship;
Ship floater;
Ship submarine;
Ship destroyer;
public:
Board();
char *coord(int row, int column);
};
#endif // BOARD_HPP
board.cpp
#include "board.hpp"
Board::Board() : coordinate(std::vector<std::vector<char> >(10, std::vector<char>(10, ' '))), carrier('C',5), battleship('B',4), floater('F',3), submarine('S',3), destroyer('D',2)
{
//Constructor
}
char *Board::coord(int row, int column)
{
return &coordinate[row][column];
}
以下是主板提供的游戏文件:
game.hpp
#ifndef GAME_HPP
#define GAME_HPP
#include "board.hpp"
class Game
{
private:
Board *playerBoard;
Board *compBoard;
Board *compBoardHidden;
public:
Game(Board *player_board, Board *comp_board, Board *comp_board_hidden);
void display();
};
#endif // GAME_HPP
game.cpp
#include "game.hpp"
#include <iostream>
Game::Game(Board *player_board, Board *comp_board, Board *comp_board_hidden) : playerBoard(player_board), compBoard(comp_board), compBoardHidden(comp_board_hidden)
{
//Constructor
}
void Game::display()
{
std::cout << " | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|" <<std::endl;
for (int i = 0; i < 10; i++)
{
std::cout << " ---+---+---+---+---+---+---+---+---+---+---+ ---+---+---+---+---+---+---+---+---+---+---+\n " << char(65+i) << " | " << playerBoard->coord(i,0) << " | " << playerBoard->coord(i,1) << " | " << playerBoard->coord(i,2) << " | " << playerBoard->coord(i,3) << " | " << playerBoard->coord(i,4) << " | " << playerBoard->coord(i,5) << " | " << playerBoard->coord(i,6) << " | " << playerBoard->coord(i,7) << " | " << playerBoard->coord(i,8) << " | " << playerBoard->coord(i,9) << " | " << char(65+i) << " | " << compBoard->coord(i,0) << " | " << compBoard->coord(i,1) << " | " << compBoard->coord(i,2) << " | " << compBoard->coord(i,3) << " | " << compBoard->coord(i,4) << " | " << compBoard->coord(i,5) << " | " << compBoard->coord(i,6) << " | " << compBoard->coord(i,7) << " | " << compBoard->coord(i,8) << " | " << compBoard->coord(i,9) << " |" << std::endl;
}
}
答案 0 :(得分:0)
你的矢量完全没问题,唯一的问题是当你打印一个元素时。
您的代码具有未定义的行为,因为您正在打印一个非空终止的char数组。 std::cout
operator<<
的{{1}}重载,即字符串,并且会超载。您需要取消引用它以打印出实际角色。
为什么你甚至使用指针?如果外面的某个人必须能够修改它,只需使用参考。