我正在嘗試制作一個播放戰艦的程式。我有一個 2D 陣列,它使用嵌套的 for 回圈列印到控制臺,以顯示代表網格的 10x10 點網格。我希望能夠讓用戶為船輸入一個 x 和 y 坐標,并讓它在網格上顯示為不同的字符,例如“ ”,并在每次我“重新繪制”時存盤它網格。
char playerBoard[][]在全域范圍內較早地初始化。
void drawPlayerBoard()
{
int yLabel = 0;
char xLabel = 65;// ascii
for (int i = 0; i < rows; i )
{
for (int j = 0; j < columns; j )
{
playerBoard[i][j] = 46;// ascii
}
}
cout << " ";
for (xLabel = 65; xLabel < 75; xLabel )
{
cout << xLabel << " ";
}
cout << "\n";
for (int i = 0; i < rows; i )
{
yLabel ;
if (yLabel >= 10)
{
cout << yLabel << " ";
}
else
{
cout << yLabel << " ";
}
for (int j = 0; j < columns; j )
{
cout << playerBoard[i][j] << " ";
}
cout << "\n";
}
}
uj5u.com熱心網友回復:
你可以讓自己更輕松。例如,初始化 to 的每個值playerBoard可以'.'很簡單:
std::fill_n((char*)playerBoard, rows * columns, '.');
你可能不想在drawPlayerBoard函式中這樣做,因為你會在你想顯示它的時候擦除你的板。做一個單獨的函式:
#include <algorithm>
const int rows = 10;
const int cols = 10;
char playerBoard[rows][cols];
void clearPlayerBoard()
{
std::fill_n((char*)playerBoard, rows * cols, '.');
}
對于輸出 X-labels,同樣避免使用表示 ASCII 值的幻數。例如,你可以寫信char('A' i)來得到你想要的信。
要管理間距,請使用 I/O 操縱器來控制輸出寬度。這樣可以避免像您現在正在使用yLabel測驗那樣撰寫丑陋的代碼。只需使用std::setw, 并避免將您的代碼與空格字串混淆。
把它放在一起:
#include <iomanip>
#include <iostream>
void drawPlayerBoard()
{
const int colWidth = 2;
const int rowLabelWidth = 3;
// Draw X labels
std::cout << std::setw(rowLabelWidth) << "";
for (int col = 0; col < cols; col )
{
std::cout << std::setw(colWidth) << char('A' col);
}
std::cout << '\n';
// Draw rest of board
for (int row = 0; row < rows; row )
{
std::cout << std::setw(rowLabelWidth) << row 1;
for (int col = 0; col < cols; col )
{
std::cout << std::setw(colWidth) << playerBoard[row][col];
}
std::cout << '\n';
}
}
請注意您現在如何使用這兩個“寬度”值來控制布局。這里最有用的是rowLabelWidth值,它有效地控制了你的電路板有多少壓痕。
要測驗,只需一些簡單的驅動程式代碼main:
int main()
{
clearPlayerBoard();
drawPlayerBoard();
}
你得到輸出:
A B C D E F G H I J
1 . . . . . . . . . .
2 . . . . . . . . . .
3 . . . . . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
10 . . . . . . . . . .
現在您可以撰寫一個簡單的函式來添加您的船只:
void placeShip(int row, int col, int size, bool horizontal, char player)
{
if (horizontal)
{
for (int i = 0; i < size; i ) playerBoard[row][col i] = player;
}
else
{
for (int i = 0; i < size; i ) playerBoard[row i][col] = player;
}
}
例子:
char player = '#';
placeShip(3, 2, 5, false, player);
placeShip(2, 4, 4, true, player);
placeShip(0, 9, 3, false, player);
placeShip(6, 6, 3, true, player);
placeShip(8, 7, 2, true, player);
drawPlayerBoard();
輸出:
A B C D E F G H I J
1 . . . . . . . . . #
2 . . . . . . . . . #
3 . . . . # # # # . #
4 . . # . . . . . . .
5 . . # . . . . . . .
6 . . # . . . . . . .
7 . . # . . . # # # .
8 . . # . . . . . . .
9 . . . . . . . # # .
10 . . . . . . . . . .
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531770.html
標籤:C 视窗安慰
上一篇:將驗證注釋組合成單個注釋
