-2
我正在嘗試製作一個BattleShip遊戲,但我很努力地將這些船隻添加到主板上。雖然週期困擾
void Board::display() const{
//string filename;
int upC = 65, lowC = 97; //aqui temos o codigo ascii do a, primeira letra do alfabeto, 65 é o seu uppercase e 97 o seu lowercase
int icc = 0; //int char coluna
cout << " ";
while (icc < numLines){ //o int char coluna vai aumentando consoante as dimensoes do tabuleiro || e.g Se tivermos um tab 10x10
cout << (char)lowC << " "; //teremos um range de 65-75 [a-j] para as colunas e um range 97 -107 [A-J] para as linhas
icc++;
lowC++;
}
cout << endl;
icc = 0;
for (int y = 0; y< numLines; y++)
{
cout << (char)upC << " ";
for (int x = 0; x < numColumns; x++){
if(board[y][x] == -1)
cout << '.' << " ";
else
cout << ships[board[y][x]].getSymbol() << " ";
}
cout << endl;
upC++;
}
}
我初始化充滿了-1的和我putShip功能(見上文)我添加了船舶載體的載體。
int Board::putShip(const Ship &s){
int size = s.getSize();
char ori = s.getOri();
int line = s.getLin();
int col = s.getCol();
char symbol = s.getSymbol();
//vector< vector<char> > tab;
/* cout << size << endl;
cout << ori << endl;
cout << line << endl;
cout << col << endl;
cout << symbol << endl;*/
while (size > 0){
if((board[line][col] == -1) && (ori == 'H')){
board[line][col] = 0;
col++;
cout << "size " << size << endl;
return true;
}
else if ((board[line][col] == -1) && (ori == 'V')){
board[line][col] = symbol;
line++;
return true;
}
else
return false;
size--;
}
//cout << line << col << endl;
/*while (size > 0){
if(ori == 'H'){
board[line][col] = symbol;
col++;
}
else{
board[line][col] = symbol;
line++;
}
size--;
}*/
//return true;
}
但由於某種原因,它只是打印,即使它們的大小的第一個點是4,而我的心不是循環工作,我不知道爲什麼。
這是我局的構造:
Board::Board(const string &filename){
string nome;
unsigned int size;
char simb;
unsigned int cor;
char ori;
PositionChar position;
string tmp;
ifstream config;
config.open(filename.c_str()); //abre o ficheiro config onde estao as informacoes do tabuleiro
if (config.is_open()) {
config >> tmp >> numLines >> tmp >> numColumns;
cout << numLines << endl;
cout << numColumns << endl;
board.resize(numColumns, vector<int> (numLines,-1));
while (!config.eof()) {
config >> simb >> tmp >> position.lin >> position.col >> tmp >> ori >> tmp >> size >> tmp >> cor;
if(!config.fail()){
ships.push_back(Ship(simb, position, ori, size, cor));
}
cout << "simbolo: " << simb << endl;
putShip(Ship(simb,position, ori, size, cor));
}
//display();
} else {
cout << "Ficheiro de config invalido" << endl;
exit(1);
}
config.close();
}
的COUTS是調試調用,顯然不是問題有關。基本上,我得到了我的txt類似:
board: 10 x 10
P - Aa - H - 4 - 10
,然後我得到的符號(P),位置轉換爲整數(AA - 位置(0,0),方位(水平)的大小和顏色(不相關)
然後我檢查一下,如果板子的位置x,y是-1,如果是的話,它對應於水,如果沒有則填充'。'如果它具有> = 0,對應於每艘船從txt中讀取的矢量船的索引
我的while循環應該用4 P填充行,因爲方向是水平的,但它不這樣做,我不明白爲什麼
我覺得這個問題更適合[代碼評論](https://codereview.stackexchange.com/)。 – Santiago
@ user3267581 - no。這個問題有*「但是,不知何故,它只是打印第一個點,即使它們的大小是4.我的Cicle不工作,我不知道如何。」* - 根據Code Review的說法,這個代碼「不工作」範圍。它將在Code Review上關閉。 – rolfl
公平點。感謝澄清。 – Santiago